WEB开发网
开发学院软件开发VC 监听以太网(3) Packet32数据结构说明 阅读

监听以太网(3) Packet32数据结构说明

 2010-07-11 20:44:41 来源:WEB开发网   
核心提示:其他数据结构:npf_if_addr(网卡的地址):typedef struct npf_if_addr {struct sockaddr IPAddress;//IP address.struct sockaddr SubnetMask;//Netmask for that address.struct sockad

其他数据结构:

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

上一页  1 2 

Tags:监听 以太网 Packet

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接