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 PHP:
#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 PER UTILIZZARE IN MODO DA COMUNICARE DIRETTAMENTE CON LA SCHEDA DI RETE
//la funzione restituirà un valore maggiore di 0 che indica il canale di comunicazione

    
if ( (apertura_socket socket(PF_PACKETSOCK_RAWETH_P_IP)) < 0

    {        
        
printf ("Errore socket");
        exit(
1);
    }
//ABILITAZIONE DELLA SCHEDA DI RETE IN MODALITA' PROMISCUA
    
strncpyinterfaccia.ifr_nameargv[1], IFNAMSIZ );
    
ioctlapertura_socketSIOCGIFFLAGS, &interfaccia );
    
interfaccia.ifr_flags |= IFF_PROMISC;
    
ioctlapertura_socket SIOCSIFFLAGS, &interfaccia );
//________________________________________________________

    
strncpy(sorgente.sa_dataargv[1], sizeof(sorgente.sa_data));
    while (
1
    {         
        
recvfromapertura_socketbuffersizeof(buffer), 1500
                              (
struct sockaddr *)&sorgente, &lunghezza_pacchetto );

    
contenuto_header = (unsigned char *)buffer;
    
printf ("%02x"contenuto_header[0]);
    
printf ("%s \n %d \n %s \n"buffersorgente.sa_familysorgente.sa_data);
    
printf ("%s \n"lunghezza_pacchetto);
    
    }

I printf alla fine li ho messi per provare a stampare alcuni dati, mentre il while infinito l'ho fatto per stampare sempre i dati in modo da vedere se venivano aggiornati durante la navigazione, ma non è cosi...
Quale può essere il problema? grazie