winpcap函数四步骤捕获报文

合集下载

winpcap捕捉网络数据包

winpcap捕捉网络数据包

利用WIPCAP捕捉IP数据包分析局域网流量1、背景知识1.1、IP协议IP(Internet Protocol,互联网协议)协议是TCP/IP协议族中最为核心的协议,所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。

IP协议把传输层送来的消息封装成IP数据包,并把IP数据包传递给数据链路层。

IP协议制定了统一的IP数据报格式,向传输层屏蔽了通信子网的差异,从而为消息的收发双方提供了一条透明的传输通道。

IP数据包结构如图1-1:图1-1 IP包结构1.版本IP数据报的第一个域是版本域,其长度为4bit,表示所使用的IP协议的版本。

通信双方使用的IP协议的版本必须一致。

版本域值为4则表示IPv4;版本域值为6则表示IPv6。

当前的版本为IPv4。

2.报头长度报头长度域长度为4bit,它以4个字节为计算单位表示报头的长度,该长度不包含数据部分。

报头中除了IP选项域与填充域之外,其他各项是定长的。

因为很少使用IP选项功能,所以,该域的值一般为5,意味着报头的长度是5个4字节,也就是20个字节。

协议规定:IP数据报的报头长度必须是4字节的整数倍。

当IP报头长度不是4字节的整数倍时,必须利用最后一个填充域“添0”来加以填充。

3.服务类型如图1-2所示,该字段占8bit,包括3bit的优先级字段,4bit的服务类型(type of service,TOS)字段和1bit的保留位,保留位必须置0。

该字段用于指示路由器如何处理该数据报。

图1-2 服务类型字段结构3bit的优先级表示数据报的重要性,共分8级,数值越大等级越高,优先级越高则表示数据报越重要(该字段值现在已被忽略)。

4bit的TOS字段分别表示:最小时延(D)、最大吞吐量(T)、最高可靠性(R)和最小费用(C)。

每个位都有0或1两个值,但4bit中最多只能有一个位的值为1。

如果所有4 bit均为0,那么就意味着是一般服务。

4.总长度总长度域占16 bit,它以字节为单位具体说明包括报头在内的整个IP数据包的总长度。

网络流量监测实验二利用WINPCAP编程实验报告

网络流量监测实验二利用WINPCAP编程实验报告

姓名:班级:班内序号:学号:----------------------------------本次实验的内容是分析Winpcap程序,Winpcap程序包含在winpcap_class.zip中,解压缩后有四个程序:(1)Opening an adapter and capturing packets(2)Handling offline dump files(3)Sending Packets(4)Gathering Statistics on the network traffic分别进入相关目录下,双击*.dsw,即可编译运行相关程序。

为了能让程序正常编译、运行,需要●解压程序员开发包(WpdPack.rar)●在tool的option的include和lib中加入WpdPack的include目录和lib目录。

本次实验所有同学必须提交实验报告电子版一份,上交时注意要修改文档名。

实验报告内容是:分别写出给定的四个程序(第一个已经给出,其他三个按照第一个写)的流程,关键函数接口及其作用,运行并截取运行结果(截图)。

程序一:Opening an adapter and capturing packets1.程序流程1)获得本机网络接口列表(如果出错,输出错误并退出)2)打印列表信息(如果接口数量为0,输出错误并退出)3)输入要捕获的网络接口序号(如果输入错误,释放列表,退出)4)跳转到相应的网络接口5)打开网络接口,建立捕获实例(如果出错,释放列表,退出)6)释放网络接口列表7)开始循环捕获数据包,不限制包数上限(如果出错则退出)8)将捕获到的数据包信息(捕获时间、长度)打印出来9)反复执行8)2.关键函数及其作用:1)pcap_findalldevs_ex:获得适合的网络接口的列表。

列表中每个元素都记录了一个接口的信息。

2)pcap_freealldevs:释放网络接口的列表。

3)pcap_open:打开一个指定网络接口,可以通过这个接口来捕获或者发送数据包。

用WinPcap实现网络数据的捕获

