2016-03-27 17 views
0

Ich versuche, einen Sniffer zu erstellen, der einen Text liest von Server an Client mit der Adresse 127.0.0.1 (Loopback-Adresse) gesendet wird. Programm hält Aufenthalte angehalten, auch wenn der Client Daten vom Server erhalten hat.Linux Sniffer zwischen Client und Server Libpcap

CODE von Sniffer:

int main(int argc,char **argv) 
{ 
    char *dev; 
    char errbuf[PCAP_ERRBUF_SIZE]; 
    pcap_t* descr; 
    bpf_u_int32 maskp;   /* subnet mask    */ 
    bpf_u_int32 netp;   /* ip*/ 
    struct bpf_program fp;  /* hold compiled program   */ 
    char *filter = "host 127.0.0.1"; 
    //char *filter = "port 5000"; 

    dev = pcap_lookupdev(errbuf); 
    if(dev == NULL) 
    { printf("%s\n",errbuf); exit(1); } 
       printf("call success"); 

    /* ask pcap for the network address and mask of the device */ 
    pcap_lookupnet(dev,&netp,&maskp,errbuf); 

    descr = pcap_open_live(dev,BUFSIZ,1,-1,errbuf); 
    if(descr == NULL) 
    { printf("pcap_open_live(): %s\n",errbuf); exit(1); } 

        /* Lets try and compile the program.. non-optimized */ 
    if(pcap_compile(descr,&fp,filter,0,netp) == -1) 
    { fprintf(stderr,"Error calling pcap_compile\n"); exit(1); } 

    /* set the compiled program as the filter */ 
    if(pcap_setfilter(descr,&fp) == -1) 
    { fprintf(stderr,"Error setting filter\n"); exit(1); } 


    pcap_loop(descr,2,callback,NULL); 

    fprintf(stdout,"\nfinished\n"); 
    return 0; 
} 
+0

Server und Client verwenden Port 5000 – Usman

Antwort

0

Sie vorbei -1 als die to_ms Argument pcap_open_live(). Das Verhalten für ein negatives Timeout ist nicht definiert. Sie sollten einen positiven Wert angeben. Der Wert ist in Millisekunden angegeben. tcpdump verwendet 1000, d. h. 1 Sekunde, wohingegen Wireshark 250 verwendet, d. h. 1/4 Sekunde.

Sie erfassen auch auf dem Standardgerät, wie Sie pcap_lookupdev() verwenden. Das ist selten, wenn überhaupt, das Loopback-Gerät. Wenn Sie also auf dem Standardgerät erfassen, werden Sie selten irgendeinen Datenverkehr sehen, wenn Sie den Filter host 127.0.0.1 verwenden. Wenn der Server und der Client beide sind, die auf demselben Computer ausgeführt werden wie der Computer, auf dem Sie Ihr Programm ausführen, müssen Sie auf dem Loopback-Gerät erfassen, das unter Linux "lo" benannt wird. Wenn der Server und der Client nicht beide auf dem gleichen Computer ausgeführt werden, wird Ihr Verkehr nicht Adresse 127.0.0.1 verwenden, und Sie müssen eine andere Adresse auswählen.

+0

Vielen Dank. Ich werde das sehen. Aber ist die Methode, Filter für Loopback-Adresse zu verwenden "char Filter =" 127.0.0.1 "" korrekt? – Usman

+0

Oder muss ich nach Port 5000 filtern? – Usman