elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: El geolocalizador de IP's ya funciona con IPv6


  Mostrar Mensajes
Páginas: 1 ... 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [29] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 ... 295
281  Programación / Desarrollo Web / [Aporte] Bot de Telegram en Quickjs. (Construye el tuyo) en: 13 Enero 2021, 06:03 am
Me apetecía programar una IA en javascript y necesitaba alguna forma de pasarle input, asique decidí hacer un bot de telegram.
Como ya van varios bots que hago, alguno salió algo buggeado y posiblemente en el futuro haga otros parecidos, decidí hacer un bot/nucleo a partir del cual pueda escribir cualquier bot.

Asique este bot tiene lo básico y mínimo indispensable que se puede necesitar para un bot. Le metí varios argumentos cli básicos para configurar el bot, meterle el token y ver su uso.
También le metí que responda al telegram a unos pocos comandos de ejemplo.

De momento no encontré ningún bug. Si encuentro alguno o meto algún cambio interesante o importante, lo añadiré aquí.

Código
  1. import * as std from "std";
  2. import * as os from "os";
  3.  
  4. let run = command => {
  5.  let p = std.popen(command, "r"),
  6.  msg = "",
  7.  r = "";
  8.  
  9.  while(( r = p.getline() ) != null) {
  10.    msg += r + "\n";
  11.  }
  12.  return msg;
  13. }
  14.  
  15. let cli = {};
  16. cli.COLORS = {
  17.  RED: "\x1b[31m",
  18.  RESET: "\x1b[0m",
  19.  YELLOW:"\x1b[33m",
  20.  BLUE: "\x1b[34m",
  21.  GREEN: "\x1b[32m"
  22. };
  23.  
  24. for (let i in scriptArgs) {
  25.  switch(scriptArgs[i]) {
  26.    case "-t":
  27.    case "--token":
  28.      cli.token = scriptArgs[+i + +1];
  29.    break;
  30.  
  31.    case "-s":
  32.    case "--save":
  33.      let fd = std.open(".token", "w");
  34.      fd.puts(cli.token);
  35.      fd.close();
  36.    break;
  37.  
  38.    case "-l":
  39.    case "--load":
  40.      cli.token = std.loadFile(".token");
  41.    break;
  42.  
  43.    case "-h":
  44.    case "--help":
  45.      throw `
  46.  
  47. usage: qjs tgbot.js [options]
  48.  -t  --token            Telegram Bot Api Token. https://t.me/BotFather
  49.  -s  --save             Save the token internally to start the bot in the future without manually provide the token each time.
  50.  -l  --load             Use the saved token to start the bot.
  51.  -h  --help             This message.
  52.  -v  --verbose          Show basic feedback to the command line interface.
  53.  -w  --wait             Bot delay in seconds. (Can process multiple messages at once, so you don't need a really low number to don't fallback).
  54.  
  55. Examples:
  56. qjs tgbot.js -t 192829292:iqidkwiexampleunvalidtokeniwjwusjwis -s -v
  57.  
  58. qjs tgbot.js -l -v
  59.  
  60. qjsc -o ctgbot tgbot.js && cp tgbot ~/../usr/bin/
  61. tgbot -l -w 2 -v
  62.  
  63. `;
  64.  
  65.    case "-v":
  66.    case "--verbose":
  67.      cli.v = true;;
  68.    break;
  69.  
  70.    case "-w":
  71.    case "--wait":
  72.      cli.wait = scriptArgs[+i + +1];
  73.    break;
  74.  }
  75. }
  76.  
  77.  
  78. if (!cli.token) {
  79.  throw `${cli.COLORS.RED}No has introducido tu token de telegram.${cli.COLORS.RESET}
  80.  
  81. Si aún no pusiste tu token.
  82. Inicia con: qjs tgbot.js -t 183828181:kqnsiwnskwkziqnsoqnsiqn -s
  83.  
  84. Si ya introduciste tu token.
  85. Inicia con: qjs tgbot.js -l
  86.  
  87. Si aún no tienes un token.
  88. Visita ${cli.COLORS.BLUE}https://t.me/BotFather${cli.COLORS.RESET} y escríbele /newBot
  89.  
  90.  
  91. ESCRIBE ${cli.COLORS.YELLOW}qjs tgbot.js -h${cli.COLORS.RESET} PARA OBTENER LISTA DE COMANDOS.`;
  92. }
  93.  
  94. let bot = () => {
  95. let api = run(`curl https://api.telegram.org/bot${cli.token}/getUpdates --silent`);
  96.  
  97. let apiJson = JSON.parse(api);
  98.  
  99. if (apiJson.ok !== true) {
  100.  throw `Telegram Api Returning An Error:
  101. ${api}`;
  102. }
  103.  
  104. if (!apiJson.result) {
  105.  throw `No results to parse:
  106. ${api}`;
  107. }
  108.  
  109. let process = (text, username, chatId) => {
  110.  let response = "";
  111.  
  112.  
  113.  if (text.substr(0,1) == "/") {
  114.    let recv = text.substring(1).toLowerCase();
  115.    switch(recv) {
  116.      case "start":
  117.        response = "Comandos Disponibles:\n/Placeholder1 Haz esto\n/Placeholder2 Haz Aquello\n";
  118.      break;
  119.  
  120.      case "hola":
  121.        response = `Hola ${username} soy un bot escrito en javascript por @StringManolo.`;
  122.      break;
  123.  
  124.      case "adios":
  125.      case "chao":
  126.        response = `Un placer ${username}! Qué vaya bien.`;
  127.      break;
  128.  
  129.      default:
  130.        response = `No se que significa ${recv}...`;
  131.    }
  132.  
  133.  }
  134.  
  135.  if (response) {
  136.    cli.v && console.log(`Respuesta: ${response}\n`);
  137.    let aux = `https://api.telegram.org/bot${cli.token}/sendMessage?chat_id=${chatId}&text=${encodeURIComponent(response)}`;
  138.    run(`curl "${aux}" --silent`);
  139.  }
  140. }
  141.  
  142.  
  143. let lastId = 0;
  144. for (let i in apiJson.result) {
  145.  if (apiJson.result[i].message &&
  146.  apiJson.result[i].message.text &&
  147.  apiJson.result[i].update_id &&
  148.  apiJson.result[i].message.from.username &&
  149.  apiJson.result[i].message.chat.id) {
  150.    let text = apiJson.result[i].message.text;
  151.    let updateId = apiJson.result[i].update_id;
  152.    let username = apiJson.result[i].message.from.username;
  153.    let chatId = apiJson.result[i].message.chat.id;
  154.    lastId = updateId;
  155.    process(text, username, chatId);
  156.  }
  157. }
  158.  
  159. let borrarMensajesApi = () => {
  160.  run(`curl https://api.telegram.org/bot${cli.token}/getUpdates?offset=${+lastId + 1} --silent`);
  161. }
  162.  
  163. borrarMensajesApi();
  164. cli.v && console.log("Bot process end");
  165. }
  166.  
  167. let i = 0;
  168. for (;;) {
  169.  cli.v && console.log(`Running bot for the ${++i}° time.`);
  170.  bot();
  171.  cli.v && console.log(`Waiting ${(cli.wait || 20)} seconds to save resources.`);
  172.  os.sleep( (cli.wait || 20) * 1000);
  173. }
