利用Winpcap捕获发送数据包
- 格式:doc
- 大小:307.50 KB
- 文档页数:10
WinPcap的简介winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。
开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。
它提供了以下的各项功能:1> 捕获原始数据报,包括在共享网络上各主机发送/接收的以及相互之间交换的数据报;2> 在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;3> 在网络上发送原始的数据报;4> 收集网络通信过程中的统计信息。
winpcap的主要功能在于独立于主机协议(如TCP/IP)而发送和接收原始数据报。
也就是说,winpcap 不能阻塞,过滤或控制其他应用程序数据报的发收,它仅仅只是监听共享网络上传送的数据报。
因此,它不能用于QoS调度程序或个人防火墙。
目前,winpcap开发的主要对象是windows NT/2000/XP,这主要是因为在使用winpcap的用户中只有一小部分是仅使用windows 95/98/Me,并且微软也已经放弃了对win9x 的开发。
因此本文相关的程序T-ARP也是面向NT/2000/XP用户的。
WinPcap的安装和例程调试By 曹佳caojia@1.DownLoad2.安装解压得三文件:WinPcap_4_0_1_drivel.exe,WpcapSrc_4_0_1_Source_code.zip和WpdPack_4_0_1_Include_Lib.zip,第一个是驱动的安装程序,第二个是驱动的源代码,第三个是使用Winpcap所要用到的所有.h文件和.lib文件。
1)安装驱动(WinPcap_4_0_1_drivel.exe)2)WpdPack_4_0_1_Include_Lib.zip解压到一个“正式的”位置(用来配置编程环境)3)配置VC6.0环境在Tools->options->Directories里面加入解压以后的include文件夹,在Tools->options->Directories的lib里面加入解压以后的lib文件夹。
基于Winpcap的网络数据捕获
王春霞;张莉
【期刊名称】《邵阳学院学报(自然科学版)》
【年(卷),期】2014(011)001
【摘要】随着网络技术的不断发展,网站安全问题日益得到关注.文章针对日益突出的网络安全问题,在分析了网络嗅探器的基本工作原理的基础上,描述了Winpcap 捕获数据包的程序流程并做了一个网络数据捕获实验.结果表明,这种嗅探器结构简单、捕获数据快,对网络的安全管理具有重要意义.
【总页数】5页(P37-41)
【作者】王春霞;张莉
【作者单位】福建师范大学闽南科技学院,福建泉州362332;福建师范大学闽南科技学院,福建泉州362332
【正文语种】中文
【中图分类】TP393.08
【相关文献】
1.基于WinPcap的数据捕获系统 [J], 林辉;朱俊平
2.基于动态内存池和WinpCap的高速数据捕获技术 [J], 甘彪;凌小峰;宫新保
3.基于NDIS驱动的网络数据捕获研究 [J], 刘文涛
4.基于Linux的高速网络数据捕获技术 [J], 方亮;喻金科
5.基于PF_RING的高速网络数据捕获方法 [J], 吴克河;王冬冬
因版权原因,仅展示原文概要,查看原文内容请购买。
使用Winpcap对数据包进行拦截一上一篇讲到了对所有的网络数据包进行侦听,并过滤,得到自己想要分析的数据包。
数据包被侦听到了,但仍旧发送给了远程的服务器,若我们希望截获这些数据包,但不希望把这些数据被发送给远程服务器,那该如何解决呢?防火墙!对,我也想到了使用防火墙。
windows下的防火墙,大多使用NIDS(Network Driver Interface Specification)对中间层驱动(Intermediate drivers)进行操作。
NIDS就是把IP包拦截在中间驱动层,使这些不能通过网卡发送。
但是这样做的话,上一篇的模拟sniffer程序也侦听不到被NIDS所拦截的IP包。
因此,防火墙行不通。
使用网卡的混杂模式,通过伪造TCP握手信号,赶在本机与远程端握手连通之前,把本机的手牵到自己这里来,不是也可以实现吗?这正是我所要讲的重点。
没错,我的实现思路也是这样的。
sendto函数只在windows server 2003下支持,在windows XP系统下,为了保证网络安全,已经不再被支持。
有网友说可以用Wsasend()可以替代sendto,为了节约时间,我没有尝试去用Wsasend()函数。
使用Winpcap(windows packet capture)可以完成所需要的功能。
winpcap独立于主机协议(如TCP-IP)而发送和接收原始数据包。
Winpcap为数据包捕获提供了windows下的一个平台,它是由伯克利分组捕获库派生而来的分组捕获库,它是在Windows操作平台上来实现对底层包的截取过滤,它的体系结构是由一个核心的包过滤驱动程序,一个底层的动态连接库packet.dll和一个高层的独立于系统的函数库libpcap组成。
调用winpcap函数的程序,需要安装winpcap程序,使之能与驱动挂上钩。
还需要下载winpcap的头文件和相应的库文件。
这样程序才能够跑得起来。
pcap原理
PCAP(Packet Capture)是一种捕获代理网络数据包的技术。
它是网络编程中非常重要的一种技术,可以帮助开发人员分析、调试和研究网络协议。
PCAP通常用于抓取广域网(WAN)或局域网(LAN)上的数据包,以帮助管理员、开发人员进行网络故障诊断与分析。
在计算机网络中,数据是以数据包的形式传输的。
当一个计算机从网络上接收到数据包时,它会把数据包交给操作系统,而操作系统需要将数据包传递给应用程序,以便进行二次开发或分析。
在这个过程中,操作系统需要使用一定的技术来对数据包进行捕获和处理。
而PCAP就是一种捕获和处理网络数据包的技术。
PCAP技术基于操作系统内核层的实现来进行数据包的捕获。
在Linux中,内核中实现了一个Packet Socket接口,用于向用户程序提供数据包的捕获和发送功能。
Windows中则是使用WinPcap或Npcap等第三方库来实现PCAP功能。
PCAP技术可以捕获数据包并进行多种操作,例如过滤、深度分析等。
通过PCAP 技术,开发人员或管理员可以对数据包进行捕获和分析,以便定位网络问题,或优化网络性能。
常见的分析工具包括Wireshark等,通过这些工具的分析,可以有效的发现网络问题,快速解决故障。
总的来说,PCAP技术已经成为了一个网络开发人员不可缺少的技能。
掌握PCAP 技术可以帮助开发人员更全面地了解网络协议和通信机制,定位网络问题,提高
网络性能,同时可以提升工作效率和开发速度。
Winpcap的安装使用方法winpcap的安装包,然后到2.执行安装包,这样你的机子就能运行winpcap 程序了。
3.解压开发包,在VC6.0的Tools-->Option-->Directories的Include fils 和library files加入winpcap的include和lib目录。
4.开始编写wpcap程序。
vs2005:第一步:下载WinPcap的安装包;有不同操作系统环境下的包,我下的是win32版本的。
下载地址:高的版本一般是Beta的。
这个安装包主要是注册一个wpcap.dll的库到操作系统中。
必须安装,如果不安装,在运行例子的时候会弹出窗口提示,找不到wpcap.dll文件;第二步:到上面的网站下载它的开发包,包括一些头文件和库文件;解压到自己指定的目录中;目录中还有HTML格式的说明文档,用于自己学习比较方便;第三步:设置VS2005;1)设置环境目录;在菜单:工具->选项;弹出的选项窗体左边点击:项目和解决方案->VC++目录;在右边:“显示以下内容的目录”标签下面的下拉框中找到“包含文件”,然后对应到第二步下载开发包的Include目录;在同一下拉框中找到“库文件”,然后对应到第二步下载开发包的lib目录;2)设置编译条件;在项目属性页中:配置属性->C/C++->预处理器->预处理器定义,增加;WPCAP;HAVE_REMOTE;每一个预定义符用";"隔开;在项目属性页中:配置属性->链接器->命令行->附加选项对应的文本框中增加:“wpcap.libws2_32.lib”;第四步:非必要步骤;有的时候可能会有些意外错误;比如找不到u_char类型等;我的解决办法是加上#ifndef WIN32#include <sys/socket.h>#include <netinet/in.h>#else#include <winsock.h>#endif============================================= ====================================winpcap开发包使用中的问题总结这里主要讨论一下winpcap开发中可能遇到的问题。
Winpcap功能强大,效率高,使用方便,但是,使用前的准备工作要费一番功夫,步骤如下:步骤1:安装驱动程序。
下载WinPcap Driver和DLL并安装,安装后重启机器。
步骤2:下载wpdpack(Developer’s pack)。
解压后会看到其中包含了docs、Include、lib、Examples等文件夹。
步骤3:在VC中设定Include目录及Library目录。
具体做法:打开VC后,Tools->Option->Directories,在include files中添加……\wpdpack\Include 目录(步骤2中得到的);在Library files中添加……\wpdpack\Lib目录。
步骤4:Project->settings->Link,在Object/library modules中加上wpcap.lib。
然后测试下:#include "pcap.h"void main(){pcap_if_t *alldevs;pcap_if_t *d;int i=0;char errbuf[PCAP_ERRBUF_SIZE];/* 这个API用来获得网卡的列表 */if (pcap_findalldevs(&alldevs, errbuf) == -1){fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); exit(1);}/* 显示列表的响应字段的内容 */for(d=alldevs;d;d=d->next){printf("%d. %s", ++i, d->name);if (d->description)printf("\n\t\tDescription: (%s)\n", d->description);else printf(" (No description available)\n");}if(i==0){printf("\nNo interfaces found! Make sure WinPcap is installed.\n");return;}/* We don't need any more the device list. Free it */pcap_freealldevs(alldevs);}以上是在vc6里面的测试winpcap 驱动简介winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。
基于WinPcap的网络数据包捕获系统设计与实现
黄培花;宋科
【期刊名称】《滨州学院学报》
【年(卷),期】2012(28)6
【摘要】利用WinPcap提供的编程功能,设计了网络数据包捕获系统,实现了数据包的循环捕获以及对包内Ethernet、ARP、IP、TCP、UDP、ICMP等协议的分析.运行结果表明,该系统能够完成数据包的捕获和分析工作,提高网络的安全可靠性.【总页数】5页(P109-113)
【作者】黄培花;宋科
【作者单位】滨州学院计算机科学技术系,山东滨州256603;西南石油大学研究生学院,四川成都610500
【正文语种】中文
【中图分类】TP393.02
【相关文献】
1.基于WinPcap的网络数据包捕获的研究 [J], 蔡豪;李娜
2.基于Winpcap网络数据包的捕获与存储技术研究 [J], 李星;熊列彬;王昌
3.基于WinPcap的公安信息网络数据包捕获分析系统研究 [J], 刘传军
4.基于WinPcap网络数据包捕获实现 [J], 赵建勋
5.基于Winpcap网络数据包的捕获与存储技术研究 [J], 李星;熊列彬;王昌
因版权原因,仅展示原文概要,查看原文内容请购买。
第三章 WinPcap研究3.1 WinPcap简介WinPcap是由意大利的Fulvio Risso 和 Loris Degioanni等人实现的应用于Win32平台数据包捕获与分析的一种驱动软件包,并提供了在Windows操作系统下的开发源代码,是一套高性能API封装库,有一套标准的抓包接口专门用于网络数据包的截获,并在其基础上增加了自定义数据包的发送能力以及针对Win32平台的扩展函数,独立于Windows操作系统的协议栈。
不同版本的Windows系统都有自己的内核模块和用户层模块,所以使用Windows SDK开发的嗅探程序在不同的Windows操作系统版本下需要重新进行编译。
WinPcap为Win32平台提供了一个公共的接口Packet.dll,使得程序可以运行在不同版本的Windows平台上,而无需重新编译。
WinPcap的主要功能在于独立于主机协议和TCP-IP协议发送和接收原始数据包,也就是说,WinPcap不能阻塞、过于或控制其他应用程序对数据报的收发,它只是绕过系统原有的协议栈监听网络上传送的数据包。
因此,它不能用于QoS 调度程序或个人防火墙。
WinPcap有以下几方面的功能:(1)捕获原始数据包,无论它是发往某台机器的,还是在其他设备(共享媒介)上进行交换的。
(2)在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉。
(3)将原始数据包通过网络发送出去。
(4)收集并统计网络流量信息。
3.1.1 WinPcap框架的各个组成部分Packets Network图3-1 WinPcap框架的组成部分如图3-1所示,WinPcap包括内核级的数据包监听驱动NPF、低级动态链接库(Pcaket.dll)和高级系统无关库(Wpcap.dll)。
在利用WinPcap抓包时,要绕过操作系统的协议栈来访问网络上传输的原始数据包,这就要求WinPcap的一部分要运行在操作系统核心层,直接与网络接口驱动交互,这就是NPF驱动要完成的任务,它是依赖于操作系统。
一、Wireshark简介Wireshark是一个有名的网络端口探测器,是可以在Windows、Unix等各种平台运行的网络监听软件,它主要是针对TCP/IP协议的不安全性对运行该协议的机器进行监听。
其功能相当于Windows下的Sniffer,都是在一个共享的网络环境下对数据包进行捕捉和分析,而且还能够自由地为其增加某些插件以实现额外功能。
Ethernet网络监测工具可在实时模式或离线模式中用来捕获和分析网络通信。
下面是使用Wireshark 可以完成的几个工作:l 网络管理员使用它去帮助解决网络问题l 网络安全工程师用它去测试安全问题l 开发人员用它是调试协议的实现过程l 用它还可以帮助人员深入的学习网络协议l 支持UNIX 平台和Windows 平台。
l 从网络接口上捕获实时数据包l 以非常详细的协议方式显示数据包l 可以打开或者存贮捕获的数据包l 导入/导出数据包,从/到其它的捕获程序l 按多种方式过滤数据包l 按多种方式查找数据包l 根据过滤条件,以不同的颜色显示数据包l 可以建立多种统计数据其最常用的功能是被攻击者用来检测被攻击电脑通过23(telnet)和110(pop3)端口进行的一些明文传输数据,以轻松得到用户的登录口令和邮件账号密码。
对于网络管理员来说,也可以通过抓包分析,来确定一些异常的流量和局域网内部的非正常用户与外界的通信,比如说对于现在比较占用网络带宽的诸如Bit T orrent等P2P应用软件流量,通过使用该软件确定这些流量,网络管理员就可以使用流量控制(T C)的方法来规范、合理的分配带宽资源,提高网络的利用率。
二、下载安装WiresharkWireshark可以在/download/上下载,该软件有极其方便和友好的图形用户界面,并且能够使得用户通过图形界面的配置和选择,针对多块网卡、多个协议进行显示,效果非常好。
目前最新版本为:Wireshark 0.99。
Wireshark安装后自动安装winpcap 4.0 ,Winpcap是UNIX下的libpcap移植到windows下的产物,他是一个GPL项目。
函数说明:Net::Pcap的功能由winpcap提供.Net::Pcap::findalldevs(\$err [,\%description])返回一个能被函数Net::Pcap::open_live()利用的所有网络设备的名字的列表,这些名字分别是%description中的键,如果提供了可选参数-散列%description,则它存放所有对应与前面的网络设备的描述信息;如果发生错误,则$err中会存放相应的错误消息。
Net::Pcap::open_live($dev, $snaplen, $promisc, $to_ms, \$err)该函数返回一个用来在网络上捕获包的描述符,$dev指定从哪个网络接口上捕获包,$snaplen设定捕获包的最大字节数,$promisc指定是否将该网络接口设置为混合模式,$to_ms 设定以毫秒度量的读超时时间,这是每次读取的时间阀值,如果有错误发生,则不会定义这个描述符,同时将这个错误信息写入参数$err中。
Net::Pcap::sendpacket($pcap_t, $packet)该函数用来发送数据包,$pcap_t是指定通过哪个网络接口来发送数据包的设备描述符,$packet是要发送的数据,这个数据中不需要包含MAC CRC ,因为网络接口的驱动会自动完成计算并添加。
Net::Pcap::close($pcap_t)关闭描述符$pcap_t所对应的的网络接口。
Net::Pcap::next($pcap_t, \%hdr)从描述符$pcap_t关联的的接口上抓取包,这些包的一些信息被放到hash表%hdr中。
如果没有获取包,则返回值和头部都会被设成无定义。
%hdr内容:len--报文的总长度caplen--包数据的实际长度tv_sec秒级别的时间戳值tv_usec毫秒级别的时间戳值Net::Pcap::compile($pcap_t, \$filter_t, $filter_str, $optimize, $netmask)$pcap_t 关联一个网络接口,$filter_str存放过滤字段描述,函数执行后把编译的结果放到\$filter_t中,如果$optimize为真,则对$filter_str进行优化处理。
wireshark抓包原理
Wireshark是一款开源的网络抓包工具,用于分析和监视网络流量。
它能够通过捕获网络接口上的数据包,并提供详细的分析和统计信息。
Wireshark的抓包原理基于网络接口运行的数据链路层(Layer 2)或网络层(Layer 3)。
当Wireshark开始抓包时,它会打开选择的网络接口,并侦听该接口上进出的数据包。
在数据包到达网卡之后,Wireshark通过使用libpcap或WinPcap库函数来捕获数据包。
这些库允许Wireshark从网络接口的设备驱动程序中获取原始数据包。
Wireshark捕获的原始数据包包括数据链路层的帧,以及可能存在的网络层(如IP)和传输层(如TCP或UDP)的头部信息。
一旦Wireshark获取了原始数据包,它会进行解析和处理。
Wireshark使用网络协议分析引擎来解析数据包的各个协议字段,并将它们显示在用户界面上。
这使用户能够更好地理解和分析网络流量。
Wireshark还提供了各种过滤和显示选项,允许用户根据需要对捕获的数据包进行过滤和排序。
用户可以使用过滤器来仅显示特定地址、端口、协议或其他字段的数据包,从而集中关注所需的信息。
总之,Wireshark的抓包原理是通过打开并侦听网络接口,捕获原始数据包,然后解析和处理这些数据包,并将结果显示在
用户界面上。
这样用户可以分析网络流量,识别潜在的问题和安全威胁,以及进行网络性能优化和故障排除。
利用winpcap捕获数据包、发送数据包 在上一章里面,我们学会了如何获取适配器的相关配置信息,在这一章里面,我们将继续更有意义的内容,就是捕获和发送数据包。
3.1 winpcap捕获数据包流程与相关函数 计算机是通过网卡和网络中其他的主机进行通信的,网卡相当于数据包进出的大门,我们平时讲的数据包的捕获相当于大门的门卫在检查进出的行人一样。在网络基础我们学习过,数据包的发送是一个封装的过程,而数据包的接收则是解封装的过程,但是封装和解封装都是在OS内核来完成的,一般的应用程序没办法获取数据包原始的内容,而Winpcap却能提供这样的功能,在数据链路层捕获数据包,提供最原始的信息。其中Winpcap捕获数据的原理在第一章已经介绍过了,大家可以回顾下。 另外,数据捕获只能捕获通过本主机网卡的数据,没法捕获其他主机上网卡的数据。 下面先看看Winpcap捕获数据时的工作流程。
选择捕获数据的网卡
打开该网卡开始捕获结束 数据捕获的流程 1. 发现网络设备的函数(find_dev_ex)以前已经介绍过了。 2.打开网卡的函数 打开设备的函数是 pcap_open()。下面是参数 snaplen, flags 和 to_ms 的解释说明 pcap_t* pcap_open ( const char * source, // 指定的网卡的名称 int snaplen, // 帧的长度 int flags, // 网卡捕获的模式 int read_timeout, // 超时 struct pcap_rmtauth * auth, // 是否要求认证 char * errbuf // 错误信息存储 ) snaplen 制定要捕获数据包中的哪些部分。 在一些操作系统中 (比如 xBSD 和 Win32), 驱动可以被配置成只捕获数据包的初始化部分: 这样可以减少应用程序间复制数据的量,从而提高捕获效率。本例中,我们将值定为65535,它比我们能遇到的最大的MTU还要大。因此,我们确信我们总能收到完整的数据包。 flags: 最最重要的flag是用来指示适配器是否要被设置成混杂模式。 一般情况下,适配器只接收发给它自己的数据包, 而那些在其他机器之间通讯的数据包,将会被丢弃。 相反,如果适配器是混杂模式,那么不管这个数据包是不是发给我的,我都会去捕获。也就是说,我会去捕获所有的数据包。 这意味着在一个共享媒介(比如总线型以太网),WinPcap能捕获其他主机的所有的数据包。 大多数用于数据捕获的应用程序都会将适配器设置成混杂模式,所以,我们也会在下面的范例中,使用混杂模式。 to_ms 指定读取数据的超时时间,以毫秒计(1s=1000ms)。在适配器上进行读取操作(比如用 pcap_dispatch() 或 pcap_next_ex()) 都会在 to_ms 毫秒时间内响应,即使在网络上没有可用的数据包。 在统计模式下,to_ms 还可以用来定义统计的时间间隔。 将 to_ms 设置为0意味着没有超时,那么如果没有数据包到达的话,读操作将永远不会返回。 如果设置成-1,则情况恰好相反,无论有没有数据包到达,读操作都会立即返回。 3.通过回调方式捕获数据的函数 程序功能:打开指定的网卡捕获数据帧,输出数据帧的捕获时间和数据帧的大小等信息。 程序运行结果如下图所示:
代码如下: //@filename: PacketCap1.cpp //程序功能:在指定的网卡上捕获数据帧,并输出数据帧的长度和捕获时间 #include "pcap.h" #include "remote-ext.h" #pragma comment(lib, "wpcap") // 包处理函数 void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); // 主函数 int main() { pcap_if_t *alldevs; // 设备列表 pcap_if_t *d; // 网卡节点指针 int inum; int i=0; pcap_t *adhandle; // 要打开的网卡句柄 char errbuf[PCAP_ERRBUF_SIZE]; // 错误消息 // 获取本机设备列表 if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); exit(1); } // 打印列表 for(d=alldevs; d; d=d->next) { printf("%d. %s", ++i, d->name); if (d->description) printf(" (%s)\n", d->description); else printf(" (No description available)\n"); } if(i==0) { printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); return -1; } // 选择监听的网卡 printf("Enter the interface number (1-%d):",i); scanf("%d", &inum); if(inum < 1 || inum > i) { printf("\nInterface number out of range.\n"); // 释放设备列表 pcap_freealldevs(alldevs); return -1; } // 跳转到选中的适配器 for(d=alldevs, i=0; i< inum-1; d=d->next, i++); // 打开设备 if ( (adhandle = pcap_open(d->name, // 设备名 65536, // 65535保证能捕获到不同数据链路层上的每个数据包的全部内容 0, // 0表示普通模式,1表示混杂模式 1000, // 读取超时时间 NULL, // 远程机器验证 errbuf // 错误信息缓存 )) == NULL) { fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); // 释放设备列表 pcap_freealldevs(alldevs); return -1; } printf("\nlistening on %s...\n", d->description); // 释放设备列表 pcap_freealldevs(alldevs); // 开始捕获 pcap_loop(adhandle, 0, packet_handler, NULL); return 0; } // 每次捕获到数据包时,libpcap都会自动调用这个回调函数 void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) { struct tm *ltime; char timestr[16]; time_t local_tv_sec; // 将时间戳转换成可识别的格式 local_tv_sec = header->ts.tv_sec; ltime=localtime(&local_tv_sec); strftime(timestr, sizeof timestr, "%H:%M:%S", ltime); printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len); }
函数pcap_loop用户捕获数据,有一个回调 参数, packet_handler指向一个可以接收数据包的函数。这个函数会在收到每个新的数据包并收到一个通用状态时被libpcap所调用 ( 与函数 pcap_loop() 和 pcap_dispatch() 中的 user 参数相似),数据包的首部一般有一些诸如时间戳,数据包长度的信息,还有包含了协议首部的实际数据。 注意:冗余校验码CRC不再支持,因为帧到达适配器,并经过校验确认以后,适配器就会将CRC删除,与此同时,大部分适配器会直接丢弃CRC错误
原始帧-ts : struct timeval-caplen : bpf_u_int32-len : bpf_u_int32
pcap_pkthdr
原始帧头部
图1 Winpcap捕获数据帧时的过程 其中pcap_pkthdr为Winpcap添加上的头部,在pcap.h头文件中定义,其定义如下: Struct pcap_pkthdr { struct timeval ts; // 时间 bpf_u_int32 caplen; // 长度 bpf_u_int32 len; // 帧长度 }; 其中timeval的结构如下: struct timeval { long tv_sec; /* seconds */