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 - Debci

#1611
Como siempre, besial, ya estoy testeandolo xD

Saludos
#1612
Cita de: egyware en  9 Enero 2010, 21:53 PM
Excelente tutorial
de hace tiempo que estaba buscando algo asi
MAS ARMAS °,..,°
off topic
aa cambie de fotos de avatar tal vez no te gusten
on topic
gracias men lo leere de inmediato
Consideremoslo un vinculo entre programadores de troyanos en java.

Saludos
#1613
PROGRAMACIÓN DE RED EN JAVA #2
Lectura y envio de paquetes, filtros, manipulación de paquetes....


Hola a tod@s y bienvenid@s una vez mas a esta entrega, sobre el desarrollo de nuestro propio sniffer.

Como prometí en mi anterior host, en esta ocasión vamos a tratar los siguientes temas:



  • Envio y lectura de paquetes completo (en este casi solo he puesto code).
  • Escritura de los paquetes leidos en un fichero, asi como lectura de los paquetes:
              Ejemplo práctico de leer paquetes, guardarlos en un archivo y re-enviarlos.
  • Filtros de lectura de paquetes, para nuestro programa y tambien para wireshark y otros.

Bueno, para refrescar un poco la memoria...
En la parte anterior a esta, comentabamos y aprendimos a saber que interfaces de red teniamos conectadas,estructurar y visualizar su información, como la direción mac, la ip, nombre de la interfaz de red...

Esta vez vamos a ir un poco mas lejos, vamos a recibir y escribir paquetes.

Bien empezamos, por algo que ya enseñé en el post anterior, leer paquetes de red, aqui el codigo:
Código (java) [Seleccionar]
JpcapCaptor captor=JpcapCaptor.openDevice(device[index], 65535, false, 20);

for(int i=0;i<10;i++){
  //Capturar un paquete simple y muestrearlo
  System.out.println(captor.getPacket());
}

captor.close();

Esta vez si que voy a explicar mas a fondo la clase JpcapCaptor, primero de todo decir, que es la clase que se encarga tramitar entre los paquetes de red y las interfaces, etsamos con esta clase, configurando la interface, el puerto, el modo, y el timeout de lectura:
Código (java) [Seleccionar]

Jpcap.openDevice(indice interfaz, puerto, modo promiscuo, timeout de lectura);

Ahora que esta explicada, vamos a a profundizar el codigo completo:


  • Primero de todo tenemos la declaración/encapsulación del objeto PcapCaptor, con el que ponemos a la escucha de paquetes a una interface. Para ello hemos indicado al programa con argumentos que, lo haga con la interfaz que esta en el indice index(int), sobre el puerto 65535, modo promiscuo desactivado y con un timeout de lectura de 20 ms.
  • En segundo lugar hemos creado un bucle lógico-condicional con el que leemos durante 10 loops con un timeout de 20 ms, por tanto leemos un maximo de 10 paquetes, si alguno se retrasa mas de 20 ms no lo leerá.
  • Y por ultimo cerramos la interfaz y la quitamos de la escucha de paquetes.

Bien ahora sabemos leer paquetes, ahora vamos a ser mas especificos, con la el tipo de captura, vamos a filtrar los paquetes, para ello vamos a usar el metodo setFilter() de PcapCaptor, veamos como:

Código (java) [Seleccionar]

JpcapCaptor captor=JpcapCaptor.openDevice(device[index], 65535, false, 20);
//Exclusivizamos la captura de paquetes para IPv4/TCP
captor.setFilter("ip and tcp", true);


Bien veamos, hemos dicho al captor de paquetes que solo coja los de tcp y ip (IPv4).
Esto es sencillo, pero saber todo esto de poco nos vale si tan solo capturamos paquetes, vamos a capturarlos y a guardarlos en un archivo de texto plano, para ello haremos uso de JpcapWriter:

Código (java) [Seleccionar]

JpcapCaptor captor=JpcapCaptor.openDevice(device[index], 65535, false, 20);
//OPertura de archivo
JpcapWriter writer=JpcapWriter.openDumpFile(captor,"yourfilename");


JpcapWriter nos proporciona un metodo para escribir archivos con el contenido del capturador, este metodo es openDumpFile, en el primer argumento le indicamos que obejto JpacpCaptor recive para escribir y en el segundo, indicamos con una string que archivo vamos a escribir.
No creo que haya complicaciones, quizas alguna FileNotFoundException, pero no mas.

