2013-08-31 3 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); 
} 

Он компилируется без ошибок, но когда я пытаюсь запустить его, я получаю сообщение об ошибке сегментации или если я пытаюсь чтобы запустить его с корнем разрешения, я не получаю сообщение, но программа останавливается после печати

Device: eth0 
lookup 
handle defined 
opened 
pcap_open 

Можете ли вы помочь мне с этим, я запутался, почему происходит эта ошибка. Спасибо заранее.

+0

Попробуйте отладить его, чтобы сузить проблему. –

+3

Заголовок вопроса говорит «компиляция ошибок», но сам вопрос говорит «компилируется без ошибок». Возможно, вы захотите переосмыслить этот заголовок. –

+0

@CarlNorum: OP может ссылаться на 'pcap_compile'? – alk

ответ

7

if (handle = NULL) Это преступник.

Назначение handleNULL и handle используется в некоторых других функциях после этого назначения. Таким образом, разыменование это вызывает сег-ошибку.

измените его на if(handle == NULL) и проверьте.

+0

Спасибо, что решили проблему. – user1653150

Смежные вопросы