|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jul 2007
Messaggi: 24
|
[C / Linux] Implementazione Sniffer
Salve a tutti, ho iniziato a giocare un po con le socket di sistema e volevo provare a realizzare uno sniffer. Leggendo i vari documenti e copiando alcune funzioni e parti di codice, ho scritto questo:
Codice:
#include <stdio.h> #include <stdlib.h> //per chiamare la funzione exit() #include <string.h> //per usare la funzione strncpy() #include <netinet/in.h> //utilizza la funzione socket() #include <sys/ioctl.h> //utilizza la funzione ioctl() #include <net/if.h> //contiene la struttura ifreq #include <linux/if_ether.h> //contiene la macro ETH_P_IP struct sockaddr sorgente; struct ifreq interfaccia; int apertura_socket = 0; char buffer[1500]; //massima lunghezza utile int lunghezza_pacchetto = 0; unsigned char *contenuto_header; int main (int argc,char *argv[]) { //APRO IL SOCKET IN MODALITA' RAW //la funzione restituirà un valore maggiore di 0 //che indica il canale di comunicazione if ( (apertura_socket = socket(PF_PACKET, SOCK_RAW, ETH_P_IP)) < 0) { printf ("Errore socket"); exit(1); } //ABILITAZIONE DELLA SCHEDA DI RETE IN MODALITA' PROMISCUA strncpy( interfaccia.ifr_name, argv[1], IFNAMSIZ ); ioctl( apertura_socket, SIOCGIFFLAGS, &interfaccia ); interfaccia.ifr_flags |= IFF_PROMISC; ioctl( apertura_socket , SIOCSIFFLAGS, &interfaccia ); //________________________________________________________ strncpy(sorgente.sa_data, argv[1], sizeof(sorgente.sa_data)); while (1) { recvfrom( apertura_socket, buffer, sizeof(buffer), 1500, (struct sockaddr *)&sorgente, &lunghezza_pacchetto ); contenuto_header = (unsigned char *)buffer; printf ("%02x", contenuto_header[0]); printf ("%s \n %d \n %s \n", buffer, sorgente.sa_family, sorgente.sa_data); printf ("%s \n", lunghezza_pacchetto); } } Quale può essere il problema? grazie |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:10.