⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packet32数据结构.txt

📁 delphi资料大全ADO使用和数据导出.有助于delphi数据库的开发
💻 TXT
字号:
监听以太网(三) 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; 


};


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -