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; 
};

监听以太网(三) Packet32数据结构说明相关推荐

  1. 监听以太网(一) Packet32包说明

    简述  监听网络上的所有数据,是一个比较有趣的题目.流传比较广的一些监听程序,它们都使用了一个更加著名的开发包Packet32.比如,ntsniff.EthernetSpy.ntpacket等,还有赫 ...

  2. 监听以太网(四) Packet32函数SDK

    Packet32包中的函数说明: No.3. PacketSetHwFilter (设置过滤器) 设置一个hardware filter.比如,Filter参数传递NDIS_PACKET_TYPE_P ...

  3. 监听以太网(二) Packet32包说明

    Packet32包中的函数说明: No.2. PacketOpenAdapter (打开网卡) 根据传入的设备名,打开它. LPADAPTER PacketOpenAdapter(  LPTSTR A ...

  4. oracle——监听(三、监听配置)

    一.引言 oracle配置实例监听真是太坑了,下面我是按照一个监听在一个IP一个端口上监听多个实例 的情况下配置的,如果不明白监听有哪几类情况请看上一篇博客,下面是我配置监听遇到的大坑小坑== 更新- ...

  5. java jmenu 监听_Java中用得比较顺手的事件监听

    第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...

  6. Java中使用JNA实现全局监听Linux键盘事件

    title: Java中使用JNA实现全局监听Linux键盘事件 date: 2019-05-03 19:08:00 Java中使用JNA实现全局监听Linux键盘事件 用JNA实现的键盘监听,在Wi ...

  7. 笔记5 | 监听scroollview、listview、gridview页面滑动,判断是否滑动到顶部以及底部...

    地址 CSDN 地址:http://blog.csdn.net/xiangyong_1521/article/details/50957563 scroollview.listview.gridvie ...

  8. 关于Oracle创建新的监听和服务名的问题一二

    最近在学习oracle,是自学,完全的自学,没有任何老师的指导.从图书馆借了本 <Oracle DBA宝典>这本书.好厚啊,下定了决心,就开始了.最近看到了关于创建新的监 听的问题,书中说 ...

  9. RxHttp 完美适配Android 10/11 上传/下载/进度监听

    1.前言 随着Android 11的正式发布,适配Android 10/11 分区存储就更加的迫切了,因为Android 11开始,将强制开启分区存储,我们就无法再以绝对路径的方式去读写非沙盒目录下的 ...

最新文章

  1. 医疗信息安全再添新保障
  2. 多人在线游戏服务器端开发心得(转)
  3. 数据源架构模式之数据映射器
  4. mysql数据库报错1146_关于MySQL报错:[ERR] 1146
  5. js打印到控制台_8个问题看你是否真的懂 JS
  6. easyexcel 动态列_easyexcel动态表头列导出SequenceDiagram 阅读源码事半功倍
  7. 第27月第24天 git pull fetch
  8. 腾讯信息流推荐业务实践:内容分发场景的多目标架构实践
  9. 化敌为友,微软出手优化 Chrome!
  10. php语法------04 php内置函数之与页面表单请求相关的内置函数对象
  11. Python删除文件第一行
  12. Maven实战读书笔记
  13. c语言运算符表 壁纸,Fences 3.0.5 桌面图标管理工具正式版
  14. 8、ESP8266 深度睡眠
  15. 基于WDF框架的PCIE驱动设计
  16. 练习linux命令的软件,找到一个linux下的中文打字练习软件
  17. 使用php语言制作水印
  18. 华为防火墙做单臂路由_华为单臂路由配置详解
  19. pdf格式转换成jpg转换器
  20. dlib重新训练dlib_face_recognition_resnet_model_v1.dat

热门文章

  1. 数据库-优化-数据库结构的优化-表范式化优化
  2. Java反射技术概述
  3. 函数的返回值-交换两个变量的值
  4. Hystrix简介及简单代码示例
  5. python中case的用法_python中Switch/Case实现的示例代码
  6. servlet destroy 示例_KET答题卡怎么填写?2020年KET答题卡填涂示例
  7. 阿里专家分享:企业级大数据轻量云实践
  8. linux 单引号,双引号,反引号
  9. 微信营销这么做,你就成功了 转载
  10. Fat Jar Eclipse Plug-In Tutorial