监听以太网(三) Packet32数据结构说明
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数据结构说明相关推荐
- 监听以太网(一) Packet32包说明
简述 监听网络上的所有数据,是一个比较有趣的题目.流传比较广的一些监听程序,它们都使用了一个更加著名的开发包Packet32.比如,ntsniff.EthernetSpy.ntpacket等,还有赫 ...
- 监听以太网(四) Packet32函数SDK
Packet32包中的函数说明: No.3. PacketSetHwFilter (设置过滤器) 设置一个hardware filter.比如,Filter参数传递NDIS_PACKET_TYPE_P ...
- 监听以太网(二) Packet32包说明
Packet32包中的函数说明: No.2. PacketOpenAdapter (打开网卡) 根据传入的设备名,打开它. LPADAPTER PacketOpenAdapter( LPTSTR A ...
- oracle——监听(三、监听配置)
一.引言 oracle配置实例监听真是太坑了,下面我是按照一个监听在一个IP一个端口上监听多个实例 的情况下配置的,如果不明白监听有哪几类情况请看上一篇博客,下面是我配置监听遇到的大坑小坑== 更新- ...
- java jmenu 监听_Java中用得比较顺手的事件监听
第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...
- Java中使用JNA实现全局监听Linux键盘事件
title: Java中使用JNA实现全局监听Linux键盘事件 date: 2019-05-03 19:08:00 Java中使用JNA实现全局监听Linux键盘事件 用JNA实现的键盘监听,在Wi ...
- 笔记5 | 监听scroollview、listview、gridview页面滑动,判断是否滑动到顶部以及底部...
地址 CSDN 地址:http://blog.csdn.net/xiangyong_1521/article/details/50957563 scroollview.listview.gridvie ...
- 关于Oracle创建新的监听和服务名的问题一二
最近在学习oracle,是自学,完全的自学,没有任何老师的指导.从图书馆借了本 <Oracle DBA宝典>这本书.好厚啊,下定了决心,就开始了.最近看到了关于创建新的监 听的问题,书中说 ...
- RxHttp 完美适配Android 10/11 上传/下载/进度监听
1.前言 随着Android 11的正式发布,适配Android 10/11 分区存储就更加的迫切了,因为Android 11开始,将强制开启分区存储,我们就无法再以绝对路径的方式去读写非沙盒目录下的 ...
最新文章
- 医疗信息安全再添新保障
- 多人在线游戏服务器端开发心得(转)
- 数据源架构模式之数据映射器
- mysql数据库报错1146_关于MySQL报错:[ERR] 1146
- js打印到控制台_8个问题看你是否真的懂 JS
- easyexcel 动态列_easyexcel动态表头列导出SequenceDiagram 阅读源码事半功倍
- 第27月第24天 git pull fetch
- 腾讯信息流推荐业务实践:内容分发场景的多目标架构实践
- 化敌为友,微软出手优化 Chrome!
- php语法------04 php内置函数之与页面表单请求相关的内置函数对象
- Python删除文件第一行
- Maven实战读书笔记
- c语言运算符表 壁纸,Fences 3.0.5 桌面图标管理工具正式版
- 8、ESP8266 深度睡眠
- 基于WDF框架的PCIE驱动设计
- 练习linux命令的软件,找到一个linux下的中文打字练习软件
- 使用php语言制作水印
- 华为防火墙做单臂路由_华为单臂路由配置详解
- pdf格式转换成jpg转换器
- dlib重新训练dlib_face_recognition_resnet_model_v1.dat