| |
|
672
|
Comunicaciones / Redes / Re: ¿Estoy abriendo los puertos?
|
en: 2 Mayo 2020, 09:22 am
|
|
EdePC ese es el bueno, el que te trae -e --lua-exec y demás? Facilita mucho a gente que no tiene ninguna experiencia con comandos. Yo creo que el que uso es el que viene con nmap. En el github de nmap te tienen scrips como pueda ser un servidor en Lua para que corrar con el netcat y tal. Es muy útil para alojar y testear páginas o ver/compartir algunos archivos de forma sencilla.
|
|
|
|
|
673
|
Programación / Desarrollo Web / Re: ¿Como cambian el color de una imagen?
|
en: 2 Mayo 2020, 09:08 am
|
Pues hay bastantes formas. La más cutre y trabajosa posiblemente sea editar las fotos a mano y cambiarlas cada vez que pinchan en un color. Yo personalmente cambiaría el color de los píxeles usando el canvas y javascript. Te dejo un código en el que uso los colores para recrear la imagen con etiquetas a las que aplico css en base a los propios colores de cada pixel. En vez de eso puedes editar los colores directamente en la imagen que está sobre el canvas. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>OCR</title> <script> /* SHORTCUTJS lib by StringManolo. Use of the global Scope to code faster, reduce file sizes, reduce memory usage and make some code more readable/compact. Readable Version */ (function (){ DEFINE=function(constant, value) { if(window[constant]===undefined) { window[constant] = value } else { throw new ReferenceError(constant + " is already a property of the global/window Object.\nRedefinition not allowed."); } } wrapQS=function(selector) { return d.querySelector(selector) } wrapQSA=function(selector) { return d.querySelectorAll(selector) } wrapAEL=function(elemnt, event, value) { elemnt.addEventListener(event, value); } wrapDCE=function(element) { return d.createElement(element); } wrapUCOU=function(url) { return URL.createObjectURL(url) } DEFINE("d", window.document); DEFINE("w", window); DEFINE("$", wrapQS); DEFINE("$$", wrapQSA); DEFINE("dw", d.write); DEFINE("_", window.alert); DEFINE("ael", wrapAEL); DEFINE("dce", wrapDCE); DEFINE("ucou", URL.createObjectURL); })(); </script> </head> <body> <canvas id="canv" width="300" height="300"></canvas> <div id="output"></div> <!-- <a href="" id="a">click here to download your file</a> --> <style> canvas { background-color: blue; } body { background-color: #000; font-size: 2px; } span { padding: 0; letter-spacing: -1; } </style> <script> /* DOWNLOAD IMAGE CROSSORIGEN: (to avoid tainted canvas) */ const request = fetch("https://cors-anywhere.herokuapp.com/" + prompt("Introduce URL de imagen. Ej: google.com/favicon.ico")); request.then(function(resp) { return resp.blob(); }).then(function(blob) { let img = dce("img"); const blobURL = ucou(blob); img.src = blobURL; img.id = "imagen"; d.body.append(img); _("Imagen añadida"); }).then(function(){ ael($("#imagen"), "load", function(){LIIC()}); }).catch(function(error) { _("Error: " + error); }) /* LOAD IMAGE INTO CANVAS */ function LIIC() { let canvas = $("#canv"); let contexto = canvas.getContext("2d"); let imagen = $("#imagen"); canvas.width = imagen.width; canvas.height = imagen.height; contexto.drawImage(imagen,0,0); SacarPixeles(); /* GET PIXELS IMAGE COLOR AND DRAW A IMAGE */ function SacarPixeles(){ let dataImagen = contexto.getImageData(0,0, canvas.width, canvas.height); _("Tamaño imagen data: " + dataImagen.data.length); let pixR =[], pixG =[], pixB =[], pixA =[]; let k = ""; for(var i =0, j =0; i < dataImagen.data.length; i +=4, ++j) { k += "Colores pixel" +(j+1)+ ": Rojo=" +dataImagen.data[i]+" \nVerde=" +dataImagen.data[i+1]+" \nAzul=" +dataImagen.data[i+2]+" \nAlfa=" +dataImagen.data[i+3]+"\n\n\n"; pixR[j] = dataImagen.data[i].toString(16); pixG[j] = dataImagen.data[1+i].toString(16); pixB[j] = dataImagen.data[2+i].toString(16); pixA[j] = dataImagen.data[3+i].toString(16); } performance = d.createDocumentFragment(); for(var i=0; i < pixR.length; ++i) { var tdiv=dce("b"); var tbr=dce("br"); if(i % canvas.width == 0) { performance.appendChild(tbr); } /* ░▒▓█ */ tdiv.innerHTML = "▓"; tdiv.style.color = "#"+pixR[i]+""+pixG[i]+""+pixB[i]+""+pixA[i]+""; performance.appendChild(tdiv); } _("Escribiendo..."); $("#output").appendChild(performance); _("Imagen percorrida"); _(k); k = ""; } } </script> </body> </html>
|
|
|
|
|
674
|
Programación / Desarrollo Web / Re: Usar react offline?
|
en: 2 Mayo 2020, 08:58 am
|
|
Ya viera por ahí lo de instalarlo así en node. Lo malo es que tengo el Android que uso para desarrollo petado y mi internet es de pocos kb/s xD. Tiene que ir como lo estaba intentando, no sé cual es el problema... Lo intentaré de nuevo capturando las petis de las libs originales y las replico con netcat o algo. Se me hace extraño que no me vaya como lo intenté, por eso lo comenté a ver si alguien ve el problema. Con vue hice exactamente lo mismo y me va perfecto.
Si no lo consigo cuando me den los datos limpio un poco el Smartphone y lo instalo por node tal como me recomiendas. Gracias.
|
|
|
|
|
675
|
Comunicaciones / Android / Scraper cutre de los mensajes recientes del foro.Java, Js, Ncat, WebView, Termux
|
en: 2 Mayo 2020, 08:43 am
|
package com.stringmanolo.elhrecent; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; import android.webkit.WebChromeClient; import android.webkit.JsResult; import android.os.Handler; import com.stringmanolo.elhrecent.R; /* Este código ha sido desarrollado y probado en el siguiente entorno: Sistema: Android. IDE: Java N-IDE. Software adicional: Termux/netcat y google chrome. */ /* Como funciona? Pones un servidor a la escucha y abres esta aplicación. Como compilar? Debes crear un nuevo proyecto para Android y añadir el codigo. Este es el MainActivity.java Añade también el permiso de acceso a internet en el manifest y añade un webview en el activity_main.xml con id navegador android:id="@+id/navegador" */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* id.navegador definido en activity_main.xml */ final WebView Navegador; Navegador = (WebView)findViewById(R.id.navegador); /* Habilita javascript */ Navegador.getSettings().setJavaScriptEnabled(true); /* Utiliza chrome de cliente HTTP. */ Navegador.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert (WebView view, String url, String message, JsResult result ) { /* Habilita el alert */ return super.onJsAlert(view, url, message, result); } }); /* Cambia el userAgent para que no salga el confirm de tapatalk */ Navegador.getSettings().setUserAgentString("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"); /* Carga la página con mensajes recientes del foro. */ Navegador.loadUrl("https://foro.elhacker.net/recent.html"); /* Handler para zumbar el script en el contexto de la página del foro. Con espera asíncrona. */ final Handler jsh = new Handler(); @Override public void run() { /* Código desglosado: javascript: Pseudoprotocolo. Permite ejecutar el script en el contexto de la página actual. document.querySelectorAll(\".bordercolor\"); Obtiene todos los elementos de la página con la clase bordercolor. tags+=links[i].outerHTML;tags+=\"<p></p>\"; Obtiene el código de todos los elementos en un string y los separa utilizando etiquetas <p>. return \"SFRUUC8xLjEgMjAwIE9LDQoNCg==\" +''+btoa(tags); En la llamada a la funcion Scrap() retorna un ok status 200 codificado en base64 y codifica a base64 el código de todos los elementos obtenidos de la página. r.open('GET','http://127.0.0.1:8080/q?codigo='+Scrap(), 1); Envia una petición GET a la dirección 127.0.0.1 puerto 8080 el parámetro y en la propia url el retorno de la función Scrap() */ Navegador.loadUrl("javascript:function Scrap(){var links=document.querySelectorAll(\".bordercolor\");var tam=links.length;var tags=\"\";for(var i=1;i<tam;++i){tags+=links[i].outerHTML;tags+=\"<p></p>\";}return \"SFRUUC8xLjEgMjAwIE9LDQoNCg==\" +''+btoa(tags)}r=new XMLHttpRequest();r.open('GET','http://127.0.0.1:8080/q?codigo='+Scrap(), 1);r.send();r.onreadystatechange=function(){r.readyState==4&&r.status==200?alert(r.responseText):1}"); } }, 15000); /* Esperar 15 segundos para conexiones lentas. */ } } /* Se debe poner a la escucha previamente un servidor en la dirección y puerto que asignes en el script. Yo utilizo el siguiente comando: $ netcat -l -v 127.0.0.1 8080 | grep -Po '(?<=(codigo=)).*(?=HTTP)' | base64 -d > codigoH.html | netcat -l -k 127.0.0.1 8081 < codigoH.html | echo -e "\r\n\r\n\r\n" Comando desglosado: netcat -l -v 127.0.0.1 8080 Pone a la escucha y logea la actividad en la ip 127.0.0.1 y puerto 8080. Según tu versión de netcat puede cambiar la sintaxis. | grep -Po '(?<=(codigo=)).*(?=HTTP)' Obtiene solo el string entre codigo= y HTTP. Es decir, solo el 200 ok status y el código extraido de la página codificado en base64. | base64 -d > codigoH.html Decodifica de base64 y guarda el stream en un archivo codigoH.html | netcat -l -k 127.0.0.1 8081 < codigoH.html Pone a la escucha el netcat también en la dirección 127.0.0.1 con puerto 8081 y responde con una petición y el contenido html. De esta forma netcat actual de servidor válido para el navegador. Al poner http://127.0.0.1:8081 recibes el código. Según tu navegador puede que necesites preformatear el documento en un html válido y añadirle algunas cabeceras o etiquetas meta para la codificación. echo -e "\r\n\r\n\r\n" Añade el fin de la petición para que el navegador carge la página y rompe el netcat. */
Hice un scraper cutre para ver los últimos mensajes del foro en el Android. Se le puede meter el runable como servicio y arrancar al inicio para tenerlo 24/7. Hacer un intento desde un broadcast reciber, meterle un systemclock.pause, cambiar el netcat y demás por sockets, mostrar el código en una preview con notificaciones o en plan widget o ventana... También podeis meterle una interfaz de javascript y controlar el navegador desde el netcat con la interfaz, el pseudoprotocolo, el xhr y el eval. Por ejemplo podrías darte un llama cuelga automáticamente desde un Android a otro cuando alguien publique un nuevo tema en un foro que te interesa xD Puedes también enchufarle por pseudoprotocolo etiquetas style a lo bruto después del for tags+=\"<style>td{border-left: 3px solid red;background-color:lightgrey;}</style>\"; Puede reusar la misma metodología para enviar forms, o hacer otras tareas con javascript en otras páginas. Igual más alante lo mejoro para que se pueda automatizar con interfaz en múltiples páginas.
|
|
|
|
|
676
|
Programación / Desarrollo Web / Re: javascript Number.isInteger(10.0) retorna false
|
en: 1 Mayo 2020, 22:36 pm
|
|
En tu ejemplo no tienes posPx definido en ningún sitio.
Haz un: alert(typeof(this.posPx[1])); justo antes del if, a ver si es un número o un objeto, o algo distinto. Si usas por ejemplo new Number(10) estás creando un objeto, no un tipo number primitivo. Ten cuidado con tu código y las conversiones implícitas. Estaría bien que pusieras todo el código si no es excesivamente grande para poder ver cual es el problema.
Probablemente si haces esto: posPy[1] = +(posPy[1].toFixed(1)); se te solucione.
|
|
|
|
|
677
|
Programación / Desarrollo Web / Usar react offline?
|
en: 1 Mayo 2020, 19:11 pm
|
Hola, estoy intentando correr React offline y no tengo nada claro cual es el problema. En su web tienen estos script src: <script src=" https://unpkg.com/react@16/umd/react.development.js" crossorigin></script> <script src=" https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script> Entonces accedí a cada link y usando este programa: https://github.com/StringManolo/Smpider/blob/master/shortVersion.jsseleccioné el innerHTML de los pre tag de los links y me los descargué como 2 archivos. reactDev.js y reactDevDom.js Utilicé un ejemplo que tienen en la web y substituí los valores de ambos atributos src por la ruta de los nuevos archivos. Por último hice un servidor en node.js para responder al navegador con los content-type en la cabecera. Hago un url.parse con el módulo url y en base a la extensión escribi el content type adecuado. Algo así: if (pathname.substr(pathname.length-3 == ".js") { response.writeHead(200, { "Content-Type": "text/html"}); } else { response.writeHead(200, { "Content-Type": "text/javascript"}); } response.write(contenidoArchivo);
Probé varios content-type en lugar de text/javascript, no sé si estará ahí el error. Cuando cargo el index.html simplemente no carga el botón que se supone que tiene que cargar. El ejemplo es este de carga react en un minuto con las etiquetas script. https://reactjs.org/docs/add-react-to-a-website.html Básicamente quiero poder desarrollar offline y cachear las libs para que con mi caca internet no tarde 5 minutos en descargar las libs cada vez que abra una app en el navegador.
|
|
|
|
|
678
|
Comunicaciones / Redes / Re: ¿Estoy abriendo los puertos?
|
en: 1 Mayo 2020, 06:23 am
|
Hola, para comprobar si abriste los puertos puedes utilizar el netcat. Instalas el netcat, abres la consola de comandos o la terminal y escribes: netcat -v -l ipPublica/ipLocal -p puerto Minimizas, vas al navegador y escribes: ip:puerto Por ejemplo: consola: netcat -v -l -k 192.168.30.1 -p 9191 navegador: http://192.168.30.1:9191Tras escribir en el navegador, debería llegarte al netcat(consola) info sobre el navegador como el idioma, el userAgent, etc. Pd: Algunos proveedores de internet no te habilitan a abrir puertos por seguridad. A mi lla me pasó que abrí los puertos correctamente en el router y poniendo un programa a la escucha en dicho puerto y dirección ip, y tras analizar con varios scanner se mostraban como cerrados. Tuve que llamar al servicio técnico para que me permitieran abrir cualquier puerto. Ya hace de esto, me imagino que ahora ya no lo hacen, pero nunca se sabe.
|
|
|
|
|
679
|
Programación / Desarrollo Web / Re: Agregar evento onlick via javascript
|
en: 1 Mayo 2020, 06:15 am
|
|
Tal y como me vendes react te lo compro! Me gustaría masterizar vanilla primero, tiene muchísima API que aún no toqué casi nada o nada, como la de de audio, funciones en smartphones como la de vibrar... También estaba dando prioridad a webassembler porque se me empiezan a quedar los programas muy cortos de rendimiento. El DOM va mal mal a poco que haces. Incluso con un simple requestAnimationFrame escribiendo en un textarea letras con colores, a los 200 caracteres ya me caen los frames a la mitad. No puedo escribir en el DOM archivos de pocos megas... Me limita bastante en mis proyectos.
|
|
|
|
|
680
|
Programación / Scripting / Re: ¿Como hacer para corregir lineas de texto extraidas de un pdf?
|
en: 1 Mayo 2020, 05:46 am
|
No la probé pero creo que la forma de unsigned es mejor. Te hice un código para que guardes como html y lo uses para quitar los espacios. Copias el código, lo guardas como espacios.html y lo abres en el navegador. Pengas dentro del area el texto, de das al botón y ya te los quita. Después click derecho y seleccionar todo. También te dejé entre comentarios /* */ para quitar los saltos de linea. Si borras /* */ ya te quita también los saltos de línea. Si tiene más de 10 espacios consecutivos dale varias veces al botón xD. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style> textarea { width: 99%; height: 600px; overflow: scroll; } </style> </head> <body> <button type="button" id="xD2">Quita Espacios</button> <br /> <textarea id="xD" placeholder="Pon aquí tu texto"> 10 9 8 7 6 5 4 3 2 1 0</textarea> <script> var ta=document.querySelector("#xD"); document.querySelector("#xD2").onclick=function(){ta.value=Formatear(ta.value)}; function Formatear(texto) { return texto/*.replace(/(\r\n|\n|\r)/gm,"")*/ .replace(" "," ") .replace(" "," ") .replace(" "," ") .replace(" "," ") .replace(" "," ") .replace(" "," ") .replace(" "," ") .replace(" "," ") .replace(" "," ") }</script> </body> </html>
|
|
|
|
|
|
| |
|