请教个关于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去获取 所有网络设备的信息;
/* 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"); }