<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包中的数据结构:
第一个重要的数据结构:_ADAPTER(关于Network Adapter的)
typedef struct _ADAPTER
{
// 一个打开的NPF driver实例的句柄:
HANDLE hFile;
// 当前打开的网卡的名字:
CHAR SymbolicLink[MAX_LINK_NAME_LENGTH];
// 在这块Adapter上,一个数据包被写的次数:
int NumWrites;
// 这块Adapter上的read操作的通知事件。它可以被传递给标准Win32函数(如WaitForSingleObject或者WaitForMultipleObjects),这样可以等待到driver的缓冲区内有数据到来。在同时等待几个事件的GUI程序中,它特别有用。在Windows2000/XP中,函数PacketSetMinToCopy()可以用来设置内核缓冲区中激发本事件的最小数据大小:
HANDLE ReadEvent;
// 设置一个时间,到时候,即使没有捕获任何包,read操作也会被释放,ReadEvent也会被触发:
UINT ReadTimeOut;
} ADAPTER, *LPADAPTER;
第二个重要的数据结构:_PACKET(关于Packet的)
typedef struct _PACKET
{
// 向后兼容用的:
HANDLE hEvent;
// 向后兼容用的:
OVERLAPPED OverLapped;
// 存放Packets的缓冲区:
PVOID Buffer;
// 缓冲区的大小:
UINT Length;
// 当前缓冲区中有效的字节数,如,上一次调用PacketReceivePacket()函数接收到的字节数:
DWORD ulBytesReceived;
// 向后兼容用的:
BOOLEAN bIoComplete
} PACKET, *LPPACKET;
第三个重要的数据结构:_PACKET_OID_DATA (关于OID请求的)
typedef struct _PACKET_OID_DATA
{
// OID的code,有效的OID code的定义参见ntddndis.h;比如:
// OID_GEN_SUPPORTED_LIST,OID_GEN_VENDOR_DESCRIPTION等:
ULONG Oid;
// 成员Data的长度:
ULONG Length;
// 存放发送给网卡或者从网卡接收的数据的缓冲区:
UCHAR Data[1];
}
typedef struct _PACKET_OID_DATA PACKET_OID_DATA, *PPACKET_OID_DATA;
其他数据结构:
npf_if_addr(网卡的地址):
typedef struct npf_if_addr {
struct sockaddr IPAddress; // IP address.
struct sockaddr SubnetMask; // Netmask for that address.
struct sockaddr Broadcast; // Broadcast address.
}npf_if_addr;
bpf_hdr(Packet Header):
struct bpf_hdr {
// 捕获到的packet的timestamp:
struct timeval bh_tstamp;
// 捕获到的packet的长度:
UINT bh_caplen;
// 原始packet的长度:
UINT bh_datalen;
// bpf header的长度(this struct plus alignment padding):
USHORT bh_hdrlen;
};
bpf_insn(一个简单的BPF伪指令):
bpf_insn中包含了一个BPF注册机的简单指令,它被用来发送一个filter程序给driver。
struct bpf_insn {
// 指令的类型和寻址模式:
USHORT code;
// Jump if true:
UCHAR jt;
// Jump if false:
UCHAR jf;
// 通用的一个字段,有多种目的:
int k;
};
bpf_program(一个BPF伪汇编程序):
这段程序将被PacketSetBPF()注射入内核,并被应用到每一个进来的Packet。
struct bpf_program {
// 程序指令数目,如,后面的bpf_insn结构的数目:
UINT bf_len;
// 指向第一个bpf_insn结构的指针:
struct bpf_insn *bf_insns;
};
bpf_stat (本次捕获的统计数据):
这个结构将被Packet.dll用来返回捕获过程中的统计数据。
struct bpf_stat {
// 从开始捕获起,这个driver从网卡上接收的Packet的数量(包括driver丢失的Packet):
UINT bs_recv;
//从开始捕获起,这个driver丢失的Packet的数量,一般地,包丢失,是因为driver的缓冲区满了,这时driver将扔掉这个包:
UINT bs_drop;
UINT ps_ifdrop;
// 通过filter的包的数量:
UINT bs_capt;
};
dump_bpf_hdr(Dump Packet Header):
struct dump_bpf_hdr{
// Packet的timestamp:
struct timeval ts;
// 捕获到的packet的长度:
UINT caplen;
// 原始Packet的长度:
UINT len;
};
NetType (网络类型):
NetType用于PacketGetNetType(),返回当前网卡的类型和速度。
struct NetType{
//当前网卡的MAC:
UINT LinkType;
// 网络的速度(bits/s):
UINT LinkSpeed;
};
(To be continued)
Writen by zhengyun@tomosoft.com
本文档所包含的信息代表了在发布之日,ZhengYun 对所讨论问题的当前看法,Zhengyun 不保证所给信息在发布之日以后的准确性。
本文档仅供参考。对本文档中的信息,Zhengyun 不做任何明示或默示的保证。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12692
相关推荐
windows Packet32 包中的函数及数据说明,非常详细
开发网卡监听,所需要的驱动;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_...
packet32 优秀的Mac 层开发包源码
JAVA 语言 Packet字节流解析工具说明
winpcap SDK开发包头文件sdk(pcap.h,Packet32.h,Packet32.h,wpcap.lib,Packet.lib)
一个头文件,做网络嗅控时要用到的头。 我的第三方类集
Cisco模拟器 7.0版本 32位
(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位版本。
思科模拟器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.0 32位和64位安装包 这是思科最新 PT 7.0 模拟器
Cisco Packet Tracer 7.1 32位 Cisco Packet Tracer是由Cisco公司发布的一个辅助学习工具,为学习思科网络课程的初学者去设计、配置、排除网络故障提供了网络模拟环境。用户可以在软件的图形用户界面上直接使用拖曳...
C#利用SharpPcap发送...wireshark抓包后取数据方法:在wireshark的收到的帧上点右键,选择 复制 -> 为一个HEX流,然后粘贴到一个空文件内,命名为packet.dat,这样本软件就会读取packet.dat内的内容并循环发送了。
Cisco Packet Tracer 7.1.1 32位 Cisco Packet Tracer是由Cisco公司发布的一个辅助学习工具,为学习思科网络课程的初学者去设计、配置、排除网络故障提供了网络模拟环境。用户可以在软件的图形用户界面上直接使用...
PACKET tracer 5.0 拓扑结构 用于实习交换机、路由器模拟练习
以太网数据帧的格式分析比较对以太网数据帧的各种格式进行简单的分析比较
定义了三种帧格式分别用于启动曝光、数据传输、数据重传,设计了一种基于状态机的控制协议实现相机的控制及图像数据的传输,并最终在硬件平台上实现了基于这种方法的成像系统。实验测试表明,NiosII嵌入式处理器工作...