Sniffer ICMP

Publicado por Enzo de Brito Ferber 28/12/2006

[ Hits: 11.370 ]

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

Simulação de controle de fluxo usando sockets

Fractal

Funções básicas para conexão OpenSSL em C

Exemplo de sockets: um client e um server bem simples

Socket em C/C++ - CLIENT


  

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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts