中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 网络与通信
监听以太网(三) Packet32数据结构说明
作者:未知 时间:2005-07-20 14:17 出处:VC知识库 责编:chinaitpower
              摘要:监听以太网(三) Packet32数据结构说明
监听以太网(三) Packet32数据结构说明
作者:zhengyun_ustc

译者:eastvc 发布日期:2003-6-28 19:31:33
原文出处:http://www.csdn.net/


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

{

    // OIDcode,有效的OID code的定义参见ntddndis.h;比如:

// OID_GEN_SUPPORTED_LISTOID_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 {

    // 捕获到的packettimestamp:

       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{

    // Packettimestamp:

    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 不做任何明示或默示的保证。


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有