[Tutorial #1]Primer paso para crear un sniffer en java

Iniciado por Debci, 8 Enero 2010, 23:07 PM

0 Miembros y 2 Visitantes están viendo este tema.

Debci

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)






Blitzkrieg'

Buen tutorial, pero yo le agregaria una cosa.

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



Debci

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

Leyer

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

AlbertoBSD

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
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Debci

#5
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

Blitzkrieg'

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?



Debci

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

egyware

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

Debci

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