首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-06-13 
请教个关于pcap抓包的小问题代码如下:#include stdio.h#include stdlib.h#include pcap.h#include

请教个关于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");    } 

热点排行