【笔记】wincap发送数据包
来源:互联网 发布:见兄自然知悌什么意思 编辑:程序博客网 时间:2024/05/16 12:18
尽管从 WinPcap 的名字上看,这个库的目标应该是数据捕捉(Packet Capture),然而,它也提供了针对很多其它有用的特性。在其中可以找到一组很完整的用于发送数据包的函数。
请注意:原始的libpcap库是不支持发送数据包的,因此,这里展示的函数都属于是WinPcap的扩展,并且它们不能运行于Unix平台下。
一、使用pcap_sendpacket()发送单个数据包
下面的代码展示了发送一个数据包的最简单的方式。打开适配器以后,调用pcap_sendpacket()来发送手工制作的数据包。pcap_sendpacket()的参数有一个要包涵发送数据的缓冲区,缓冲的长度,以及用来发送数据的适配器。
注意,缓冲数据将直接发送到网络,而不会进行任何加工和处理。这就意味着应用程序需要创建一个正确的协议首部,来使这个数据包更有意义。
程序源代码:
二、发送队列 pcap_sendpacket() 提供了一种简单而直接的方法来发送单个数据包,而send queues则提供了一种高级的,强大的,结构更优的方法来发送一组数据包。发送队列是一个容器,它能容纳不同数量的数据包,这些数据包将被发送到网络上。队列有大小,它代表了它能存储的数据包的最大数量。 发送队列通过调用pcap_sendqueue_alloc()函数创建,并且需要指定队列的大小。 一旦发送队列被创建,pcap_sendqueue_queue()就可以将数据包添加到发送队列中。这个函数的参数包含一个 pcap_pkthdr 的结构体,它包含时间戳和长度,同时,参数还包含一个指向数据包数据的缓冲。这些参数和那些被 pcap_next_ex() 和 pcap_handler()接收到的数据相同,因此,为那些刚刚捕获到的,或是从文件读取出来的数据包排队,就相当于把三个参数传递给pcap_sendqueue_queue()。 WinPcap提供了pcap_sendqueue_transmit()函数来发送一个队列。请注意第三个参数:如果非零,那么发送过程将是同步进行,也就是说,只有时间戳相符的数据包才会被处理。这个操作需要消耗大量的CPU资源,因为同步操作由内核驱动中的"忙等 (busy wait)"循环来实现的。尽管这个操作对CPU的要求很高,但它对包传送的处理结果,通常是很精确的。(通常在数微秒左右,或更小) 请注意,使用pcap_sendqueue_transmit()要比pcap_sendpacket()来发送一系列数据更加有效率,因为发送队列保存在内核级的缓冲区,因此,减少了上下文交换的次数。 当队列不再需要时,我们可以使用pcap_sendqueue_destroy()来释放它所占用的内存。 下一个程序将演示如何使用发送队列。先用pcap_open_offline()打开一个捕获文件,然后,将文件中的数据包移到已分配的发送队列。这时,就可以发送队列了,如果用户指定了同步,那么它将同步发送队列。 注意,堆文件的链路层将会那些发送数据包接口中的一个进行比较,那些接口使用pcap_datalink()发送数据包。当比较的结果不相同,那么就会打印出警告信息。捕获文件的链路层和适配器的链路层相一致是非常重要的,不然,发送将变得毫无意义。
- 【笔记】wincap发送数据包
- wincap数据包发送1
- 【笔记】wincap网络数据包的过滤与分析
- WinCap数据包显示
- wincap网络数据包的捕获
- 【笔记】wincap网络数据包的捕获——使用函数回调
- 【笔记】wincap网络数据包的捕获——不使用回调的方式
- WinPcap笔记:VisualStudio2015配置WinCap
- 发送数据包:
- 发送数据包
- 【笔记】wincap得到网络驱动列表
- 【笔记】wincap处理脱机堆文件
- 【笔记】wincap收集并统计网络流量
- 【笔记】wincap收集并统计网络流量
- WinPcap笔记(1):VisualStudio2015配置WinCap
- 如何发送icmp数据包
- 多网卡发送数据包
- 发送udp数据包
- meta 解析
- 页面加载进度条
- CSS float
- Spring MVC 表单提交中需注意的问题
- mxmlc 参数列表
- 【笔记】wincap发送数据包
- 我的新BLOG
- 我的日记2009
- Bash命令行处理[详解]——转贴
- ARM GCC工具链有关的使用总结
- 【笔记】wincap收集并统计网络流量
- Linux内核模块/驱动编程基础
- Pocket PC Dialog Full Screen
- ucos-ii ARM几种移植版本