Ahora toca escribirlos con un bucle lógico, combinando lo anterior con la escritura:

Código (java) [Seleccionar]

JpcapCaptor captor=JpcapCaptor.openDevice(device[index], 65535, false, 20);
//Opertura de archivo
JpcapWriter writer=JpcapWriter.openDumpFile(captor,"yourfilename");

for(int i=0;i<10;i++){
  //Captura un paquete sencillo
  Packet packet=captor.getPacket();
  //Guardar en el archivo abierto
  writer.writePacket(packet);
}
writer.close();

Con esto abriremos, leeremos y escribiremos paquetes en un archivo en concreto.
Bien ahora que hemos leido paquetes, los hemos dumpeado a un fichero, vamos a leerlos y a maquinar con ellos:

Código (java) [Seleccionar]

//Abre el archivo donde teniamos los apquetes leidos
JpcapCaptor captor=JpcapCaptor.openFile("yourfilename");

while(true){
  //Lee el archivo abierto
  Packet packet=captor.getPacket();
  //Si ocurre algo malo, algun erro u algo , rompemos el bucle
  if(packet==null || packet==Packet.EOF) break;
  //Printeamos el paquete leido
  System.out.println(packet);
}

captor.close();


El ejemplo es claro, pero quiero que ahora penseis, si recivimos paquetes, por ejemplo estando en un mitm, los leemos, y modificamos de manera automatizada con algun bucle, y desciframos información de estos, estamos ante una herramienta muy potente, y creada por nosotros, totalmente personalizable.

Bien ya dominamos la lectura y modificación de paquetes (si hombre, aunque no lo haya explicado sabeis que se puede modificar, por bytes, por String, por chars...), ahora toca el envio de paquetes, jeje....

Código (java) [Seleccionar]

//Abre la interface para envio
JpcapSender sender=JpcapSender.openDevice(devices[index]);

//Crea un paquete TCP personalizado con puertos y mierdas de esas xD como veis hay muchas opciones
TCPPacket p=new TCPPacket(12,34,56,78,false,false,false,false,true,true,true,true,10,10);

//Parametros de IPv4
p.setIPv4Parameter(0,false,false,false,0,false,false,false,0,1010101,100,IPPacket.IPPROTO_TCP,
  InetAddress.getByName("www.elhacker.net"),InetAddress.getByName("www.google.com"));

//El campo data del paquete
p.data=("data").getBytes();

//Crea un paquete tipo Ethernet para el envio
EthernetPacket ether=new EthernetPacket();
//Pone la frame como tipo IP
ether.frametype=EthernetPacket.ETHERTYPE_IP;
//Pone las mac de envio y recpcion
ether.src_mac=new byte[]{(byte)0,(byte)1,(byte)2,(byte)3,(byte)4,(byte)5};
ether.dst_mac=new byte[]{(byte)0,(byte)6,(byte)7,(byte)8,(byte)9,(byte)10};

//Envia el datalink al paquete para enviarlo
p.datalink=ether;

//Envia el paquete
sender.sendPacket(p);

sender.close();


Bien, para esto tendriais que ler algo sobre paquetes de red, wifi netowrks y esas cosas, en la secion de seguridad wireless hay mucho relacionado, pero comentar algo, para que veais que esto tiene un uso.
Bien si empezamos a leer paquetes, y reenviamos esos paquetes, podemos provocar reaciones extrañas, si hacemos esto de manera masvia cosas malevolas(que no debeis hacer sin permiso del que se compromete, porque ni yo ni elhacker.net se hacen responsables). Investigad, probad y no murais en el intento.

En el proximo tutorial hablaremos sobre el diseño final de un sniffer, y probablemente ya tenga el source para postearlo.

Un saludo a tod@s y espeor que os guste.

#1614
Cita de: ddk en  9 Enero 2010, 17:38 PM
Cita de: LEYER en  9 Enero 2010, 00:53 AM
Cita de: ddk en  8 Enero 2010, 23:10 PM
Buen tutorial, pero yo le agregaria una cosa.

¿Que ¿?=)(&%·"! es un Sniffer?
hajaja

Exelente habia leido sobre esto pero no lo use mucho :xD , tu tutorial se entiende bien y ya que lo entendi se me ocurre una que otra cosa  >:D interesante.

PD: Why not in eclipse? seria bueno :P

por cierto buen aporte :D

Saludos

¿Como así que en Eclipse?

Al fin y al cabo es Java, si te refieres a montarlo a Eclipse, ¿No se supone que si lo monta a Subversion también tendrías acceso al código desde Eclipse?
En teoria asi es, ahora voy a probar eclipse y si me gusta me quedo en eclipse.

Saludos
#1615
xDDDDDD
Que tiempos en lo suqe yo veia shin-chan xD
Culito culito xD

Saludos
#1616
No me gusta nada el condicional del while, es infinito y eso peude acarrear perdida de control del programa, podrias usar otro tipo de metods, como un for con el numero de rows que hay.

Saludos
#1617
Cita de: LEYER en  9 Enero 2010, 00:53 AM
Cita de: ddk en  8 Enero 2010, 23:10 PM
Buen tutorial, pero yo le agregaria una cosa.

¿Que ¿?=)(&%·"! es un Sniffer?
hajaja

Exelente habia leido sobre esto pero no lo use mucho :xD , tu tutorial se entiende bien y ya que lo entendi se me ocurre una que otra cosa  >:D interesante.

PD: Why not in eclipse? seria bueno :P

por cierto buen aporte :D

Saludos
Lo intentare en eclipse, pero solo me trajo problemas xD
Ssaludos

Citar
Vaya que anteriormente hace uff, habia tratado de portar la libpcap a java con ayuda de el jni, pero me quede en menos de headers cuando me enface de hacerlo.

Lo bueno que ya alguien realizo la portacion de una libreria similar ¬¬ creo que es la misma, se ve bueno el tutorial, le hechare un ojo, abra que ver que tan portable es, ya ven que generalmente esta siempre una mas avanzada que las otras.

Saludos
Hombre, siempre habra incompatibilidades, si no no te darian un installer xD
Se ponen los dos l classpath y ale xD

Saludos
#1618
Cita de: ddk en  8 Enero 2010, 23:10 PM
Buen tutorial, pero yo le agregaria una cosa.

¿Que ¿?=)(&%·"! es un Sniffer?
Sniffer: Olisqueador de red, capza de interceptar todo tipo de paquetes, con informacion comprometedora de la supuetsa victima.

Saludos
#1619
PROGRAMACIÓN DE RED EN JAVA
Paquetes TCP/UDP, conexiones de red, interfaces...


Hola a todos, recientemente me he puesto a estudiar las posibilidades de java como sniffer, asi que voy a poner lo que he aprendido, en unos cuantos tutoriales, y acabremos haciendo un sniffer.

Primero de todo decir que para todo esto estoy usando la libreria:
JPCAP -------> http://netresearch.ics.uci.edu/kfujii/jpcap/doc/download.html

Bien cabe comentar tambien que para ejecutar los ejemplos de los tutos, hace falta hacerlo bajo ROOT, asi que si no funciona, una psoible causa es esa.

Bien en el primer tutorial vamos a crear una mini-aplicacion tipo iwconfig-ifconfig que nos enumere todas las interfaces conectadas al equipo, bien empecemos:

Primero de todo hay que crear la lista de dispositivos, encapsulando la clase NetworkInterface a modo de array o matriz (para luego leer los interfaces usando un indice sencillo):

Código (java) [Seleccionar]
NetworkInterface[] devices = JpcapCaptor.getDeviceList();

Le asignamos a la matriz todos los dispositivos mediante el metodo getDEviceList() de la clase JpcapCaptor.

Una vez hecho estoy, vamos a recorrer el array con un bucle logico usando como limitador el length (longitud) del array:

Código (java) [Seleccionar]
for (int i = 0; i < devices.length; i++)

Muy sencillo, y ahora una vez estamos recorriendo vamos a mostrar informacion de los dispositivos, usando los metodos NetworkInterface:

Código (java) [Seleccionar]

//Metodo name para sacar el nombre la interface
System.out.println("Nombre de interface: "+devices[i].name + "\n======================================\n" + devices[i].description);

//Metodo datalink_name para sacar el nombre de este
System.out.println("Nombre del datalink: "+devices[i].datalink_name + "\n==========================================\n" + devices[i].datalink_description+".\n");

//Esta claro no? xD
System.out.print("Direción MAC: ");
  for (byte b : devices[i].mac_address)
    System.out.print(Integer.toHexString(b&0xff) + ":");


Bien con etso ultimo hemos visto de manera completa, como sacar información de todos los dispositivos de red que haya conectados al equipo, vamos a profundizarlo un poquito mas:

Código (java) [Seleccionar]

for (NetworkInterfaceAddress a : devices[i].addresses)
    System.out.println(" address:"+a.address + " " + a.subnet + " "+ a.broadcast);

Con eso, como es evidente, sacaremos la direcion de red, ip, mascara de red y demás.

Mmm esto esta muy bien, pero... yo quiero jugar con la red diran otros, pues os diré que esto lo reservo para el siguiente tuto, pero os pondre un pequeño adelanto para que vallais jugando y probando cosas si, quereis claro...

Vamos a leer 10 paquetes de red en un puerto determinado y una interface concreta:

Código (java) [Seleccionar]

JpcapCaptor captor=JpcapCaptor.openDevice(device[indice], 65535, false, 1);

for(int i=0;i<10;i++){
  //Capturamos un paquete y lo muestreamos
  System.out.println(captor.getPacket());
}

captor.close();

Como veis, el bucle se para en el decimo loop, y como leemos un paquete por loop, solo leemos 10 paquetes,y lo hacemos sobre la interface (hay que marcara que indice de interface con el int indice que correpsonde al indice del array).
En el puerto 65535, aqui escojemos que puerto queremos sniffar, leer, o escribir en un futuro no muy lejano paquetes.
El tercer parametro no es relevante ahora, pero ma starde lo explicaré.
El cuarto parametro es el que nos indica cuantos paquetes por cada llamada a getPacket() leemos, si ponemos envezde uno, 20, leeremos 20 paquetes por cada llamada a getPacket(), y por tanto 20 paquetes por loop, lo que viene a ser 10*20 = 200 paquetes.

Bueno, ahora os dejo un ejemplo para escritura de paquetes:

Código (java) [Seleccionar]

JpcapSender sender=JpcapSender.openDevice(devices[index]);


TCPPacket p=new TCPPacket(12,34,56,78,false,false,false,false,true,true,true,true,10,10);

p.setIPv4Parameter(0,false,false,false,0,false,false,false,0,1010101,100,IPPacket.IPPROTO_TCP,
  InetAddress.getByName("www.microsoft.com"),InetAddress.getByName("www.google.com"));


p.data=("data").getBytes();


EthernetPacket ether=new EthernetPacket();

ether.frametype=EthernetPacket.ETHERTYPE_IP;

ether.src_mac=new byte[]{(byte)0,(byte)1,(byte)2,(byte)3,(byte)4,(byte)5};
ether.dst_mac=new byte[]{(byte)0,(byte)6,(byte)7,(byte)8,(byte)9,(byte)10};
p.datalink=ether;

sender.sendPacket(p);

sender.close();


El codigo anterior, lo que hace es enviar un paquete en la interfaz de red (paquete de tipo TCP/IPv4/Ethernet), usando unos puertos determinados, entre dos hosts.

En el proximo tutorial aprenderemos a:


  • Envio y lectura de paquetes completo (en este casi solo he puesto code).
  • Escritura de los paquetes leidos en un fichero, asi como lectura de los paquetes:
              Ejemplo práctico de leer paquetes, guardarlos en un archivo y re-enviarlos.
  • Filtros de lectura de paquetes, para nuestro programa y tambien para wireshark y otros.
Y mucho mas!
Cuando acabe todo pondre el source de mi sniffer de red, en java bajo ide netbeans para que todos se beneficien y aprendan.

Un saludo y gracias por aguantarme xD (que leer esto no es moco de pavo)





#1620
Java / Re: Ayuda con mi aprendizaje con JAVA
8 Enero 2010, 21:24 PM
Cita de: ddk en  8 Enero 2010, 20:50 PM
Cita de: ..::| D3Bć1 |::. en  8 Enero 2010, 20:23 PM
Cita de: ddk en  8 Enero 2010, 15:51 PM
JNI tal vez lo puedes dejar de ultimo porque la ostia que no es facil  :xD (Experiencia propia)

Como algunos no programan en c++...

;)

Saludos

Si, que lastima ¿Verdad?
Otros no saben JME....

Saludos