Você pode usar libpcap
. O Libpcap é uma biblioteca de código aberto que fornece uma interface de alto nível para o sistema de captura de pacotes de rede.
A API Libpcap foi projetada para ser usada a partir de C
e C++
, no entanto, há muitos wrappers que permitem seu uso de idiomas como Perl
, Python
, Java
, C#
, Ruby
.
O Libpcap é executado na maioria dos sistemas operacionais Unix, também existe uma versão Windows chamada Winpcap ( Win
dows P
acket Cap
ture).
Veja a documentação do Winpcap .
Atualizar
Infelizmente, uma ferramenta de detecção de rede funciona no nível mais baixo da pilha de rede, tentando capturar tudo, é completamente inconsciente de processos em execução no sistema operacional. Seria extremamente difícil descobrir o que originou uma determinada chamada. Um sniffer de pacotes poderia descobrir (através do número da porta) um ID de processo.
Estas circunstâncias o que pode ser feito usando o pcap?
No caso de querermos apenas detectar tráfego específico (por exemplo: somente TCP/IP
pacotes, somente pacotes que vão para a porta 23
, etc), devemos criar um conjunto de regras, compile
it, e aplicá-lo.
Este é um processo de três fases, que está intimamente relacionado.
O conjunto de regras é mantido em uma string e é convertido em um formato que o pcap pode ler (portanto, compilá-lo).
A compilação é feita apenas chamando uma função dentro do nosso programa; não envolve o uso de um aplicativo externo. Então nós dizemos ao pcap para aplicá-lo a qualquer sessão que desejamos que ele filtre.
Atualização 2
A primeira coisa a entender é o layout geral de um sniffer pcap. O fluxo de código é o seguinte:
-
Começamos determinando em qual interface queremos farejar. No Linux isso pode ser algo como eth0
, no BSD pode ser xl1
, etc. Podemos definir este dispositivo em uma string, ou podemos pedir pcap para nos fornecer o nome de uma interface que fará o trabalho.
-
Inicializa o pcap. É aqui que nós dizemos ao pcap qual dispositivo estamos detectando. Podemos, se quisermos, farejar vários dispositivos. Como podemos diferenciar entre eles? Usando identificadores de arquivo. Assim como abrir um arquivo para leitura ou escrita, devemos nomear nosso sniffing session
para que possamos diferenciá-lo de outras sessões desse tipo.
-
No caso de querermos apenas detectar tráfego específico (por exemplo: somente pacotes TCP / IP, apenas pacotes indo para a porta 23, etc) devemos criar um conjunto de regras, "compilá-lo" e aplicá-lo. Este é um processo de três fases, que está intimamente relacionado. O conjunto de regras é mantido em uma string e é convertido em um formato que o pcap pode ler (portanto, compilá-lo).
A compilação é feita apenas chamando uma função dentro do nosso programa; não envolve o uso de um aplicativo externo. Então nós dizemos ao pcap para aplicá-lo a qualquer sessão que desejamos que ele filtre.
-
Finalmente, dizemos ao pcap para entrar no loop de execução principal. Neste estado, pcap espera até que tenha recebido quantos pacotes quisermos. Toda vez que recebe um novo pacote, ele chama outra função que já definimos.
A função que chama pode fazer o que quisermos; ele pode dissecar o pacote e imprimi-lo para o usuário, pode salvá-lo em um arquivo ou não fazer nada.
-
Depois que nossas necessidades de sniffing forem satisfeitas, fechamos nossa sessão e estamos completos.