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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  Tutorial básico de Quickjs
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tutorial básico de Quickjs  (Leído 13,804 veces)
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
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


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

open_18

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Tutorial básico de Quickjs
« Respuesta #1 en: 8 Noviembre 2021, 22:28 pm »

Pedir un solo CARÁCTER ALFANUMERICO (a-z, 1..9, ¿+¿/ etc) mediante una función. por favor


En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: Tutorial básico de Quickjs
« Respuesta #2 en: 12 Noviembre 2021, 15:50 pm »

Pedir un solo CARÁCTER ALFANUMERICO (a-z, 1..9, ¿+¿/ etc) mediante una función. por favor

Código
  1. import * as std from "std"; // importa libreria std para manejo de archivos en quickjs
  2.  
  3. const pedirUnSoloCaracter = texto => { // funcion para pedir un caracter
  4.  console.log(texto); // texto a mostrar al usuario solicitando el caracter
  5.  const fd = std.open("/dev/stdout", "r") // abre el archivo de salida estandar en modo lectura
  6.  const linea = fd.getline(); // lee toda la linea
  7.  fd.close(); // cierra el archivo
  8.  
  9.  if (linea.length > 1) { // La linea contiene mas de un caracter
  10.    throw new Error("Mas de un caracter");
  11.  } else if (! /[a-zA-Z0-9]/.test(linea) ) { // alfanumerico
  12.    if (linea === "ñ" || linea === "ç") { // maneja caracteres extra que no contempla la expresión regular a-zA-Z
  13.      return linea;
  14.    }
  15.    // else implicito { // si no es alfanumerico o alguno de los caracteres manejados, tira el error
  16.    throw new Error("El caracter no es una letra o un numero");
  17.  } else {
  18.    // retorna el caracter
  19.    return linea;
  20.  }
  21. }
  22.  
  23.  
  24. /* Instrucciones del programa */
  25.  
  26. try { // meneja las excepciones
  27.  const caracter = pedirUnSoloCaracter("Introduce un caracter"); // pide un caracter
  28.  console.log("El caracter introducido es " + caracter); // muestra el caracter si no hubo errores
  29. } catch (err) { // captura posibles errores
  30.  console.log(err); // muestra el error.
  31. }
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Tutorial Basico Del Hacker Defender 1.0.0
Tutoriales - Documentación
h4z3 0 8,321 Último mensaje 13 Junio 2004, 00:16 am
por h4z3
Tutorial ASM (básico) + ejemplos « 1 2 3 »
ASM
Carlosnuel 21 216,020 Último mensaje 15 Agosto 2010, 20:16 pm
por undersubnet
[Tutorial Basico] Jugando con XSS y mas
Nivel Web
_tukan_ 5 5,709 Último mensaje 4 Abril 2010, 14:54 pm
por Servia
Algun tutorial basico de batch??
Scripting
Kriis06 1 2,773 Último mensaje 25 Julio 2010, 14:12 pm
por _
Tutorial básico de TrueCrypt.
Criptografía
Saberuneko 1 4,456 Último mensaje 11 Abril 2014, 21:17 pm
por Saberuneko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines