Você está na página 1de 23

Captura de Pacotes

RAFAEL ANTONELLO RTA@CIN.UFPE.BR

Agenda
Introduo Libpcap Network Tools Process Sniffer

Introduo
Como as redes transferem informao de um host

para outro?
Para que capturar pacotes? IDS Gerenciamento de redes Traffic Shapping

Libpcap

Introduo
O que ? Biblioteca em C para captura de pacotes Pode ser usada para... Manipular, capturar e injetar pacotes em uma rede Abstrai funes de baixo nvel dos SOs

Como Instalar

Linux http://www.tcpdump.org/release/libpcap-1.1.1.tar.gz Windows http://www.winpcap.org/install/default.htm Winpcap e Visual Studio 2008 http://geekswithblogs.net/dotnetnomad/archive/2008/01/30 /119088.aspx

O que incluir?
Geralmente esses headers

#include<netinet/in.h> #include <pcap.h> #include <netinet/ip.h> #include <stdio.h> #include <netinet/tcp.h> #include <stdlib.h> #include <arpa/inet.h> #include <sys/socket.h> #include<netinet/if_ether.h>
For Windows:

#include <winsock.h>

Procurando uma NIC


int main(int argc, char **argv) { char *dev; /* name of the device to use */ pcap_t* descr; /* pointer to device descriptor */ struct pcap_pkthdr hdr; /* struct: packet header */ const u_char *packet; /* pointer to packet */ bpf_u_int32 maskp; /* subnet mask */ bpf_u_int32 netp; /* ip */ char errbuf[PCAP_ERRBUF_SIZE]; /* ask pcap to find a valid device to sniff */ dev = pcap_lookupdev(errbuf); if(dev == NULL){ printf("%s\n",errbuf); exit(1); } printf("DEV: %s\n",dev);

Abrindo uma NIC


/* ask pcap for the network address and mask of the device */ pcap_lookupnet(dev,&netp,&maskp,errbuf); descr = pcap_open_live(dev,BUFSIZ, 0, -1,errbuf); /* BUFSIZ is max packet size to capture, 0 is promiscous, -1 means dont wait for read to time out. */ if(descr == NULL) { printf("pcap_open_live(): %s\n",errbuf); exit(1); } }

Capturando um pacote
packet = pcap_next(descr, &hdr); if ( packet == NULL ) { printf(Perdeu o pacote!\n"); exit(1); } else printf(capturou um pacote.\n); return 0; } //end main

Problemas???

Alternativa mais elegante


void my_callback(u_char *useless,const struct pcap_pkthdr* pkthdr,const u_char* packet) { //Faa o que quiser com o pacote } int main(int argc, char **argv) { //Abra a interface e inicie a captura pcap_loop(descr,-1,my_callback,NULL); return 0;

Material
Tutoriais http://www.tcpdump.org/pcap.html http://yuba.stanford.edu/~casado/pcap/section1.html

Network Tools

Introduo
Biblioteca que contm Um prottipo de wrapper OO para a Libpcap Programas para anlise de trfego

Redes ethernet e 3G

Prottipo de Sniffer para captura de pacotes de um processo Prottipo de Sniffer que marca os pacotes com a aplicao que os gerou

As classes wrapper funcionam para windows e linux A maioria dos programas podem ser compilados no

VC++ ou no linux usando o make

Dicas
Para Iniciar a Utilizao do Wrapper Sugiro comear do DumpTrunc Limitaes Nem todas as operaes em cima de um pacote esto implementadas A classe PacketInputStream abre somente arquivos

Download
http://dl.dropbox.com/u/1646991/Tools.rar Obs.: Fez alguma melhoria??? Mande o novo cdigo para

rta@cin.ufpe.br

ProcessSniffer

Introduo
Idia principal Capturar pacotes gerados por um determinado processo Como fazer? O SO mantm a lista de todas conexes e os respectivos PIDs
No windows IP_HELPER API Cada pacote contm as seguintes informaes IP Src, IP Dst, Port Src, Port Dst Ento podemos casar com as seguintes informaes sobre conexes abertas no windows IP Src, IP Dst, Port Src, Port Dst, PID

Funcionamento Geral
A cada pacote capturado Verifica-se se ele UDP ou TCP Caso seja UDP

Vare-se a lista de conexes UDP Verifica-se se alguma entrada casa com os seguintes campos
IP Src, IP Dst, Port Src, Port Dst, PID

Caso positivo o pacote armazenado, caso negativo descartado

Caso seja TCP

Vare-se a lista de conexes TCP Verifica-se se alguma entrada casa com os seguintes campos
IP Src, IP Dst, Port Src, Port Dst, PID

Caso positivo o pacote e armazenado, caso negativo descartado

Detalhes de Implementao
Funo para obter as conexes TCP AllocateAndGetTcpExTableFromStack Funo para obter as conexes UDP AllocateAndGetUdpExTableFromStack Ambos so funes da iphlpapi.dll

Problemas
Mas se j temos o process sniffer, pra que

desenvolver outro sniffer assim?!?

Captura de Pacotes
RAFAEL ANTONELLO

Você também pode gostar