Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - @XSStringManolo

#531
Dudas Generales / Re: Web y IP Interna?
7 Mayo 2020, 02:16 AM
Existen varias. La primera que se me viene a la cabeza es SSRF (Server Side Request Forgery). Se puede dar de muchas formas distintas. Ponte en el caso que la web example.com es una aplicación proxy web que hace una petición a la url que le indiques como path y te la muestra.
El uso normal podría ser: example.com/paginadelacompetencia.com

De tener la vulnerabilidad podrías hacer lo siguiente: example.com/192.168.1.1

Podrías llegar a ver el panel del router de la red de example.com
Si te pones en el caso de que tiene el usuario por defecto, podrías hacer lo siguiente:
example.com/192.168.1.1/login?u=admin&p=12345678

Es decir, a través de la página web, utilizas el servidor de proxy para acceder a la red interna.

Realemente exponer la IP privada no hace nada quitando situaciones extremadamente improbables.
#532
A mi los lenguajes cuanto más alto nivel, más me cuesta aprenderlos. Yo recomendaría C++ como primer lenguaje.
#533
Foro Libre / Colores favoritos?
5 Mayo 2020, 03:46 AM
 Me gustaría saber la preferencia en general de los usuarios del foro.
#534
Redes / Re: ¿Estoy abriendo los puertos?
4 Mayo 2020, 21:26 PM
Cita de: Caroxh1 en  4 Mayo 2020, 18:53 PM
wow, muchas gracias, me pusieron una sonrisa en al cara cuando funcionó xD.
Lo único es que no me funciona el -k, cuando le quito eso si funciona, ¿por qué pasa eso?
El -k es para aceptar múltiples sessiones. Por ejemplo si pones netcat -l y yo me conecto a tu netcat, cuando YO cierre la conexión si quiero volver a conectarme tu netcat abrá dejado de ejecutarse. En cambio con -k por mucho que yo cierre y abra conexiones tu netcat va a seguir activo hasta que TU lo pares.


-l es para escuchar.


sin -l es para conectarse a otro equipo.


-v es para que salga más info. Puedes meterle hasta 4 v para debug. -vvvv


Después en linux tienes entradas y salidas de streams para otros comandos y operadores como el | para ejecutar más comandos. Todo esto a parte del -e.


Por ejemplo si quiero crear un mini servidor web puedo crear a mano una respuesta http del estilo de 200 ok status guardarla en un archivo de texto y cuando alguien se me conecte al netcat le respondo con eso. Entonces el navegador la entiende y muestra la página web.
netcat -v -l -k 192.168.30.1 -p 8080 < peticionAMano.txt
En navegador http://192.168.30.1:8080 y ves la página web que tengas después de peticionAMano.txt


Puedes hacer lo mismo con cualquier protocolo como sea el ftp y demás.
#535
Si te fijas en el ejemplo te puse un casteo de string a int.

static_cast<int>(numeros[0])

Puedes sumar numeros así.
int numero = static_cast<int>(numeros[6]) + static_cast<int>(numeros[4]);




#536
Array de la STL (Std Template Library)

Este array es un wrapper sobre el array de C. Es lo más recomendado para lo que buscas porque añade métodos a los arrays de C que te simplifican y amplifican la funcionalidad de los arrays de C en C++.

Código (cpp) [Seleccionar]
#include <iostream>
#include <array>

using namespace std;

int main() {

  array<int, 10> numeros;

  for (int i = 0; i < 10; ++i) {
    numeros[i] = i;
  }

  cout << numeros[0] << endl; /* 0 */
  cout << numeros[1] << endl; /* 1 */
  cout << numeros[3] << endl; /* 3 */
  cout << numeros[8] << endl; /* 8 */
  cout << numeros[9] << endl; /* 9 */

  cin.get();

  return 0;
}




Vector de la STL
El vector es un wrapper sobre el array anterior. Cuando no sepas el tamaño de un array en tiempo de ejecución puedes utilizar el vector para que maneje la memoria automáticamente de forma dinámica. En resumen, no necesitas saber el tamaño de un array para usarlo.

Código (cpp) [Seleccionar]
#include <iostream>
#include <vector>

using namespace std;

int main() {

  vector<int> numeros;

  for (int i = 0; i < 10; ++i) {
    numeros.push_back(i);
  }

  cout << numeros[0] << endl; /* 0 */
  cout << numeros[1] << endl; /* 1 */
  cout << numeros[3] << endl; /* 3 */
  cout << numeros[8] << endl; /* 8 */
  cout << numeros[9] << endl; /* 9 */

  cin.get();

  return 0;
}



String de la STL
Este es muy similar al vector pero más adecuado para trabajar con texto.
En este caso no debería usarse el string porque se almacenan todos lo números en línea y si fuesen números de 2 cifras, se te descuadrarían en donde están las posiciones. Tendría fácil solución, como añadir un espacio tras cada número y recorrer todo el string imprimiendo los números entre espacios.

Te pongo el string de la STL porque a parte de que se puede usar para tu tarea es de los contenedores más sencillos y versátiles.

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>

