Documentación explícita referente a redes, sistemas y seguridad informática.
Categorías
Administración y Seguridad Programación
Afiliados
- Autor: Protos
- |
- Fecha: 2009-10-22
- |
- Categoría: Laboratorio N-D
Existen infinidad de sniffers más que competentes, y probablemente superiores a lo que podamos codear nosotros, pero igualmente vamos a ver como programar nuestros propios sniffers.
Para ello nos valdremos de la librería Pcap, disponible en Ruby.
Vamos a pasar directamente a la acción y no me voy a detener a explicar casi nada de teoria, al final colocaré links suficientes donde ir a mirar esas cosas.
Pues manos a la obra. Vamos a monitorear todo el tráfico que entre/salga en nuestra red, para comprender como funcionan los protocolos, capturar información interesante, o lo que sea. Para nuestro ejemplo capturaremos el tráfico correspondiente al puerto 80, es decir, monitorearemos el protocolo HTTP.
#Requerimos la libreria
require 'pcaplet'
include Pcap
#Creamos el objeto Pcaplet para capturar
#Acepta diferentes parametros, en este caso -s int. Es la longitud que capturará de cada paquete
sniff=Pcaplet.new('-s 1500')
#Ahora definimos un par de filtros, no queremos capturar todo el tráfico de la red
#Tan solo es específico al protocolo tcp que entre y salga del puerto 80
filtro1=Pcap::Filter.new('tcp and src port 80', sniff.capture)
filtro=Pcap::Filter.new('tcp and dst port 80', sniff.capture)
#Añadimos los filtros a nuestro sniff
sniff.add_filter(filtro | filtro1)
#Ahora trabajamos con cada paquete. Mostramos cada paquete
sniff.each_packet {|x|
puts x
}
Aquí tendríamos un sniffer para todo lo que entre y salga del puerto 80 bastante sencillo.
Una de las partes más interesantes del pcaplet es la definicion de los filtros, para poder capturar los paquetes exclusivamente que nosotros queramos. Como veis la cadena de filtro tiene una sintaxis propia, para más info [1] (sección filtros). Decir que es propia... En realidad está basado en tcpdump, ver (2)
Sobre esto luego se pueden hacer todas las mejoras que se quieran, dejo dos códigos a continuación, por un lado, un sniffer para http, mejorado, y el segundo un sniffer que captura todas las conversaciones de msn en red.
http://n3t-datagrams.net/lab/http_sniffer.rb.txt
http://n3t-datagrams.net/lab/msnsniff.rb.txt
Obviamente para que los programas funcionen se necesita intérprete de ruby y la librería pcap instalada Descarga en (3)
(1) http://www.arrakis.es/~terron/tcpdump.html
(2) http://es.wikipedia.org/wiki/Tcpdump
(3) http://raa.ruby-lang.org/project/pcap/
Manual Pcaplet: http://www.goto.info.waseda.ac.jp/~fukusima/ruby/pcap/doc/index.html
Más ejemplos explicados (inglés): http://arstechnica.com/open-source/news/2005/10/linux-20051002.ars
_________________________________________________________________________________
1. prodigy - 2009-10-22:
Muchas gracias por el tutorial sh4v!, esta muy bien explicado y ademas es muy facil modficar el código para que intercepte paquetes por otros puertos. Espero que sigas aportando contenido de calidad como siempre haces! Saludos!!
---------------------------------------------------------------
2. Sh4v - 2009-10-22:
Ey prodigy! jeje gracias pero el tuto no es mío! es del colega Protos! me alegro de que te guste :)
---------------------------------------------------------------
Para ello nos valdremos de la librería Pcap, disponible en Ruby.
Vamos a pasar directamente a la acción y no me voy a detener a explicar casi nada de teoria, al final colocaré links suficientes donde ir a mirar esas cosas.
Pues manos a la obra. Vamos a monitorear todo el tráfico que entre/salga en nuestra red, para comprender como funcionan los protocolos, capturar información interesante, o lo que sea. Para nuestro ejemplo capturaremos el tráfico correspondiente al puerto 80, es decir, monitorearemos el protocolo HTTP.
#Requerimos la libreria
require 'pcaplet'
include Pcap
#Creamos el objeto Pcaplet para capturar
#Acepta diferentes parametros, en este caso -s int. Es la longitud que capturará de cada paquete
sniff=Pcaplet.new('-s 1500')
#Ahora definimos un par de filtros, no queremos capturar todo el tráfico de la red
#Tan solo es específico al protocolo tcp que entre y salga del puerto 80
filtro1=Pcap::Filter.new('tcp and src port 80', sniff.capture)
filtro=Pcap::Filter.new('tcp and dst port 80', sniff.capture)
#Añadimos los filtros a nuestro sniff
sniff.add_filter(filtro | filtro1)
#Ahora trabajamos con cada paquete. Mostramos cada paquete
sniff.each_packet {|x|
puts x
}
Aquí tendríamos un sniffer para todo lo que entre y salga del puerto 80 bastante sencillo.
Una de las partes más interesantes del pcaplet es la definicion de los filtros, para poder capturar los paquetes exclusivamente que nosotros queramos. Como veis la cadena de filtro tiene una sintaxis propia, para más info [1] (sección filtros). Decir que es propia... En realidad está basado en tcpdump, ver (2)
Sobre esto luego se pueden hacer todas las mejoras que se quieran, dejo dos códigos a continuación, por un lado, un sniffer para http, mejorado, y el segundo un sniffer que captura todas las conversaciones de msn en red.
http://n3t-datagrams.net/lab/http_sniffer.rb.txt
http://n3t-datagrams.net/lab/msnsniff.rb.txt
Obviamente para que los programas funcionen se necesita intérprete de ruby y la librería pcap instalada Descarga en (3)
(1) http://www.arrakis.es/~terron/tcpdump.html
(2) http://es.wikipedia.org/wiki/Tcpdump
(3) http://raa.ruby-lang.org/project/pcap/
Manual Pcaplet: http://www.goto.info.waseda.ac.jp/~fukusima/ruby/pcap/doc/index.html
Más ejemplos explicados (inglés): http://arstechnica.com/open-source/news/2005/10/linux-20051002.ars
_________________________________________________________________________________
1. prodigy - 2009-10-22:
Muchas gracias por el tutorial sh4v!, esta muy bien explicado y ademas es muy facil modficar el código para que intercepte paquetes por otros puertos. Espero que sigas aportando contenido de calidad como siempre haces! Saludos!!
---------------------------------------------------------------
2. Sh4v - 2009-10-22:
Ey prodigy! jeje gracias pero el tuto no es mío! es del colega Protos! me alegro de que te guste :)
---------------------------------------------------------------


