<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
监听以太网(一) Packet32包说明<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Article last modified on 2002-9-17 |
The information in this article applies to:
--Microsoft Windwos NTx
--- Microsoft Windwos 9x
--WinPcap: the Free Packet Capture Architecture for Windows
|
简述:
监听网络上的所有数据,是一个比较有趣的题目。流传比较广的一些监听程序,它们都使用了一个更加著名的开发包Packet32。比如,ntsniff、EthernetSpy、ntpacket等,还有赫赫有名的WinPcap。应用程序通过它可以设置网卡的工作模式,直接在网卡上读写数据,等等。
一般使用的Packet32的实现版本,是微软的Packet32.c和Packet32.h。这个版本写得比较简单。
WinPcap开发包中自带的Packet32,是Politecnico di Torino重写的,增加了许多错误处理,而且注释翔实,值得一读。
在http://winpcap.polito.it/default.htm中,WinPcap开发包被描述为:WinPcap is an architecture for packet capture and network analysis for the Win32 platforms. It includes a kernel-level packet filter, a low-level dynamic link library (packet.dll), and a high-level and system-independent library (wpcap.dll, based on libpcap version 0.6.2).
下面就给出Packet32这个实现版本的说明,仿照Microsft SDK的风格。
内容依次为:
Packet32包的内容
Packet32包中的函数
PacketGetAdapterNames
PacketOpenAdapter等
Packet32包中的数据结构
例子1:用Packet32设置网卡为混杂模式,监听所有的数据包。
Packet32包的内容
Packet驱动:Oemsetup.inf安装信息文件、Packet.sys系统文件,在利用Packet32包开发网络监控程序前,需要用这两个文件安装Packet驱动。Packet32程序开发库:Packet32.lib静态链接库、 Packet32.dll动态链接库,用户可以通过调用库中的函数直接对网卡进行操作。
Packet32包中的函数说明:
No.1. PacketGetAdapterNames(从注册表中读取网卡名)
得到现有的网络适配器的列表和它们的描述。
BOOLEAN PacketGetAdapterNames(
PTSTR pStr,
PULONG BufferSize
);
Parameters:
pStr:
[in , out] 一块用户负责分配的缓冲区,将把适配器的名字填充进去。
BufferSize:
[in] pStr这块缓冲区的大小。
Return Values:
如果查询成功,返回一个非零值。
Usage:
[C/C++]
C/C++ Usage Sample
char AdapterNamea[8192];
ULONG AdapterLength;
PacketGetAdapterNames(AdapterName,&AdapterLength);
Remarks:
通常,这都是与网卡通信时要调用的第一个函数。它返回系统上安装了的网卡的名字。在每个网卡的名字后面,pStr中还有一个与之相应的描述。
由于结果都是通过查询注册表得到的,所以WindowsNTx和Windows9X/Me下得到的字符串编码是不同的。Windows9X下用ASCII编码存储,而WindowsNTx则是Unicode。
如果是在Windows9X下,调用完PacketGetAdapterNames后,得到的pStr将是这样的:
- 一串用"/0"分隔的ASCII字符串,每一个都是一个网卡的名字;
- 两个"/0";
- 一串用"/0"分隔的ASCII字符串,每一个都是一个网卡的描述;顺序是和网卡名字一样的;
- 两个"/0";
如果是在WindowsNTx下,调用完PacketGetAdapterNames后,得到的pStr将是这样的:
- 一串用一个Unicode的"/0"分隔的Unicode字符串,每一个都是一个网卡的名字;
- 两个Unicode的"/0";
- 一串用ASCII的"/0"分隔的ASCII字符串,每一个都是一个网卡的描述;顺序是和网卡名字一样的;
- 两个ASCII的"/0";
这个函数的操作大致为:
网卡的注册表项是:
HKEY_LOCAL_MACHINE/
SYSTEM/
CurrentControlSet/
Control/
Class/
{4D36E972-E325-11CE-BFC1-08002BE10318}
先打开这个键值;
再枚举下面的每一项,依次读取参数:
对子项/Linkage/UpperBind参数,核对是否等于” NdisWan”,如果不是,就跳过去;
如果是” NdisWan”,则读取子项/Linkage/Export,这就是网卡的名字。
如果前面的查询有网卡记录,那么执行下面这个循环:
将调用PacketOpenAdapter打开每个网卡;
其中将调用PacketRequest(adapter,FALSE,OidData)来得到网卡的描述;
具体方法是这样,OidData是一个PACKET_OID_DATA结构,我们事先设置它的Oid成员为OID_GEN_VENDOR_DESCRIPTION,然后调用PacketRequest把这个OID发送给网卡driver,就可以从OidData->Data中拿到网卡的描述了。
最后调用PacketCloseAdapter关闭适配器。
如果前面没有查询到网卡记录,那么执行我们将根据TCP/IP Binding来查找网卡:
先打开这个键值;
HKEY_LOCAL_MACHINE/
SYSTEM/
CurrentControlSet/
Services/
Tcpip/
Linkage
它的Bind参数设置的就是现在系统上绑定的网卡的名字。
得到名字之后,同上调用PacketOpenAdapter和PacketRequest方法向网卡查询它的描述。
(To be continued)
Writen by zhengyun@tomosoft.com
本文档所包含的信息代表了在发布之日,ZhengYun 对所讨论问题的当前看法,Zhengyun 不保证所给信息在发布之日以后的准确性。
本文档仅供参考。对本文档中的信息,Zhengyun 不做任何明示或默示的保证。
参考文献:
1.如何编写网络监视器 作者:邹建平
2.《Windows NT下开发网络监控程序》 作者:北京锐信科学技术培训中心
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12690
分享到:
相关推荐
开发网卡监听,所需要的驱动;Packet32
#ifndef __PACKET32 #define __PACKET32 #include #ifdef HAVE_AIRPCAP_API #include #else #if !defined(AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_) #define AIRPCAP_HANDLE__EAE405F5_...
windows Packet32 包中的函数及数据说明,非常详细
packet32 优秀的Mac 层开发包源码
一个头文件,做网络嗅控时要用到的头。 我的第三方类集
winpcap SDK开发包头文件sdk(pcap.h,Packet32.h,Packet32.h,wpcap.lib,Packet.lib)
思科模拟器Cisco Packet Tracer7.2.2 x32 Cisco Packet Tracer 7.2.2 new features Cisco Packet Tracer 7.2.2 removes the Java dependence and makes it easier to use Packet Tracer Skills Assessment (PTSA) ...
Cisco Packet Tracer 7.1 32位 Cisco Packet Tracer是由Cisco公司发布的一个辅助学习工具,为学习思科网络课程的初学者去设计、配置、排除网络故障提供了网络模拟环境。用户可以在软件的图形用户界面上直接使用拖曳...
(i.e., 64bit: "C:\Program Files\Cisco Packet Tracer 7.2.2\plugins", 32bit: "C:\Program Files (x86)\Cisco Packet Tracer 7.2.2\plugins", or the other folder that you installed Packet Tracer 7.2.2)....
Packet Tracer 7.2.1 for Windows 32 bit 模拟器,32位版本。
C#利用SharpPcap发送...wireshark抓包后取数据方法:在wireshark的收到的帧上点右键,选择 复制 -> 为一个HEX流,然后粘贴到一个空文件内,命名为packet.dat,这样本软件就会读取packet.dat内的内容并循环发送了。
Cisco Packet Tracer 7.1.1 32位 Cisco Packet Tracer是由Cisco公司发布的一个辅助学习工具,为学习思科网络课程的初学者去设计、配置、排除网络故障提供了网络模拟环境。用户可以在软件的图形用户界面上直接使用...
Cisco模拟器 7.0版本 32位
Cisco Packet Tracer 5.3 思科路由器交换机模拟软件 Cisco Packet Tracer 5.3 思科路由器交换机模拟软件 Cisco Packet Tracer 5.3 思科路由器交换机模拟软件 Cisco Packet Tracer 5.3 思科路由器交换机模拟软件 ...
绍了Windows NT系统中的NDIS,应用程序与它的交互及怎样利用ARP协议在局域网中报告设备的在线状态:在主控机中运用辅助的开发包(Packet32)进行口伪装,并用开发包直接对网卡进行操作,发送更改口命令给设备,从而使...
一、实验名称 使用网络模拟器packetTracer 二、实验目的: 1. 掌握安装和配置网络模拟器PacketTracer的方法; 2. 掌握使用PacketTracer模拟网络场景的基本方法,加深对网络环境,网络设备和网络协议交互过程等方面的...
Cisco Packet Tracer 7.1.1 for windows 32bit,思科最新的模拟器软件
Cisco Packet Tracer 7.0 32位和64位安装包,