282  Programación / Desarrollo Web / Re: Ocupar el espacio restante de un contenedor, help! en: 13 Enero 2021, 04:17 am
El % hace referencia al documento.

100% es el 100% del documento.

En tu caso el documento son el primer div con 1000px de alto, y los otros divs con 100px cada uno.

Sin contar el div que quieres centrar tienes el primer div con 1000px, el segundo div con 100px y el cuarto div con 100px.

Ponte en el caso de que no sabes el tamaño del primer div. Puedes usar calc para hacer cálculos a partir del tamaño del documento:

<div style="background-color: #FFEB3B; width: 100%; height: calc(100% - 100px - 100px - 10px)">   </div>

Esos últimos 10px te los puse para que veas un trozito negro para confirmas que está ocupando justo el espacio que quieres.

En tu caso al poner 1000px, estás limitando la resolución. Si por ejemplo tengo una pantalla de 4000 px, tu div solo me ocupará 1/4 de la pantalla de alto. Como en el width si que usas el 100%, en todas las pantallas se verás algo distinto. Por eso te recomiendo que uses el height también como %.
Por ejemplo le pones al body el 100%, al primer div el 50% al secundo el 5%, etc
283  Programación / Programación C/C++ / Re: Socket c++ en: 12 Enero 2021, 22:15 pm
Al servidor le da igual desde donde se le mande la petición. Asique tiene que ser problema del código de tu cliente.

Busca algún ejemplo de cliente por la web que te funcione. Yo suelo usar ncat para debuggear este tipo de aplicaciones.
284  Foros Generales / Dudas Generales / Re: Alguna duda o pregunta que quieran realizar? en: 10 Enero 2021, 04:00 am

Por donde empezarias en este mundillo si no quisieras gastarte un duro.
Si no quieres gastarte un duro tira por la descarga de libros gratuitos y videos de youtube. Practica en páginas de hacking como hackthissite.org y root-me.org, aprende programación, haz ctfs, lee blogs y sigue a los más reconocidos por twitter ya que publican contenido interesante así como sus propios blogs de seguridad. En este punto ya puedes encontrar fallos de seguridad en empresas con millones de visitas y obtener remuneración. Lo más importante es la constancia. Aprende de forma moderada para no quemarte. Estimo que lo idoneo son de 2 a 4 horas diarias con 5 minutos de descanso cada 40 mins. Puedes forzar muchísimo más la máquina pero a la larga no compensa. Hay que vivir la vida también, hacer deporte, relajarse, reflexionar...
285  Programación / Desarrollo Web / Tutorial básico de Quickjs en: 9 Enero 2021, 03:38 am
Tutorial básico de quickjs.

Qué es:
Quickjs es un entorno de ejecución (motor) de javascript que cumple en gran medida con el estandar de javascript.

Sirve para interpretar, ejecutar o compilar codigo javascript.


Cómo se compara a Node.js y a Chrome:
Quickjs es mucho más pequeño que node o v8. Se ejecuta de forma rápida sin esperar al cargar scripts y ocupa poco espacio, lo que lo hace ideal para crear pequeños scripts y utilidades para la consola de comandos de Linux, Windows o Termux.
                                                     
Como se instala:
Puedes descargarlo de su página oficial, de github y compilarlo o utilizando apt-get install quickjs


A parte del javascript estandar que más trae:
Trae 2 librerías preinstaladas que podemos importar. std y os.
La librería std trae varias funciones del lenguaje de C y la librería os trae hilos, funciones para abrir procesos, y varias utilidades.


Al lio:
holaMundo.js
Código
  1. console.log("Hola mundo");

Puedes ejecutarlo con el comando qjs holaMundo.js
También puedes compilarlo con qjsc -o holaMundo holaMundo.js


correrCualquierComando.js
Código
  1. import * as std from "std";
  2. let run = comando => {
  3.  let prog = std.popen(comando, "r");
  4.  let r, msg = "";
  5.  while ((r = prog.getline()) != null) {
  6.    msg += r + "\n";
  7.  }
  8.  return msg;
  9. }
  10.  
  11. console.log( run("ls") );
  12. console.log( run("ls && pwd") );


generadorDeArchivos.js
Código
  1. import * as std from "std";
  2. console.log(`Generador de archivos 2021
  3.  
  4. Genera el esqueleto de archivos para no tener que escribir a mano partes recurrentes de archivos comunes.
  5.  
  6.  
  7. 1. Proyecto HTML
  8. 2. Reporte de Seguridad
  9.  
  10. Selecciona el número correspondiente a la opción que deseas.`);
  11.  
  12. let opcionUsuario = +std.in.getline();
  13.  
  14. if (opcionUsuario === 1) {
  15.  let fd = std.open("index.html", "w");
  16.  fd.puts(`<!DOCTYPE html>
  17. <html lang="en">
  18.  <head prefix="og:http://ogp.me/ns#">
  19.    <meta charset="utf-8">
  20.    <link rel="icon" href="data:;base64,iVBORw0KGgo=">
  21.    <title>Index.html</title>
  22.    <!--
  23.      <meta property="og:type" content="website">
  24.    -->
  25.    <link rel="stylesheet" href="./code.css">
  26.    <meta name="theme-color" content="#ffffff">
  27.  </head>
  28.  
  29.  <body>
  30.  
  31.  
  32.    <script src="./main.js"></script>
  33.  </body>
  34. </html>`);
  35.  fd.close();
  36.  
  37.  fd = std.open("main.js", "w");
  38.  fd.close();
  39.  
  40.  fd = std.open("code.css", "w");
  41.  fd.puts(`body {
  42.  margin: 0 0 0 0; /* Remove ugly left side border */
  43.  text-size-adjust: none; /* Fix Android Big Text */
  44.  text-rendering: optimizeLegibility; /* Improve text */
  45. }
  46.  
  47.  /* Media query */
  48.  @media (min-width: 0px) and (orientation:landscape) {
  49.  body {
  50.    font-size: 1.1vw;
  51.  }
  52. }`);
  53.  fd.close();
  54. } else if (opcionUsuario === 2) {
  55.  console.log("Esta opción se programará en el futuro");
  56. }



