Sniffer ICMP

Publicado por Enzo de Brito Ferber 28/12/2006

[ Hits: 11.679 ]

Homepage: http://www.maximasonorizacao.com.br

Download icmpsniffer.c




Fiz este script com o intuito de aprender sobre IP spoofing. Não é exatamente um super-script, mas dá pra dar uma noção de o que dá pra se fazer usando RAW SOCKETS.

Se alguém mandar um ICMP_ECHO_REQUEST para seu computador e este script estiver em execução, ele vai mostrar o IP do cara e o TTL do pacote.

  



Esconder código-fonte

/*
 * Programa: ICMP Sniffer
 * Arquivo : icmp_sniffer.c
 * Autor   : Enzo Ferber 'Slackware_10'
 */

#include <stdio.h>
#include <stdlib.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <unistd.h>

int main(void){
    int fd = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP);
    struct iphdr *ipheader;
    char buffer[8192];
    while(read(fd,buffer,8192)>0){
   ipheader = (struct iphdr*)buffer;
   printf("IP de Origem : %s\n", inet_ntoa(ipheader->saddr));
   printf("TTL do pacote: %d\n", ipheader->ttl);
    }
    close(fd);
    return 0;
}

Scripts recomendados

Servidor TCP/IP em C

whateveryouwant.c

Simulação de controle de fluxo usando sockets

Subdomain Finder

Fractal


  

Comentários
[1] Comentário enviado por Cr4sh_Dump em 29/11/2012 - 22:20h

Provavelmente por um simples erro de digitação seu codigo estava dando segmentation fault ao receber os packets ICMP request e apenas corrigir um caratere na linha 22 onde ta assim :

printf("IP de Origem : %s\n", inet_ntoa(ipheader ->saddr));/*ta errado por que ta atribuindo o valor de string a uma variavel que e do tipo int*/

corrigido linea 22:

printf("IP de Origem : %d\n", inet_ntoa(ipheader ->saddr));

provavelmente foi um erro de digitação porem corrigido seu script em C funciona corretamente. Parabens bom script simples e efetivo.

[2] Comentário enviado por mrx6s0 em 17/12/2016 - 09:34h

Amigo, ótimo script! Apenas um detalhe, o ip de retorno não sai correto, e em formato errado tambem.

Há como corrigir isso?

tentei adcionar
<code>
snprintf(buffer, 8192, "%pI4", ipheader->saddr);
</code>
mas mesmo assim não retorna corretamente.

se puder me dar retorno, ficarei grato!


Contribuir com comentário