函数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函数集合(附代码实例),网上搜集各种版本的集合
2、捕获所有流经网卡的数据包,并利用 WinPcap 函数库设置过滤规则。 3、分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显 示。 4、将所开发工具的捕获和分析结果与常用的嗅探器,如 Wireshark,...
Winpcap常用函数
基于WinPcap 端口扫描器 设计和实现 pdf
2、捕获所有流经网卡的数据包,并利用 WinPcap 函数库设置过滤规则。 3、分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显 示。 4、将所开发工具的捕获和分析结果与常用的嗅探器,如 Wireshark,...
winpcap在vc6下配置环境,winpcap函数 四步骤捕获报文.
网络编程底层函数库WinPCAP资料,WinPcap网络程序开发包下载及安装说明,以及WinPcap的开发教程。
基于WinPcap和MFC实现的网络嗅探器 ,捕获所有流经网卡的数据包,并利用 WinPcap 函数库设置过滤规则, 分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显示 winPcap+MFC实现网络嗅探器
winpcap函数的相关原理及分析,还有一些函数功能以及数据包的捕获机制
捕获所有流经网卡的数据包,并利用WinPcap函数库设置过滤规则; 分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显示; 支持协议:TCP、UDP、ARP、ICMP、HTTP、IPv4、IPv6 可以本地文件的形式来保存...
winpcap基本模块的详细讲解 函数用法 关键数据结构
WinPcap用户指南 定义 输出函数 过滤串表达式的语法 使用WinPcap编程 WinPcap教程: 循序渐进教您... 对于提供远程捕获的函数引用, 请参阅WinPcap 输出函数 章节的 "Windows-specific Extensions" . 核心数据结构与定义
捕获所有流经网卡的数据包,并利用WinPcap函数库设置过滤规则。 ? 分析捕获到的数据包的包头和数据,按照各种协议的格式进行格式化显示。 ? 将所开发工具的捕获和分析结果与常用的Sniffer进行比较,完善程序代码。
Ethereal是一个开放源码的网络分析系统,也是是目前最好的开放源码的网络协议分析器,...Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采用Libpcap函数库抓包,在windows系统中采用winpcap函数库抓包。
在Window系统中,意大利人Fulvio Risso和Loris Degioanni提出并实现了Winpcap函数库,其实现思想来源于BPF。 2. Wireshark的简单操作方法 安装Wireshark之前,需要安装Winpcap,安装过程比较简单。安装完成后,启动...
" " "Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采用" " "Libpcap函数库抓包,在windows系统中采用winpcap函数库抓包 " " "2.层次化的数据包协议分析方法 " " " 取得捕包函数捕回的数据包后就...
Mypcap由winpcap提取基础功能而得来,必须安装wpcap才能使用,提供三个C语言函数 1. 获取网卡驱动(网络设备)信息 int GetNetworkDrive(ND* pNetworkDrives, int maxNetworkDriveNum); 2. 接收网卡数据 int ...
第一部分内容主要适合那些需要利用WinPcap开发应用程序的编程人员: 它包含了WinPcap API的所有函数和数据结构的信息, 说明部分解释了如何编写一个数据包过滤器,而另一个页面则解释了如何将它包含到应用程序中。...
使用WinPcap的函数pcap_finidalldevs()获主机的网络设备名,选择一个有线网卡,用函数pcap_open_live()打开该设备,通过把网卡设置为混杂模式,接收一切数据包,可以定义一些过滤规则来捕获特定的数据包。...