枚举所有网卡
- 格式:doc
- 大小:335.50 KB
- 文档页数:60
//枚举所有网卡
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_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);
}
Sorry, 这两天有点儿忙,忘了回了。
我现在的问题已经解决了。
通过搜索winpcap的邮件列表找到答案的。
非常非常感谢各位的帮助,尤其感谢cai3995(什么都不懂) 。
可能我表述的不太清楚,我再把我的问题和解决方法说明一下
其实并不是要在单机上进行数据包过滤,这样子的话,winpcap的确做不到。但是我的硬件有个特殊性,就是专门拿出一台机子来做数据包过滤,这台机子使用两块网卡分别连接数据通路的两端,这两端可能是两个网络,也可能是两台机子,都有可能,如果没有软件的支持,这两块网卡之间就是断路,我的软件的作用就是从一块网卡上抓获所有包,然后用另一块网卡发出去,这个抓包、发包是同时双向进行的,所以就相当于在两块网卡之间建立了数据通路,如果对抓到的包进行一下分析,对有些不符合条件的包不用另一块网卡发送,这样就起到了过滤的作用,所以在这个特殊的情况下,可以使用winpcap进行数据包过滤。但是winpcap有个特点,它总是可以抓到自己刚刚发出去的包,而我这里不希望抓到自己刚刚发出去的包。通过搜索winpcap的邮件列表发现有人已经解决了该问题。解决办法是在利用ndis驱动发包之前,先NdisSetPacketFlags(pPacket, NDIS_FLAGS_SKIP_LOOPBACK)一下就可以了,不过只适用于win2000,在winxp下需要改用NDIS_FLAGS_DONT_LOOPBACK参数。
分享到:
MSN/QQ
论坛
开心
人人
豆瓣
新浪微博
博主的更多文章>>
深度剖析WinPcap之(一)——WinPcap简介
2009-08-29 15:08:33
标签:WinPcap 网络嗅探
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。/918801/196909
WinPcap简介
WinPcap是Windows平台下访问网络数据链路层的开源库,该库已达到工业标准的应用要求。WinPcap允许应用程序绕开网络协议栈来捕获与传递网络数据包,并具有额外的有用特性,包括内核层的数据包过滤、一个网络统计引擎与支持远程数据包捕获。
1.1. 什么是WinPcap
大多数网络应用程序通过被广泛使用的操作系统原语来访问网络,诸如sockets。操作系统已经处理了底层的细节问题(如协议处理,数据包的封装等),并提供与读写文件类似的、熟悉的接口,这使得用该方法可以很容易的访问网络中的数据。 然而有些时候,这种“简单的方式”并不能满足任务要求,因为有些应用程序需要直接访问网络中的数据包。也就是说,应用程序需要访问网络中的“原始”数据包,即没有被操作系统使用网络协议进行处理过的数据包。
WinPcap的目的就是为Win32应用程序提供这种访问方式。WinPcap提供下列功能:
捕获原始数据包,无论是发送到运行WinPcap机器上的数据包,还是在其它主机(共享介质)上进行交换的数据包
在数据包分派给应用程序前,根据用户指定的规则过滤数据包
将原始数据包发送到网络
收集网络流量的统计信息
1.2. WinPcap的优点
自由 WinPcap遵循BSD open source licence发布。这意味着你的应用程序拥有全部自由来修改与使用它,即使应用程序是商业化的。
高性能 WinPcap实现了有关数据包捕获文献中描述的所有典型的优化方法(比如内核级的过滤与缓冲,减少上下文交换,数据包部分内容复制),加上一些原创的优化方法,如JIT过滤器编辑(JIT filter compilation)与内核级的统计过程。因为这些原因,WinPcap胜过其它可比的方法。
普及 WinPcap被许多工具作为网络接口使用——无论是自由软件还是商业软件。包括网络协议分析器、网络监视器、网络入侵检测系统、网络嗅探器、网络流量生成器、网络测试器等等。如Wireshark、Nmap、 Snort、WinDump、ntop这些工具,在网络社群中是众所周知的。WinPcap每天被下载上千次。 测试充分与可信赖 许多用户对WinPcap在广泛的平台上的测试与发现最难以发现的缺陷做出了经年的贡献。WinPcap的开发者是富有经验的Windows驱动程序编写者,同时他们软件开发方法的重点就是强调固若顽石(rock-solid)的稳定性。记住:一个多缺陷的驱动程序意味着蓝屏(Windows操作系统在崩溃后,屏蔽该系统所有处理器的所有中断后,将显示器切换到低分辨率的VGA图形模式下,绘制一个蓝色背景,然后显示停止码,后面紧跟着一些文本信息来建议用户应该怎么办的画面)。
最终用户易于使用 WinPcap作为单个小的可执行文件发布,可运行在每个所支持的操作系统上。开始使用这个可执行文件后,Windows就能捕获与发送原始数据包。不可能再有更简单的操作了。
程序员易于使用 每个版本的WinPcap带有一个开发者包(developer's
pack),包括文档、库与include文件,是你立即开发应用程序所必需的。开发者包还包含一个示例程序集,可用Visual Studio或Cygnus编译,用来作为一个极好的起点。
多平台 WinPcap在Windows NT、Windows 2000、Windows XP与Windows
Server 2003平台上被积极地维护。WinPcap也能工作在Windows 95、Windows 98 与Windows ME平台上,但在这些操作系统上将不再维护。对Windows Vista具有初步的支持,但有一些特性并不具备。
可移植 WinPcap与libpcap具有完全的兼容性。这意味着能够使用它移植已在Unix或Linux下存在的工具到Windows下。这也意味着Windows应用程序可以很容易的移植到Unix下使用。 良好的文档 WinPcap手册用一种容易理解的超文本链接方式描述,对API与内部进行了文档化。该文档包含一个指南,让你一步一步地熟悉WinPcap的所有特性。
商业化支持 如果你对专业的WinPcap支持感兴趣、或当一些事情出错时你需要一个电话号码寻求帮助,或者在开发底层网络代码时需要帮助,CACE Technologies(/support)可以帮助你。
1.3. 哪类程序使用了WinPcap
WinPcap可被许多类型的网络工具使用,比如具有分析,解决纷争,安全和监视功能的工具。特别地,一些基于WinPcap的典型工具如下所示:
网络与协议分析器 (network and protocol analyzers)
网络监视器 (network monitors)
网络流量记录器 (traffic loggers)
网络流量生成器 (traffic generators)
用户层网桥及路由 (user-level bridges and routers)
网络入侵检测系统 (network intrusion detection systems
(NIDS))
网络扫描器 (network scanners)
网络安全工具 (security tools)
1.4. 什么是WinPcap不能做的
WinPcap独立于诸如TCP-IP协议的主机协议来发送和接收网络数据包。这意味着WinPcap不能阻塞、过滤或操纵同一机器上其它应用程序的通信。它只是简单地"嗅探"网络上所传输