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

wanderfox 2006-03-24 11:09:31
在vc6环境下创建了两个CWinThread的线程,企图用winpcap对两块网卡同时抓包,把结果返回到对话框的ListCtrl中,但是好像两个线程同时抓包会死锁?一个线程就没问题?请问这是怎么回事啊?
...全文
191 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
先找出具体什么死锁了

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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