函数1:
int pcap_datalink(pcap_t* p)
返回链路层上的一个适配器。返回链路层的类型,链路层的类型包括:
DLT_NULL: BSD回路封装;链路层协议头是一个4字节的域,以主机字节顺序(host byte order),包含一个从socket.h来的PF_value。主机字节顺序(host byte order)是捕获数据包的机器的字节顺序,而PF_value是捕获数据包的机器的OS。如果一个读取一个文件,字节顺序和PF_value不一定是抓取文件的那些机器。
DLT_EN10MB: 以太网(10Mb, 100Mb, 1000Mb, 或者更高)。
DLT_IEEE802: IEEE802.5令牌环网。
DLT_ARCNET:ARCNET。
DLT_SLIP:SLIP。
DLT_PPP:PPP;如果第一个字节是0xff或0x03,它是类HDLC帧上的PPP。
DLT_FDDI:FDDI
DLT_ATM_RFC1483:RFC1483LLC/SNAP ATM;数据包以IEEE802.2 LLC头开始。
DLT_RAW:原始IP(raw IP);数据包以IP头开始。
DLT_PPP_SERIAL:按照RFC1662,基于类HDLC帧的PPP,或者按照RFC1547的4.3.1,基于HDLC帧的Cisco PPP;前者的第一个字节是0xFF,后者的第一个字节是0x0F或0x8F。
DLT_PPP_ETHER:按照RFC2516,PPPoE;数据包以PPPoE头开始。
DLT_C_HDLC:按照RFC1547的4.3.1,基于HDLC帧的Cisco PPP。
DLT_IEEE802_11:IEEE 802.11无线局域网。
DLT_FRELAY:帧中继(Frame Relay)。
DLT_LOOP:OpenBSD回路封装。
DLT_LINUX_SLL:Linux抓包封装。
DLT_LTALK:苹果的LocalTalk,数据包以AppleTalk LLAP头开始。
DLT_PFLOG:OpenBSD pflog。
DLT_PRISM_HEADER:后接802.11头的棱镜监视器模式(Prism monitor mode)信息。
DLT_IP_OVER_FC:RFC2625 IP-over-Fiber 频道,以RFC2625中定义的Network_Header开始。
DLT_SUNATM:SunATM设备。
DLT_IEEE802_11_RADIO:后接802.11头的链路层信息。
DLT_ARCNET_LINUX:没有异常帧的ARCNET。
DLT_LINUX_IRDA:Linux-IrDA数据包,DLT_LINUX_SLL头后接IrLAP头。
函数2:
int pcap_compile(pcap_t*p,
struct bpf_program*fp,
char*str,
intoptimize,
bpf_u_int32netmask)
编译一个数据包过滤器,将一个能被核心态(kernel-level)过滤器引擎解释的程序中的高层过滤表达式(filtering expression)进行转化。pcap_compile()被用来将字符串str编译进过滤器程序(fp),程序(fp)是一个指向bpf_program结构体并被pcap_compile()赋值的指针。optimize控制是否对目标代码(resulting code)的性能进行优化。Netmask表明IPv4掩码,它仅在检查过滤器程序中的IPv4广播地址的时候被使用。如果网络掩码对于程序是不可知的或者数据包是在Linux的”任何(any)”伪接口上被捕获的,则赋值0;IPv4广播地址的测试将不被正确进行,但过滤器程序中的其他所有的测试都不会有问题。返回-1表示发生了错误,此时,pcap_geterr()将被用来显示错误信息。
函数3:
int pcap_setfilter(pcap_t*p,
struct bpf_program* fp)
把一个过滤器同一次抓包关联起来。pcap_setfilter被用来指定一个过滤器程序。fp是一个指向bpf_program结构体的指针,通常是pcap_compile()执行的结果。当失败时返回-1,此时,pcap_geterr()被用来显示错误信息;返回0表示成功。
首先,首先我们设置过滤器为“ip and udp”。用这个方法我们可以确保packet_handler()仅接收IPv4上的UDP数据包:这就简化了解析过程并且提高了程序的效率。
我们还创建了IP和UDP两个结构体,这些结构体被packet_handler()用来定位不同的头域。
packet_handler()展现了像tcpdump/WinDump这些复杂的嗅探器(sniffer)如何解析网络数据包。因为我们不关心MAC头,所以我们跳过它。为了简便起见,抓包前我们用pcap_datalink()检查MAC层,以确保我们处理的是以太网。该方法可以确保MAC头是14字节。
IP头的定位在MAC头定位之后。我们从IP包头中取出源IP地址和目标IP地址。
展开UDP包头有点复杂,因为IP包头不是定长的。因此,我们使用IP包头的长度域来获得它的大小。一旦我们知道了UDP头的位置,我们可以取出源端口和目的端口。
分享到:
相关推荐
WinPcap 函数集合 WinPcap 是一个跨平台的网络嗅探器库,提供了一个通用的 API 来捕获网络数据包。下面是 WinPcap 函数集合的详细说明: 结构体介绍 WinPcap 中定义了多个结构体,用于描述网络接口、数据包和捕获...
2、捕获所有流经网卡的数据包,并利用 WinPcap 函数库设置过滤规则。 3、分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显 示。 4、将所开发工具的捕获和分析结果与常用的嗅探器,如 Wireshark,...
- Packet.dll动态链接库:包含主要的WinPCAP函数实现。 - pcap.dll动态链接库:用于数据包捕获和分析,是libpcap库的Windows版本。 3. **WinPCAP的主要功能** - 实时数据包捕获:记录网络接口上的所有传输数据。...
2. **包含头文件**:在C++代码中包含`#include <pcap.h>`,引入必要的WinPcap函数和结构体。 3. **初始化**:使用`pcap_open_live()`函数打开网络接口,并设置捕获参数。 4. **设置过滤器**:利用`pcap_compile()`和...
2. **导入库函数**:在项目中,你需要包含Winpcap的头文件,如`<winpcap.h>`,这将提供访问Winpcap函数的接口。 3. **初始化**:使用`wpcap_init()`函数初始化Winpcap库,这将允许你访问网络接口。 4. **打开网络...
#### 三、基于WinPcap函数库的VC++设计 在使用VC++进行基于WinPcap的网络数据包捕获时,需要定义几个关键的数据结构,例如描述网络适配器和数据包结构的变量。此外,还需要遵循一定的步骤来实现数据包的捕获: 1. ...
2. **集成WinPCap库**:将WinPCap库添加到项目中,并配置编译环境以正确链接和使用WinPCap函数。 3. **编写捕获逻辑**:在MFC事件处理函数中,编写代码来初始化WinPCap设备,设置过滤器,启动捕获,以及处理捕获到...
### 基于WinPcap端口扫描器的设计与实现 #### 技术背景与重要性 在当今高度互联的世界中,网络安全已成为企业和个人不可忽视的关键议题。随着网络攻击手段的日益复杂化,确保网络环境的安全变得尤为重要。端口扫描...
3. **启动抓包**:调用WinPcap函数开始捕获网络数据包。 4. **处理数据包**:接收到数据包后,程序可以进行分析、存储或进一步处理。 5. **停止抓包**:完成任务后,调用相关函数停止数据包捕获。 总的来说,...
2、捕获所有流经网卡的数据包,并利用 WinPcap 函数库设置过滤规则。 3、分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显 示。 4、将所开发工具的捕获和分析结果与常用的嗅探器,如 Wireshark,...
Winpcap库包含了多个函数,用于实现不同功能,如网络设备的枚举、数据包的捕获和处理等。以下将详细介绍标题和描述中提到的几个常用函数。 1. `pcap_findalldevs(pcap_if_t **, char *)` 这个函数用于获取系统中...
winpcap在vc6下配置环境,winpcap函数 四步骤捕获报文.
#### 三、基于WinPcap函数库的VC++设计 为了实现基于WinPcap的网络数据包捕获,需要定义一些必要的数据结构,并按照一定的流程进行操作。 ##### 1. 设备数据定义 - `LADAPTER lpadapter`:描述一个网络适配器。 - ...
WinPcap教程:深入理解函数用法与关键数据结构 WinPcap是Windows平台上一个强大的网络数据包捕获和网络分析工具。它为应用程序提供了一个底层接口,允许它们访问网络接口层的数据包,并进行捕获、过滤、发送等操作...
这篇文档将详细介绍WinPCAP的基础知识,包括其功能、工作原理、主要结构体和函数,以及如何进行程序开发。 1. **WinPCAP的功能** WinPCAP的核心功能包括数据包的捕获、网络数据包过滤、网络数据的发送以及网络接口...
基于WinPcap和MFC实现的网络嗅探器 ,捕获所有流经网卡的数据包,并利用 WinPcap 函数库设置过滤规则, 分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显示 winPcap+MFC实现网络嗅探器
捕获所有流经网卡的数据包,并利用WinPcap函数库设置过滤规则; 分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显示; 支持协议:TCP、UDP、ARP、ICMP、HTTP、IPv4、IPv6 可以本地文件的形式来保存...
WinPcap用户指南 定义 输出函数 过滤串表达式的语法 使用WinPcap编程 WinPcap教程: 循序渐进教您... 对于提供远程捕获的函数引用, 请参阅WinPcap 输出函数 章节的 "Windows-specific Extensions" . 核心数据结构与定义
捕获所有流经网卡的数据包,并利用WinPcap函数库设置过滤规则。 ? 分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显示。 ? 将所开发工具的捕获和分析结果与常用的Sniffer进行比较,完善程序代码。