scraper.js
Código
  1. import * as std from "std";
  2.  
  3. let run = comando => {
  4.  let prog = std.popen(comando, "r");
  5.  let r, msg = "";
  6.  while ((r = prog.getline()) != null) {
  7.    msg += r + "\n";
  8.  }
  9.  return msg;
  10. }
  11.  
  12. let getTargetAndSelector = () => {
  13.  let returnValues = {};
  14.  for(let i in scriptArgs) {
  15.    if (scriptArgs[i] == "-t" || scriptArgs[i] == "--target") {
  16.      returnValues.target = scriptArgs[+i+1];
  17.    } else if (scriptArgs[i] == "-s" || scriptArgs[i] == "--selector") {
  18.      returnValues.selector = scriptArgs[+i+1];
  19.    }
  20.  }
  21.  if (returnValues.target && returnValues.selector) {
  22.    return [returnValues.target, returnValues.selector];
  23.  } else {
  24.    throw `Usage:
  25. -t  --target  Url to download
  26. -s  --selector Selector to use
  27.  
  28. Example: qjs scraper.js -t https://example.com -s h1`;
  29.  }
  30. }
  31.  
  32.  
  33. let result = run(`curl ${getTargetAndSelector()[0]} -A "Mozilla/5.0" --silent | pup ${getTargetAndSelector()[1]}`);
  34. console.log(result);

Puedes compilarlos y meterlos en bin y darle permisos para usarlos como cualquier otro comando sin necesidad de estar en la misma carpeta que el código.
qjsc -o scraper scraper.js && cp scraper ~/../usr/bin/ && chmod +775 ~/../usr/bin/scraper
scraper -t https://example.com -s a



Documentación Official Quickjs: https://bellard.org/quickjs/quickjs.html


Documentación Herramienta Pup para usar selectores en la linea de comandos: https://github.com/ericchiang/pup
286  Programación / Desarrollo Web / Re: [Aporte] javascript - Proporción de números en: 9 Enero 2021, 02:03 am
Qué recuerdos del colegio. Ahí va mi forma de hacerlo:
Código
  1. let proporcion = (...nums) => {
  2.  let greater, less = 0, equal = 0;
  3.  
  4.  for(let i in nums) {
  5.    nums[i] < 0 && ++less;
  6.    nums[i] == 0 && ++equal;
  7.  }
  8.  
  9.  greater = ( nums.length - (less + equal) ) / nums.length;
  10.  less /= nums.length;
  11.  equal /= nums.length;
  12.  
  13.  return [greater, less, equal];
  14. }
  15.  
  16. alert(proporcion(-5, 5, 4, 3, 2, 1, 0, -1));
287  Seguridad Informática / Seguridad / Re: La app y extension LastPass es segura y fiable? en: 5 Enero 2021, 00:49 am
Yo solo tengo una contraseña. La del correo. La del resto de servicios las pongo random y las regenero cada vez que necesito hacer login.

Algunos servicios te dejan directamente acceder mediante link de correo sin necesidad de establecer contraseña. (Firebase te deja esta opción por ejemplo)
288  Programación / Desarrollo Web / Re: [Pregunta]: Definir un arreglo vacío (javascript). en: 4 Enero 2021, 05:25 am
Que se supone que quieres saberbo hacer?

El titulo de tu pregunta es como declarar un array vacio y ya lo estás haciendo.

En tu código tienes un bucle de 0 al tamaño del array vacio, que también es 0. Asique tu bucle hace 0 iteraciones, o lo que es lo mismo, no hace nada.

Aunque iterases una vez el bucle, estás haciendo append de un elemento de una array que no tiene elementos. El array no tiene dentro []. No tiene nada dentro. [] Es para delimitar los elementos que pertenecen al array.
var myArray = [1, 3];

Pregunta algo concreto o muestra el problema que quieres resolver.
289  Foros Generales / Dudas Generales / Re: [MOD] restringir webs con datos móvil en: 30 Diciembre 2020, 01:04 am
Si se lo quiere jugar todo, hasta sus órganos, es su vida.

Ha estado trabajando toda la vida para que pueda hacer con su dinero y sus propiedades lo que le de la gana.

Consulta a un abogado para que evalue la situación de tu aval a ver si tienes alguna clausula (que dudo mucho que tengas porque la mayoria firma palante y después llora) para dejar de ser aval.

En caso contrario la única salida legal es intentar negociar con la entidad bancaria, que no está obligada a absolutamente nada.

290  Programación / Programación C/C++ / Re: [?] Crear un terminal mediante código. en: 29 Diciembre 2020, 21:12 pm
Se llama reverse shell. Puedes usar funciones como popen y system entre otras.

Simplemente mandas el texto desde el servidor al cliente, en el cliente lo ejecutas con popen y mandas la respuesta del comando al servidor.
Páginas: 1 ... 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [29] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 ... 295
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines