WinPcap基础知识(第四课:不用回调函数来捕捉数据包)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

这节课程中的例子程序完成的功能和上节课的一样,但是使用的是pcap_next_ex()而不是pcap_loop().
 基于回调捕获机制的 pcap_loop()是非常优雅的,在很多情况下都是一个不错的选择。不过,有时候处理一个回调函数显得不太现实 --- 通常这会使程序更加复杂,在使用多线程或者c++类的时候尤其如此。
 在这种情况下,可以直接调用 pcap_next_ex() 来返回一个数据包 -- 这样程序员可以在仅仅想使用它们的时候再处理 pcap_next_ex() 返回的数据包。
 这个函数的参数和回调函数 pcap_loop() 的一样 -- 由一个网络适配器描述符作为入口参数和两个指针作为出口参数,这两个指针将在函数中被初始化,然后再返回给用户(一个指向pcap_pkthdr 结构,另一个指向一个用作数据缓冲区的内存区域)。
 在下面的程序中,我们继续使用上一节课中的例子的数据处理部分的代码,把这些代码拷贝到main()函数中pcap_next_ex()的后面。

 

 

 

疑问:没有完全体现出好控制的特征

 

感觉也只是点点,可以设置一个变量,来控制是否接收下一个数据包,这点还是可以做到得,不过这里是因为数据包太多了,一般不会出现问题。

关于pcap_next_ex()方法,文档里面没有介绍是阻塞得还是非阻塞,个人认为是阻塞得,也就是说从开始执行,一直倒接收倒一个包才返回。尽管这里是阻塞得,但是设置一个变量每次检查一下,看看是否是用户要求关闭接收,这个操作还是没什么问题。不会出现虽然用户设置了停止阻塞得标志位,但是由于此方法是阻塞的,因为等不到数据包而一直没有响应用户,因为这里有一个事实大家应该明白,网上发送的数据包时时刻刻都在。

 

注意:之所以要使用pcap_next_ex()而不使用pcap_next()是因为pcap_next()有些非常讨厌的限制。首先,他不是很有效的方法,因为它隐藏了回调方法,但是还是依靠pcap_dispatch()。第二,它不能探测出EOF,所以在合并文件时它几乎没用。

 

 

     另外,pcap_next_ex()方法的返回值可以给用户很多的提示,对应的所有可能情况。

转自:http://wotseb.bokee.com/1419069.html

libpcap抓包延时问题分析 按照上面的描述就会有个问题,如果抓取的网络包不是连续的,就会是的pcap_loop进入阻塞模式,如果这个时候有网络数据包过来,触发处理包的回调函数会有约一分钟的延时,对于实时系统或者类似Wireshark、Tcpdump等工具那就能立即反应的系统来说很不实用,因此上述方式并不实用与这种场景。因此,如果没有数据包到达,pcap_loop函数就会一直等待。在默认情况下,pcap_loop函数的超时时间是1秒,也就是说,如果1秒内没有数据包到达,pcap_loop函数就会返回,然后再次等待。函数之前是不可用的。 阅读详情

相关推荐

WinPcap pcap_next_ex抓包

使用pcap_next_ex抓包 // pcap_next_ex.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #define HAVE_REMOTE #include #pragma comment(lib,"wpcap.lib") int _tmain(int argc, _TCHAR* argv[]) { pcap_if_t *alld

十年磨一剑,霜刃未曾试! 8524

NPcap捕获数据包pcap-next-ex

从指定网卡上读取数据包,如果读取数据包没有问题,则 pkt_header 参数指向的指针将设置为指向数据包pcap_pkthdr结构,pkt_data参数指向的指针将设置为指向数据包中的数据

使用pcap捕捉网络数据包

说明:正在边学习边整理,主要是运行一下文档中提供的示例程序,如果有需要学习使用pcap,建议直接阅读winpcap文档。资料:1、WinPcap文档:http://www.winpcap.org/  2、google、baidu环境:windows环境:vs2008、windows7、WpdPack_4_1_2linux环境:(现在只有windows上的运行结果,linux上运行情况以后补充。)准备:libpcapWinPcap是用于抓取网络数据的函数库。libpcap是Unix上的实现,WinPcap

study_together的专栏 3263

pcap抓包库部分函数说明

学习通过侦听网卡获取报文的程序,遇到部分pacp抓包库中的函数,在查阅资料后,作以下整理说明: 1. pcap_next_ex(): 基于非回调函数的捕获数据包,参数有三个,一个网卡描述符,两个指针,两个指针会被初始化并返回给用户,一个是pcap_pkthdr结构,一个是接收数据的缓冲区。pcap_pkthdr结构如下所示: struct pcap_pkthdr {       struc

lyl4301203的专栏 4496

pcap_next_ex() 捕获数据包

从指定网卡抓包

张张的博客 1350

Winpcap学习

文章目录前言一、常用函数二、使用步骤1.引入库2.读入数据总结 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、常用函数 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 //定义的数据结构 typedef struct pcap_if pcap_if_t; struct pcap_if { struct pcap_if *next; char *name; char *description; ..

weixin_45090728的博客 576

C++ winpcap网络抓包代码实现,以及抓包内容解析。

C++ winpcap网络抓包代码实现,以及抓包内容解析。 c++实现抓包代码 1.安装winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它用于windows系统下的直接的网络编程。Winpcap提供了一个强大的编程接口,它很容易地在各个操作系统之间进行移植。 百度网盘: 链接:https://pan.baidu.com/s/1ot7H3Vz_KBvdmYKjJqu

qq_34481573的博客 1万+

使用Winpcap示例程序的时候,会出现很多错误。

WINPCAP编程环境设置2008-05-19 12:41一、WINPCAP编程环境设置在正式WinPcap编程之前,要配置运行环境。1、运行环境设置Win32 平台下WinPcap应用程序需要以下四个动态链接库才能正常运行:wpcap.dll Packet.dll WanPacket.dll pthreadVC.dll这四个动态链接库在WinPcap驱动程序里。如果没有这

Meinherz的专栏 5084

WinPcap编程【6】过滤、分析数据包

WinPcapLibpcap的最强大的特性之一,是拥有过滤数据包的引擎。 它提供了有效的方法去获取网络中的某些数据包,这也是WinPcap捕获机制中的一个组成部分。 用来过滤数据包的函数是 pcap_compile() pcap_setfilter()pcap_compile() 它将一个高层的布尔过滤表达式编译成一个能够被过滤引擎所解释的低层的字节码。有关布尔过滤表达式的语法可以

6698

WinPcap基础知识(第三课:打开一个适配器捕捉数据包

现在我们已经知道了怎样去获取一个适配器并使用它,让我们开始真正的工作-----开始抓取网络数据包吧。在这一课中我们将写一个程序,这个程序将在我们选择的适配器上监听,并抓取通过这个适配器上的每一个数据包,打印其中的一些信息。 我们主要使用的函数是pcap_open(),这个函数的功能是打开一个抓取设备。在这里有必要对其中的几个参数snaplen, flags and to_ms作一下说明。 snap

qsycn的专栏 3018

WinPcap编程(二)

0. 这一次具体讲抓包的两种方法。 (建议)清除ARP表,最好自己写个批处理命令。快一点。 1.0 抓包步骤 步骤很简单:先打开适配器列表 --> 选择适配器 --> 通过遍历链表的方式到达你选择的适配器位置 --> 打开设备 --> 开始抓包。 每一个步骤都是一个函数。了解步骤,后面就好办。 首先,了解一个数据类型pcap/pcap_t。它代表...

azy67351的博客 320

好工具推荐系列:Wireshark v3.x可以捕捉本地数据了,WinPcap已替换为NPcap

Wireshark早期版本不支持抓取本地回环数据 在进行通信开发的过程中,我们往往会把本机既作为客户端又作为服务器端来调试代码,使得本机自己自己通信。但是wireshark早期的版本是无法抓取到本机数据包的。Windows系统没有提供本地回环网络的接口,用wireshark早期版本监控网络的话只能看到经过网卡的流量,看不到访问localhost的流量,因为wireshark早期版本在windo...

$firecat利白的代码足迹$ 5746

利用Java进行网络数据包捕捉

http://jnetpcap.com/examples 在上一期的栏目中我们介绍了通过Fiddler嗅探Http协议网络数据包的方法,并且在文章最后通过开心农场的例子来展示网络嗅探的基本操作。但手工获得数据毕竟耗时耗力,颇为麻烦,不妨将这个工作交给电脑,写一个程序让电脑在点击好友的时候自动嗅探到信息数据包并进行处理。这期我们就来介绍一下如何在Java平台下通过第三方包来进行底层网络

biran1980的专栏 6124

Windows下使用winpcap-2.2arp探测局域网内主机(接收并解析arp数据包

上篇文章我们成功发送了arp请求,这里我们就需要等待并看看能不能收到来自我们需探测ip的arp回复,如果收到,则该主机为活动的,因为这个等待arp返回需要等待一段时间,这里我之间写出来,实际用的时候,你们需要写成线程,并在发送arp请求之前调用。 定义需要的变量 pcap_if_t * alldevs; pcap_if_t *d; pcap_t * adhandle;//定义包捕捉句柄

dyplm123的博客 2547

基于WinPcap的Wireshark/tcp包的抓取实现

获得设备列表 pcap_findalldevs_ex,然后从设备列表中跳转到某个设备,并带开适配器。 调用pcap_datalink是为了减少数据包的数量:过滤掉不属于以太网的包。之后再设置过滤器,这里只是为了抓取 ip tcp 的包 char packet_filter[] = "ip and tcp"; 由于使用回调函数是由数据包捕获驱动直接控制,所以用户程序是无法直接控制的。这里我

For free 6724

一步一步尝试在MFC下开发基于winpcap数据包捕获分析软件.(开发总结,建议先看)

随便转载,转载请注明出处http://blog.csdn.net/leotangcw/欢迎大家我交流QQ:17371764     Email:tangchengwen@163.com        花了两天时间终于把这个软件的大体开发思路代码写完了,不过由于内容比较多,没法一点一点的仔细讲清楚开发的具体步骤(打字太慢了)在这里总结一下:       开发 基础:       

leotangcw的专栏 9433

WINPCAP编程环境设置

一、WINPCAP编程环境设置 在正式WinPcap编程之前,要配置运行环境。 1、运行环境设置 Win32 平台下WinPcap应用程序需要以下四个动态链接库才能正常运行:wpcap.dll Packet.dll WanPacket.dll pthreadVC.dll 这四个动态链接库在WinPcap驱动程序里。 如果没有这个驱动程序,需要到WinPcap官方网站上下载,下载地址为:w

guoduhua的专栏 679

计算机网络课程设计--基于winpcap实现简单的抓包

山东大学计算机网络课程设计 基于winpcap实现网络编程 实现网络抓包

路过夏天 6472
上一篇: WinPcap基础知识(第三课:打开一个适配器捕捉数据包)
下一篇: WinPcap基础知识(第五课:过滤信息)
qsycn
博客等级 码龄17年 84粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值