2013-01-18 45 views
5

के साथ 100% सीपीयू उपयोग, सीपीयू कोर में से एक 100% उपयोग तक पहुंचता है। यातायात के साथ या बिना। गलत क्या है?नीचे दिए गए कोड को चलाने के दौरान एक libpcap सरल उदाहरण

उदाहरण कोड: साथ gcc example.c -o example -lpcap

रन: ./example "tcp" या फिल्टर आप की तरह

#include <stdio.h> 
#include <stdlib.h> 
#include <pcap.h> 
#include <errno.h> 

void my_callback(u_char *args, const struct pcap_pkthdr* pkthdr, const u_char* 
packet) 
{ 
    //nothing, nothing at all... 
    //printf("+"); 
} 

int main(int argc,char **argv) 
{ 
    int i; 
    char *dev; 
    char errbuf[PCAP_ERRBUF_SIZE]; 
    pcap_t* descr; 
    const u_char *packet; 
    struct bpf_program fp;  /* hold compiled program */ 
    bpf_u_int32 maskp;   /* subnet mask */ 
    bpf_u_int32 netp;    /* ip */ 

    if(argc != 2){ 
     fprintf(stdout, "Usage: %s \"expression\"\n" 
      ,argv[0]); 
     return 0; 
    } 

    /* Now get a device */ 
    dev = pcap_lookupdev(errbuf); 

    if(dev == NULL) { 
     fprintf(stderr, "%s\n", errbuf); 
     exit(1); 
    } 
    /* Get the network address and mask */ 
    pcap_lookupnet(dev, &netp, &maskp, errbuf); 
    /* open device for reading in promiscuous mode */ 
    descr = pcap_open_live(dev, BUFSIZ, 1,-1, errbuf); 
    if(descr == NULL) { 
     printf("pcap_open_live(): %s\n", errbuf); 
     exit(1); 
    } 

    /* Now we'll compile the filter expression*/ 
    if(pcap_compile(descr, &fp, argv[1], 0, netp) == -1) { 
     fprintf(stderr, "Error calling pcap_compile\n"); 
     exit(1); 
    } 

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

    /* loop for callback function */ 
    pcap_loop(descr, -1, my_callback, NULL); 
    return 0; 
} 

साथ संकलन।

आप इसे विशिष्ट उदाहरण है देख सकते हैं, मुख्य और पाश के लिए कॉलबैक फ़ंक्शन: pcap_loop(descr, -1, my_callback, NULL);

कॉलबैक खाली (बेकार) है, लेकिन यह सिर्फ दिखाने के लिए कि समस्या कॉलबैक में नहीं है । लगातार समय समाप्त तुरन्त एक व्यस्त लूप में

descr = pcap_open_live(dev, BUFSIZ, 1,-1, errbuf); 

यह बदल जाता है pcap_loop, poll के रूप में:

उत्तर

5

आप टाइमआउट -1 यहाँ निर्दिष्ट।

यदि आपके पास अन्य मूल्य के लिए कोई कारण नहीं है तो 1000 (मिलीसेकंड) जैसे कुछ का उपयोग करें।

+0

हल हो गया! धन्यवाद एंटोन – TheBronx