《程序员手册》主要介绍了Winpcap程序开发的相关知识,特别是关于Packet.dll API的使用,它是Windows平台上用于数据包捕获的重要工具。Packet.dll是一个动态链接库,为开发者提供了一组接口,简化了与包捕捉驱动的交互,避免了直接使用系统调用或设备驱动I/O控制操作。该库不仅包括了网络适配器的控制函数,还提供了数据包的读写、缓冲区设置和过滤器功能。两个版本的Packet.dll分别适用于Windows 95/98和Windows NT/2000,具有相同的API,便于编写跨平台的应用。
对于一般的包捕获需求,推荐使用wpcap.dll,它是libpcap库的扩展,提供了更高效、简洁的编程环境。wpcap.dll也依赖Packet.dll的函数,但提供了如包捕获、过滤器设置和数据保存等功能的封装,使得编程更为直观。libpcap是一个系统无关的包捕获API,适用于跨平台开发,但在某些特定或底层操作上不如Packet.dll灵活。
手册中提到了几个关键的数据结构,如PACKET、ADAPTER、bpf_insn、bpf_program、bpf_hdr、bpf_stat和NetType。其中,PACKET结构体用于存储数据包缓冲区的信息,包括缓冲区指针、长度和实际接收到的字节数。ADAPTER结构体描述网络适配器,包含了驱动句柄、符号链接、写操作计数和读取事件句柄。这些数据结构在libpcap中也有定义,主要用于过滤器设置和解析驱动返回的数据。PACKET_OID_DATA结构体则用于通过ODI(Open Data-Link Interface)与网络适配器进行查询和设置操作。
Packet.dll API提供了丰富的功能,如PacketOpenAdapter用于打开网络适配器,PacketSetBuffer用于设置缓冲区大小,PacketSetMinToCopy可以定义内核缓冲区中触发读取事件所需的最小数据量,PacketSendPacket用于将数据包写入网络适配器,以及PacketRequest用于与适配器进行OID查询和设置等操作。
在开发基于Winpcap的包捕获程序时,理解这些数据结构和函数是至关重要的。它们不仅帮助开发者高效地获取网络数据,还能实现高级功能,如过滤网络流量、分析协议和检测异常活动。因此,《程序员手册》是Winpcap开发者不可或缺的参考资料,它详细解释了Packet.dll API的使用方法和工作原理,为构建自己的网络监控或分析工具提供了全面的技术支持。