用WinPcap实现网络数据的捕获
vi akthn lr ( hr d mpi ,cnts u tpa — kh r od pc e ade U c a u fe o s t c cp p td l r
h a e,c n tu ca e d r o s h r aktvi i r t ep i t ) pc e)od fi ( a_f d; ; p n p _ _
维普资讯
科技信J l
0计算机 与信息技术 O
S IN E IF R TO C E C N O MA I N
20 0 6年
第l 0期
用 WiP a 实现网络数据的捕获 n cp
秦 志红 ( 南公 安高等 专 科学校 信息 安全 系 河 南 河
pa—e lr a d , ft ) ep sf t ( l & i r l eh e l ; i n e d ump l= c p d mp oe(ad , 酬 l ; / i fep a u p nhn l a e r 】 牛截获包 送入文件 )
_
_
caer t C PE R U _IE; hr r u P A _ R B FSZ ] b[
我们可以使用它开 发各种 网络分析工具 。 n cp Wi a 利用 了以太 网的广 P 播特性 , 设置 网卡为混杂模 式 , 听网络环境 的低层 ( 路层 和网络 监 链
层 )拦 截 经 过 监 听 机 器 在 网 络 上 传 输 的 数 据 , 数 据 进 行 处 理 , 通 , , 对 并
章 ,
存储错误信息的字符串

src p porm l r tu tb f rga ft ; ie
_ _
已经 编 译 好 的 过 滤 器 /
i u p l = U LI f m f =N L) ( d i e fr fs er  ̄ 打开输 出文件 出错 、”: pi (dr, n t " n1

winpcap编程_适合当讲授课件

winpcap编程_适合当讲授课件

要向VC++6.0中添加一个新的包含文件所在的路径,你必 须打开Tool菜单,选择Options,然后选择Directories选项卡, 在Show directories下拉框中选择Include files,并且将新的 路径添加到Directories中去 。
二、获得设备列表
通常,编写基于WinPcap应用程序的第一件事情,就是获得已 连接的网络适配器列表。WinPcap提供了 pcap_findalldevs_ex( ) 函数来实现这个功能:
由 pcap_findalldevs_ex()返回的每一个 pcap_if 结构体, 都包含一个 pcap_addr 结构体,这个结构体由如下元素组成:
通过返回的结构,我们可以得到探测到的网卡设备的更 详尽信息。
例子:
二、打开适配器开始捕获数据包
现在,我们已经知道如何获取适配器的信息了,那我们就开始 一项更具意义的工作,打开适配器并捕获数据包。本节中,我们会 编写一个程序,将每一个通过适配器的数据包打印出来。

Sniffer,中文可以翻译为嗅探器,是一种基于被动侦听原理的网络 分析方式。使用这种技术方式,可以监视网络的状态、数据流动情况 以及网络上传输的信息。当信息以明文的形式在网络上传输时,便可 以使用网络监听的方式来进行攻击。将网络接口设置在监听模式,便 可以将网上传输的源源不断的信息截获。 wireshark(2006年之前称为Ethereal)一是全球相当行流行的开放 源代码的网络协议分析软件,功能强大而且支持平台最多,它可以实 时检测网络通讯数据,也可以检测其抓取的网络通讯数据快照文件;可 以通过图形界面浏览这些数据,可以查看网络通讯数据包中每一层的 详细内容;Wireshark还拥有许多强大的特性:包含有强显示过滤器语 言和查看TCP会话重构流的能力。它可以支持七百多种协议的解析和 多种媒体类型。

WinpCap 编写抓包程序

WinpCap 编写抓包程序

利用WinpCap 编写抓包程序网友:yeahilly 发布于:2008.05.20 11:12(共有条评论) 查看评论| 我要评论WinpCap是一个公开的免费的抓包驱动加开发包,利用它,可以大大缩短我们的开发周期。

首先,先枚举系统中的所有网卡:/* 获取设备列表*/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(" (%s)\n", d->description);elseprintf(" (No description available)\n");}然后选择网卡,然后设备。

if ( (adhandle= pcap_open_live(d->name, //设备名65536, // 捕捉完整的数据包1 , // 混在模式1, // 读入超时errbuf // 错误缓冲) ) == NULL){printf("Unable to open the adapter");pcap_freealldevs(alldevs);return;}打开设备之后,我们就可以利用adhandle句柄来正式抓包了,先新建一个回调函数,形如void packet_handler(u_char* packets,const struct pcap_pkthdr *header,const u_char *data){}然后调用pcap_loop(adhandle, 0, packet_handler,NULL);pcap_loop的最后一个参数和packet_handler的packets参数是对应的,用于在函数间传递数据。

计算机网络技术与实验——数据包的捕获与分析

计算机网络技术与实验——数据包的捕获与分析

计算机⽹络技术与实验——数据包的捕获与分析计算机⽹络技术与实验——数据包的捕获与分析1. 实验介绍本次实验的⽬的在于学习WinPcap的使⽤⽅法,利⽤它捕获以太⽹中的数据包并进⾏简单的解析,最终使⽤MFC画界⾯,展⽰捕获后解析出来的信息。

2. 使⽤WinPcap + MFC进⾏数据包的捕获与分析2.1 WinPcap简单介绍WinPcap是⼀个开源的数据包捕获体系结构,它的主要功能是进⾏数据包捕获和⽹络分析。

它包括了内核级别的包过滤、低层次的动态链接库(packet.dll)、⾼级别系统⽆关的函数库(wpcap.dll)等。

在编写程序之前我们先按以下步骤配置好WinPcap的开发环境。

下载WinPcap并安装打开VS2015,新建->项⽬->MFC应⽤程序(基于对话框,经典菜单)在项⽬上,右键->属性⼯具->属性->项⽬和解决⽅案-> VC++⽬录->包含⽂件->添加WinPcap开发包中的Include⽬录⼯具->属性->项⽬和解决⽅案-> VC++⽬录->库⽂件->添加WinPcap开发包中的lib⽬录项⽬->项⽬属性->配置属性->预处理定义->添加WPCAP和HAVE_REMOTE项⽬->项⽬属性->配置属性->连接器->命令⾏->附加选项框中加⼊wpcap.lib在程序中要加⼊pcap.h头⽂件#include pcap.h2.2 WinPcap程序设计思路使⽤WinPcap捕获数据包⼀般有三个步骤:获取设备列表打开⽹络适配器在打开的⽹络适配器上捕获⽹络数据包2.2.1 获取设备列表在开发以WinPcap为基础的应⽤程序时,第⼀步要求的就是获取⽹络接⼝设备(⽹卡)列表。

这可以调⽤WinPcap提供的pcap_findalldevs_ex()函数,该函数原型如下:int pcap_findalldevs_ex(char * source; //指定从哪⼉获取⽹络接⼝列表struct pcap_rmauth auth; //⽤于验证,由于是本机,置为NULLpcap_if_t ** alldevs; //当该函数成功返回时,alldevs指向获取的列表数组的第⼀个//列表中每⼀个元素都是⼀个pcap_if_t结构char * errbuf //错误信息缓冲区);在上⾯注释中提到的pcap_if_t结构定义如下:struct pcap_if{struct pcap_if *next; //指向链表中下⼀个元素char *name; //代表WinPcap为该⽹络接⼝卡分配的名字char *description; //代表WinPcap对该⽹络接⼝卡的描述struct pcap_addr* addresses; //addresses指向的链表中包含了这块⽹卡的所有IP地址u_int flags; //标识这块⽹卡是不是回送⽹卡}2.2.2 打开⽹卡在获取设备列表之后,可以选择感兴趣的⽹卡打开并对其上的⽹络流量进⾏监听。

用VC_实现基于Winpcap的网络数据包捕获与分析.

(湖南师范大学数学与计算机学院,湖南长沙410081

要:介绍了TCP/IP协议下网络数据的传输过程,并且分析了数据包的捕获原理,同时概述了WinPcap的
结构组成。最后,使用VC ++编程实现了基于WinPcap的网络数据包捕获和简单分析,并给出了实验结果。
关键词:VC ++;数据包捕获;WinPcap中图分类号:TP312
//从NPF驱动程序读取网络数据报及统计信息
(5//关闭参数中提供的网络适配器,释放相关的ADAPTER结构。
Packet-CloseAdapter(LPADAPTER lpadapter
4数据包分析
利用WinPcap库捕获的数据帧其实是经过传输层、网络层和数据链路层的封装而生成的太网数据帧,因此可以对数据帧作进一步解析。
(3设置网络接口接收到数据报的过滤规则为混杂模式BOOLEAN PacketSetHwFilter(lpadapter,NDIS_PACK-ET_TYPE_PROMISCUOUS
(4开始捕获数据包。pthis->lppa-cketr=PacketAllocate-Packet(//如果运行成功,返回一个_PACKET结构的指针,否则返回NULL。成功返回的结果将会传送到PacketReceivePacket(函数,接收来自驱动的网络数据报。
1所示,由3个模块组成:(1NPF包过滤器,数据包监听设备驱动程序,是架构的核心,它工作在内核级,主要功能是过滤数据包。它直接从数据链路层取得网络数据包,不加修改地传给运行在用户层的应用程序,也允许用户发送原始数据包。
(2Packet.dll是低级的动态连接库,运行在用户级,把应用程序和数据包监听设备驱动程序隔离开来,使得程序可以不加修改地在不同的Windows系统上运行。通过Packet.dll提供的能用来直接访问BPF驱动程序的包驱动API,利用“raw ”模式发送和接收包。不同Windows系统上的

WPCAP教程及常用函数

一些需要知道的细节描述(前言):这一部分展示了如何使用WINPCAP-API的不同的功能,它作为一个使用指南被划分为一系列的课时来带领读者循序渐进的体会PCAP的程序设计的魅力:从简单的基本功能(如获取网卡的列表,数据包的捕获等)到统计和收集网络流量等高级功能。

在这里将提供一些简单但完整的代码作为参考:所有的这些原代码都有和它相关的详细信息的连接以便单击这些功能和数据结构时能够即使跳转到相关的文献。

这些例子是用C语言写的,所以在学习之前首先要有一定的C语言的基础,当然PCAP作为一个网络底层的驱动,要想学好它也必须具备一定的网络方面的知识。

(一)得到网络驱动列表用PCAP 写应用程序的第一件事往往就是要获得本地的网卡列表。

PCAP提供了pcap_findalldevs()这个函数来实现此功能,这个API返回一个 pcap_if结构的连表,连表的每项内容都含有全面的网卡信息:尤其是字段名字和含有名字的描述以及有关驱动器的易读信息。

得到网络驱动列表的程序如下:程序代码: [ 复制代码到剪贴板 ]#include "pcap.h"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(" (%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. Fr ee it */pcap_freealldevs(alldevs);}[code]有关这段程序的一些说明:首先pcap_findalldevs()同其他的libpcap函数一样有一个errbuf参数,当有异常情况发生时,这个参数会被PCAP填充为某个特定的错误字串。

pcap 抓包原理

pcap 抓包原理PCAP 抓包原理PCAP(Packet Capture)是一种网络数据包捕获工具,它可以在网络上截取数据包并进行分析。

在网络安全领域中,PCAP 抓包是一项重要的技术,可以用于网络流量分析、入侵检测、漏洞挖掘等方面。

一、PCAP 抓包的基本原理1. 网络数据传输的基本方式在计算机网络中,数据传输是通过“分组交换”方式实现的。

当一台计算机向另一台计算机发送数据时,数据会被分成多个小块(称为“数据包”或“报文”),每个小块都会被打上目标地址和源地址等信息,并通过网络传输到目标主机。

2. PCAP 抓包的工作流程PCAP 抓包工具可以通过“混杂模式”或“非混杂模式”来截取网络数据包。

其中,“混杂模式”是指抓取所有经过网卡的数据包,“非混杂模式”则只抓取与本机有关的数据包。

具体地说,PCAP 抓包工具需要执行以下步骤:(1)打开网卡:首先需要打开一个网卡接口,以便能够接收和发送网络数据。

(2)设置过滤规则:为了避免大量无用的数据包干扰分析,需要设置过滤规则,只抓取符合条件的数据包。

(3)开始捕获:启动 PCAP 抓包程序后,开始捕获网络数据包。

(4)停止捕获:当需要停止抓包时,可以使用命令或者手动操作停止数据捕获。

(5)保存数据:将捕获到的数据保存到文件中,以便后续进行分析和处理。

二、PCAP 抓包的技术原理1. 网卡工作原理网卡是计算机与网络之间的接口设备,它负责将计算机发送出去的数据转换成网络可识别的格式,并将接收到的网络数据转换成计算机可识别的格式。

网卡通过硬件电路实现了对网络数据包的截取和传输功能。

2. 数据链路层协议在 OSI 模型中,第二层是“数据链路层”,它负责在物理层上建立逻辑连接,并通过 MAC 地址来识别不同主机之间的通信。

PCAP 抓包工具利用了这一特性,在数据链路层上截取和分析网络数据包。

3. WinPcap 和 Libpcap 库WinPcap 是一个基于 Windows 平台开发的 PCAP 抓包库,它提供了一套 API 接口,可以用于捕获和分析网络数据包。

WinPcap 教程

WinPcap 教程: 循序渐进教您使用WinPcap本节将向您展示如何使用WinPcap API的一些特性。

这部分教程细化成若干节课,以循序渐进的方式介绍给读者,让读者从最基本的部分(获得设备列表)到最复杂的部分(控制发送队列并收集和统计网络流量)来了解如何使用WinPcap进行程序开发。

有时,我们会给出一些简单使用的代码片断,但同时,我们提供完整程序的链接:所有的源代码包含一些指向手册其他地方的链接,这可以让您很方便地通过点击鼠标来跳转到您想查看的函数和数据结构的内容中去。

范例程序都是用纯C语言编写, 所以,掌握基本的C语言编程知识是必须的,而且,这是一部关于处理原始网络数据包的教程,因为,我们希望读者拥有良好的网络及网络协议的知识。

用Microsoft Visual C++ 创建一个使用wpcap.dll 的应用程序,需要按一下步骤:∙在每一个使用了库的源程序中,将pcap.h 头文件包含(include)进来。

∙如果你在程序中使用了WinPcap中提供给Win32平台的特有的函数,记得在预处理中加入WPCAP 的定义。

(工程->设置->c/c++->预处理程序定义中添加WPCAP)∙如果你的程序使用了WinPcap的远程捕获功能,那么在预处理定义中加入HAVE_REMOTE。

不要直接把remote-ext.h直接加入到你的源文件中去。

(工程->设置->c/c++->预处理程序定义中添加HAVE_REMOTE)∙设置VC++的链接器(Linker),把wpcap.lib库文件包含进来。

wpcap.lib可以在WinPcap 中找到。

∙设置VC++的链接器(Linker),把ws2_32.lib库文件包含进来。

这个文件分布于C的编译器,并且包含了Windows的一些socket函数。

本教程中的一些范例程序,会需要它。

获取设备列表通常,编写基于WinPcap应用程序的第一件事情,就是获得已连接的网络适配器列表。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.int pcap_findalldevs(pcap_if_t **, char *)说明:用来获得网卡的列表参数:指向pcap_if_t**类型的列表的指针的指针; char型指针,当打开列表错误时返回错误信息返回值: 为int型,当显示列表失败时返回-1pcap_if_t 是pcap_if 重命名而来:typedef struct pcap_if pcap_if_t;pcap_if结构体如下:struct pcap_if{struct pcap_if *next; /*多个网卡时使用来显示各个网卡的信息*/char *name; /* name to hand to "pcap_open_live()" */char *description; /* textual description of interface, or NULL 就是网卡的型号、名字等*/struct pcap_addr *addresses; //pcap_addr 结构体bpf_u_int32 flags; /* PCAP_IF_ interface flags 接口标志*/};pcap_addr 结构体如下:struct pcap_addr{struct pcap_addr *next;struct sockaddr *addr; /* address */struct sockaddr *netmask; /* netmask for that address 子网掩码*/struct sockaddr *broadaddr; /* broadcast address for that address 广播地址*/struct sockaddr *dstaddr; /* P2P destination address for that address P2P目的地址 */ };举例:pcap_if_t *alldevs;pcap_if_t *d;char errbuf[64];if (pcap_findalldevs(&alldevs, errbuf) == -1)/* 这个API用来获得网卡的列表*/{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);elseprintf(" (No description available)\n");}用pcap_findalldevs不能获得网卡的MAC,有两种方法可以实现,一、向自己发送arp包,二、使用IPHelp的API 可以获得。

2. void pcap_freealldevs(pcap_if_t *)说明:与int pcap_findalldevs(pcap_if_t **, char *)配套使用,当不再需要网卡列表时,用此函数free释放空间参数:打开网卡列表时申请的pcap_if_t型的指针举例:pcap_freealldevs(alldevs);3. pcap_t *pcap_open_live(const char * device, int snaplen, int promisc, int to_ms, char ebuf *)说明:被用来得到一个包抓取得描述符参数:device是一个指出要抓取的网络设备的字符串。

snaplen指明最大可抓取的字节长度。

promisc置位表明该接口要被设置成混杂模式。

to_ms以毫秒为单位设置超时时间。

当在超时时间内网卡上没有数据到来时对网卡的读操作将返回(如 pcap_dispatch() or pcap_next_ex()等函数)。

ebuf被用来存放当pcap_open_live()调用失败时,返回的错误字符串。

返回值: pcap_t型的指针,供pcap_dispatch() or pcap_next_ex()等函数调用。

pcap_t的结构体:struct pcap {#ifdef WIN32ADAPTER *adapter;LPPACKET Packet;int timeout;int nonblock;#elseint fd;#endifint snapshot;int linktype;int tzoff; /* timezone offset */int offset; /* offset for proper alignment */struct pcap_sf sf;struct pcap_md md;int bufsize; /* Read buffer. */u_char *buffer;u_char *bp;int cc; //Place holder for pcap_next().u_char *pkt; //Placeholder for filter code if bpf not in kernel.struct bpf_program fcode;char errbuf[PCAP_ERRBUF_SIZE + 1];int dlt_count;int *dlt_list;#ifdef REMOTE/*! \brief '1' if we're the network client; needed by several functions (like pcap_setfilter() ) to know ifthey have to use the socket or they have to open the local adapter. */int rmt_clientside;SOCKET rmt_sockctrl; //!< socket ID of the socket used for the control connection SOCKET rmt_sockdata; //!< socket ID of the socket used for the data connectionpthread_t rmt_threaddata; //!< handle to the receiving thread, we need to kill it in case of 'pcap_clos()'int rmt_flags; //!< we have to save flags, since they are passed by the pcap_open_live(), but they are used by the pcap_start capture()int rmt_capstarted; //!< 'true' if the capture is already started (needed to knoe if we have to call the pcap_startcapture()struct pcap_pkthdr pcap_header; //!< In Linux, you have to copy the packet headers another time before giving them to the user#endif};举例:/* Open the adapter */if ( (adhandle= pcap_open_live(d->name, // name of the device65536, // portion of the packet to capture. 65536 grants that the whole packet will be captured on all the MACs.1, // 混杂模式1000, // 设置超时时间,亳秒为单位errbuf // 发生错误时存放错误内容的缓冲区) ) == NULL){fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n");pcap_freealldevs(alldevs);return -1;}4. int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user);说明:捕获数据包;不会响应pcap_open_live()中设置的超时时间参数:p是由pcap_open_live()返回的所打开网卡的指针cnt用于设置所捕获数据包的个数packet_handler是与void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)配合使用的一个参数。

回调函数。

user值一般为NULL举例:pcap_loop(adhandle, 0, packet_handler, NULL);void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data){struct tm *ltime;char timestr[16];ltime=localtime(&header->_sec); /* 将时间戳转变为易读的标准格式*/strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);printf("%s,%.6d len:%d\n", timestr, header->_usec, header->len);。

相关文档
最新文档