读书人

请问个关于pcap抓包的小疑点

发布时间: 2012-06-13 12:30:18 作者: rapoo

请教个关于pcap抓包的小问题
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(){
char * dev;
char * net;
char * mask;
int ret;
char buf[PCAP_ERRBUF_SIZE];
bpf_u_int32 netp;
bpf_u_int32 maskp;
struct in_addr addr;
dev = pcap_lookupdev(buf);
if(dev==NULL){
printf("%s\n",buf);
exit(errno);

}
printf("dev=%s\n",dev);
ret = pcap_lookupnet(dev,&netp,&maskp,buf);
if(ret == -1){
printf("%s\n",buf);
exit(errno);
}
addr.s_addr = netp;
net = inet_ntoa(addr);
printf("ip=%s\n",net);
addr.s_addr = maskp;
mask = inet_ntoa(addr);
printf("mask=%s\n",mask);
return 0;
}

为什么执行结果是:

dev=usbmon1
ip=0.0.0.0
mask=0.0.0.0

而我的IP配置是:
p35p1 Link encap:Ethernet HWaddr E0:CB:4E:43:51:C4
inet addr:172.17.82.117 Bcast:172.17.82.255 Mask:255.255.255.0


在线等

[解决办法]
pcap_lookupdev这个是默认获取你第一个设备的信息,usbmon1应该不是你的网卡吧
你可以使用pcap的pcap_findalldevs API去获取 所有网络设备的信息;

C/C++ code
/* Retrieve the device list */    if(pcap_findalldevs(&alldevs, errbuf) == -1)    {        fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);        exit(1);    }        /* Print the list */    for(d=alldevs; d; d=d->next)    {        printf("%d. %s", ++i, d->name);        if (d->description)            printf(" (%s)\n", d->description);        else            printf(" (No description available)\n");    } 

读书人网 >C语言

热点推荐