如何使用winpcap对两块网卡同时抓包

wanderfox 2006-03-24 11:09:31
在vc6环境下创建了两个CWinThread的线程,企图用winpcap对两块网卡同时抓包,把结果返回到对话框的ListCtrl中,但是好像两个线程同时抓包会死锁?一个线程就没问题?请问这是怎么回事啊?
...全文
138 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lonelyeagle 2006-04-05
//枚举所有网卡
pcap_findalldevs(&alldevs,g_strErrorBuffer);


for(adapterindex =0 ,d=alldevs;d;d=d->next) /
{
g_AdapterName[adapterindex]=(char *)malloc(strlen(d->name)+1);
memset(g_AdapterName[adapterindex],0,strlen(d->name)+1);
strcpy(g_AdapterName[adapterindex++],d->name);
}
pcap_freealldevs(alldevs); // 释放alldev资源

//对网卡逐个绑定,指定相同的回调函数static_PacketHandler,
for(i=0; i<g_unAdapterNumber; i++)
{


g_pPcapDevice[i] = pcap_open_live(g_AdapterName[i], 2000, 1, 1000, g_strErrorBuffer);

if (!g_pPcapDevice[i])
{
bInitPcap = false;
break;
}
//build the libpcap bpf expression
char bpf[1024]={0};
sprintf(bpf," ((ip proto \\tcp) and ((port 139) or (port 445)))");

if (-1 == pcap_compile(g_pPcapDevice[i], &fcode, bpf, 1, 0))
{
DebugDumpA(DEBUG_CLIENT_SHAREMON,"ShareMon : Initialization libpcap fail, pcap_compile fail, %s\n", pcap_geterr(g_pPcapDevice[i]));
bInitPcap = false;
break;
}
if (-1 == pcap_setfilter(g_pPcapDevice[i], &fcode))
{
DebugDumpA(DEBUG_CLIENT_SHAREMON,"ShareMon : Initialization libpcap fail, pcap_setfilter fail, %s\n", pcap_geterr(g_pPcapDevice[i]));
bInitPcap = false;
break;
}

pcap_dispatch(g_pPcapDevice[i], 0, static_PacketHandler, (UCHAR*)pthis);

}
回复
oyljerry 2006-03-24
先找出具体什么死锁了
回复
相关推荐
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2006-03-24 11:09
社区公告
暂无公告