Escolar Documentos
Profissional Documentos
Cultura Documentos
SNIFFER
Desarrollo:
Utilizando lenguaje C para Linux, implemente un sniffer que capture los paquetes que
estn viajando en la red, especficamente se deben capturar tramas Ethernet. Se debe
verificar que la carga til de la trama capturada es un datagrama IPv4, en caso de que no
se cumpla esta condicin, la trama es ignorada y se procesa la siguiente. Si se cumple
con la condicin anterior, se debe analizar la trama capturada y extraer la siguiente
informacin:
DIRECCIN IP FUENTE
DIRECCIN IP DESTINO
VERSIN DEL PROTOCOLO IP
LONGITUD DE CABECERA
TIPO DE SERVICIO
LONGITUD TOTAL DEL DATAGRAMA
IDENTIFICADOR DEL DATAGRAMA
DETERMINAR SI EL DATAGRAMA ESTA FRAGMENTADO O NO
TIEMPO DE VIDA
PROTOCOLO DE CAPA SUPERIOR
DETERMINAR SI EL DATAGRAMA TIENE OPCIONES O NO.
Toda esta informacin debe ser almacenada en un archivo de texto. Adems, al inicio de
este archivo se debe desplegar el nmero de paquetes que se capturaron de cada uno de
los protocolos de capa de superior.
El sniffer debe ser programado para poder dar como dato de entrada el nmero de
paquetes que deben ser capturados, ya sea a travs de la lnea de comandos o mediante
una cadena de entrada.
Protocolos de Internet Prctica 3 parte A
struct {
unsigned short ver_hdr; /*Versin y longitud de cabecera*/
unsigned short tipoServicio; /*Tipo de servicio*/
unsigned char longitudTotal; /*Longitud total del datagrama*/
unsigned char Identificador; /*Identificador de datagrama*/
unsigned char bandera_offset; /*Fragmentacin*/
unsigned short ttl; /*Tiempo de vida*/
unsigned short protocolo; /*Protocolo de capa superior*/
unsigned char sumVer; /*Suma de verificacin*/
unsigned char origenIP[4]; /*Direccin IP del transmisor*/
unsigned char destinoIP[4]; /*Direccin IP del receptor*/
} datIP;
Recuerden que para poder implementar el sniffer es necesario utilizar un socket de capa
de enlace de datos (SOCK_RAW), la familia de protocolos a utilizar debe ser PF_PACKET
y se debe configurar la tarjeta de red en modo promiscuo para que reciba todos los
paquetes que estn viajando en la red y no solamente los que van dirigidos a ella; para
esto se debe utilizar la funcin ioctl() y la estructura struct ifreq, dicha estructura contiene
la informacin de los adaptadores de red, y la funcin ioctl() permite modificar algunos
parmetros de estos adaptadores, para poder utilizarlas es necesario incluir las libreras
<sys/ioctl.h> y <net/if.h>. Una vez que se cierra el sniffer es necesario restablecer los
valores originales de la tarjeta de red, esto se puede logar con la siguiente instruccin: