2013-08-31 54 views
0

我想編一個簡單的例子的libpcap,錯誤運行一個簡單的例子的libpcap

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

int main(int argc, char *argv[]) 
{ 
    char *dev; 
    char errbuf[PCAP_ERRBUF_SIZE]; 
    struct bpf_program fp; 

    char filter_exp[] = "port 23"; 
    bpf_u_int32 mask; 
    bpf_u_int32 net; 
    dev = pcap_lookupdev(errbuf); 
    if (dev == NULL) 
    { 
    fprintf(stderr, "couldn't find default device: %s\n", errbuf); 
    return (2); 
    } 
    printf("Device: %s\n", dev); 

    //LOOKUP NETMASK and IP 
    if (pcap_lookupnet(dev, &net, &mask, errbuf) == -1) 
    { 
    fprintf(stderr, "can't get netmask for device %s\n", dev); 
    net = 0; 
    mask = 0; 
    } 

    printf("lookup\n"); 

    pcap_t *handle; 
    printf("handle defined\n"); 
    handle = pcap_open_live(dev, BUFSIZ, 1, 1000, errbuf); 
    printf("opened\n"); 
    if (handle = NULL) 
    { 
    fprintf(stderr, "Couldn't open device %s: %s\n", dev, errbuf); 
    return (2); 
    } 

    printf("pcap_open\n"); 

    if ((pcap_compile(handle, &fp, filter_exp, 1, net)) == -1) 
    { 
    printf("compile error block entered\n"); 
    fprintf(stderr, "Couldn't parse filter %s: %s\n", filter_exp, 
     pcap_geterr(handle)); 
    return (2); 
    } 

    printf("compiled\n"); 
    if (pcap_setfilter(handle, &fp) == -1) 
    { 
    fprintf(stderr, "couldn't install filter %s: %s\n", filter_exp, 
     pcap_geterr(handle)); 
    return (2); 
    } 

    printf("after filter\n"); 
    return (0); 
} 

它編譯沒有錯誤,但是當我嘗試運行它,我得到段錯誤消息,或者如果我嘗試用root權限運行它,我沒有得到消息,但打印

Device: eth0 
lookup 
handle defined 
opened 
pcap_open 

能否請你幫我這個後程序停止,我很困惑,爲什麼這個錯誤發生。 在此先感謝。

+0

嘗試進行調試以縮小問題範圍。 –

+3

你的問題標題是「編譯錯誤」,但你的問題本身說「編譯沒有錯誤」。你可能想重新考慮這個標題。 –

+0

@CarlNorum:OP可能引用'pcap_compile'? – alk

回答

7

if (handle = NULL)這是罪魁禍首。

您正在分配handleNULLhandle用於此作業後的其他一些功能。因此,取消引用會導致seg-fault。

將其更改爲if(handle == NULL)並檢查。

+0

非常感謝,解決了這個問題。 – user1653150

相關問題