winpcap 捕获不到数据包 啥原因呢?

辰枫 2011-02-20 10:21:06
我下载的是最新的winpcap 4.1.2源码和开发包,用了开发包里的一个例子,头文件和lib裤都包含后编译,通过 执行时 执行抓包函数时, 抓不到包 是什么原因呢 返回值 是 0 就是没有抓到数据包。winpcap和packet还要编译dll么 ,在哪有这两个dll呀, 我机器上找不到,但是程序怎么编译通过的, 还能运行呀, lib不是导入库么 还要有dll呀 我本机上装有sniff抓包工具 都可以抓包的。 第一次用这个winpcap,请高手指点下呀
...全文
821 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wosiskm 2011-04-13
  • 打赏
  • 举报
回复
一个是网卡,一个是驱动,貌似是这样的我装了虚拟机等显示的有5个设备
恨天低 2011-02-21
  • 打赏
  • 举报
回复
你用两个网口!!!
辰枫 2011-02-21
  • 打赏
  • 举报
回复
1. rpcap://\Device\NPF_GenericDialupAdapter (Network adapter 'Adapter for generi
c dialup and VPN capture' on local host)
2. rpcap://\Device\NPF_{3CDDB11A-992D-48C3-9E6F-721100DFA2B9} (Network adapter '
Realtek 10/100/1000 Ethernet NIC ' on local host)

Enter the interface number (1-2):
辰枫 2011-02-21
  • 打赏
  • 举报
回复
捕捉到了 前两天 程序初始化时显示出 1块网卡信息, 今天打开电脑后列出了两块网卡信息, 我选择第一块后 ,捕捉不到 ,选择第二块后 捕捉到了。不知道怎么变了
辰枫 2011-02-21
  • 打赏
  • 举报
回复
#include "pcap.h"


main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
int inum;
int i=0;
pcap_t *adhandle;
int res;
char errbuf[PCAP_ERRBUF_SIZE];
struct tm *ltime;
char timestr[16];
struct pcap_pkthdr *header;
const u_char *pkt_data;
time_t local_tv_sec;


/* 获取本机设备列表 */
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
exit(1);
}

/* 打印列表 */
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");
}

if(i==0)
{
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
return -1;
}

printf("Enter the interface number (1-%d):",i);
scanf("%d", &inum);

if(inum < 1 || inum > i)
{
printf("\nInterface number out of range.\n");
/* 释放设备列表 */
pcap_freealldevs(alldevs);
return -1;
}

/* 跳转到已选中的适配器 */
for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);

/* 打开设备 */
if ( (adhandle= pcap_open(d->name, // 设备名
65536, // 要捕捉的数据包的部分
// 65535保证能捕获到不同数据链路层上的每个数据包的全部内容
PCAP_OPENFLAG_PROMISCUOUS, // 混杂模式
1000, // 读取超时时间
NULL, // 远程机器验证
errbuf // 错误缓冲池
) ) == NULL)
{
fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);
/* 释放设列表 */
pcap_freealldevs(alldevs);
return -1;
}

printf("\nlistening on %s...\n", d->description);

/* 释放设备列表 */
pcap_freealldevs(alldevs);

/* 获取数据包 */
while((res = pcap_next_ex( adhandle, &header, &pkt_data)) >= 0){

if(res == 0)
/* 超时时间到 */
continue;

/* 将时间戳转换成可识别的格式 */
local_tv_sec = header->ts.tv_sec;
ltime=localtime(&local_tv_sec);
strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);

printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len);
}

if(res == -1){
printf("Error reading the packets: %s\n", pcap_geterr(adhandle));
return -1;
}

return 0;
}

我用的不用回调的方式, 总是返回超时, 我设置的时间 是 1000ms。就是捕捉不到数据包
kingstarer 2011-02-21
  • 打赏
  • 举报
回复
记得winpcap是回调的吧 怎么有返回值呢

难道现在改了?

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