using namespace std;

int main() {

  string numeros = "";

  for (int i = 0; i < 10; ++i) {
    numeros += i;
  }

  cout << static_cast<int>(numeros[0]) << endl; /* 0 */
  cout << numeros[1] << endl; /* 1 */
  cout << numeros[3] << endl; /* 3 */
  cout << numeros[8] << endl; /* 8 */
  cout << numeros[9] << endl; /* 9 */

  cin.get();

  return 0;
}



A parte de estos mencionados tienes otros de la STL como MAP, SET, LIST... Cada uno sirve para una tarea en concreto y tiene ventajas de velocidad en algunos aspectos, desventajas en otros y ciertas características y métodos únicos.

También tienes tipos de datos básicos de C/C++. Incluso podrías usar la memoria directamente con punteros, que básicamente es lo que hacen los arrays y similares, aritmética de punteros.

Lo mejor es que te pilles un libro bueno para que sepas lo que tienes que ir aprendiendo y en que orden.
Si sabes leer en inglés en el foro de dudas generales tienes un listado de libros de C++ entre otras cosas.
#537
Redes / Re: Puntero del ratón en un VPS
3 Mayo 2020, 23:01 PM
Va bien incluso desde el móvil, es super útil!
#538
Código (javascript) [Seleccionar]
var nl = 0;
$("#st").click(function (e) {
  obNiveles(id);
});



function Cniveles(nx) {
  console.log(nx);
  var dv = document.getElementById("levels");
  var tabla = document.createElement("table");
  var tblBody = document.createElement("tbody");
  var cclevels = 0;

  for (var i = 0; i < 5; i++) {
    var hilera = document.createElement("tr");
    for (var j = 0; j < nx; j++) {
      /* Nada de momento. */
    }
  }

  tblBody.appendChild(hilera);
  tabla.appendChild(tblBody);
  dv.appendChild(tabla);
}



function obNiveles(rt) {
  var STEP = {
    "x" : rt
  };
 
  $.ajax({
    data: STEP,
    url: 'scripts/datagame1.php',
    type: 'POST',
    success: function(data) {
      nl = data;
      Cniveles(nl);
      console.log('recibe:'+data+',valor puesto:'+nl);
    }
  });
}


Vuelvo a insistir, deberías tener una mejor consistencia en el código que usas. Te estás complicando mucho la vida por no ordenar el código bien y no cuesta nada.

Aquí tienes un artíctulo al respecto:  http://developinginspanish.com/2018/03/31/guia-de-estilo-javascript-de-google/
#539
Hay malware que se salta de la máquina virtual al host.
#540
Citar// aqui la eh dejado así null o vacia
/* Ni está null, ni está vacia ni sin definir. Es un number con valor 0. No es lo mismo. */
var nl = 0;

$("#st").click(function (e) {
  /* Usa mínimo 2 espacios de identación. A veces usas 1 y otras 2. Comprueba los ajustes de tu editor. */
  ObNiveles(id); 
  Cniveles();
});

function Cniveles() {   
  //AQUI APARECE 0 NULL O UNDEFINED, TODO DEPENDE DE QUE LE ASIGNE AL INICIO
  /* Depende del valor de nl cuando hagas la llamada a la función Cniveles. */
  console.log(nl);

  var dv = /* Deja siempre el mismo espacio entre el identificador de la variable, el operador de asignación y la expresión. */ $("#levels");
  /* No es coherente que antes obtengas por id de esta forma $("#st") y ahora utilizes el método getElementById, usa siempre la misma forma. */

  var tabla = document.createElement("table");

  var tblBody = document.createElement("tbody");

  var cclevels = 0;

  for (var i = 0; i < 5; i++) {   
    var hilera = document.createElement("tr");

    for (var j = 0; j < nl; j++) {     
      //AQUI NUNCA ENTRA COMO SU VALOR NUNCA PASA DE 0
      /* Depende del valor que tenga nl cuando llames a la función */
    }
  }
  tblBody.appendChild(hilera);
}

/* Aquí estás fuera de la función Cniveles y estás cerrando un corchete de un cuerpo que no existe o que no pegaste en el foro. Te lo dejo comentado. */
tabla.appendChild(tblBody);
dv.appendChild(tabla);
/*}*/

/* Sigue siempre el mismo patrón a la hora de nombrar variables y funciones. En la función anterior usas una mayúscula de primer letra y en esta usas minúscula */

function ObNiveles(rt) {
  var STEP = {
    "x"  : rt
  };

  $.ajax({
    data: STEP,
    url: 'scripts/datagame1.php',
    type: 'POST',
    success: function(data) {
      nl = data;
      //aqui me muestra "recibe:2,valor puesto:2", que es totalmente correcto
      console.log('recibe:'+data+',valor puesto:'+nl);
      /* Aquí estás en una función anónima callback. Esta función se llama cuando se complete la petición al servidor. Todo código que dependa del nuevo valor de nl deber ir aquí o ser llamada desde aquí. */

    }
  });
}