- 7
- 0
- 约9.01千字
- 约 10页
- 2017-01-01 发布于重庆
- 举报
利用Winpcap捕获发送数据包.
利用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
您可能关注的文档
- 动物生理学 考研农学联考 第十章 内分泌系统.doc
- 质量管理部门从监督部门角色转变为服务部门角色思考.docx
- 利率变动对股市的影响..doc
- 医院岗位职责汇编—行政后勤科室.doc
- 利率市场化背景下银行个人存款管理战略..doc
- 利用BGP虚拟下一跳技术实现IP骨干网流量负载均衡..doc
- 利用COORD进行坐标系转换..doc
- 动物病理学期末复习.docx
- 心血管功能活动的调节和急性心力衰竭论文.doc
- 利用Matlab实现Romberg数值积分算法----系统建模与仿真结课作业..docx
- 伟明环保-市场前景及投资研究报告-境内业务稳健运行,印尼市场贡献边际增量.pdf
- 桂东县法院系统招聘考试真题2025.pdf
- 贵州省黔南布依族2026年中考三模物理试题及答案.pdf
- 贵州省黔南州2026年中考语文二模试卷附答案.pdf
- 贵州省铜仁市2026年中考语文二模试卷附答案.pdf
- 2026上半年安徽事业单位联考合肥市庐江县招聘36人备考题库及一套完整答案详解.docx
- 贵州省毕节市2026年中考语文一模试卷附答案.pdf
- 贵州省贵阳市南明区2026年中考语文一模试卷附答案.pdf
- 2026上半年安徽事业单位联考合肥市庐江县招聘36人备考题库及一套参考答案详解.docx
- 贵州省贵阳市白云区2026年中考二模物理试题附答案.pdf
最近下载
- 浙江省温州市2025-2026学年高三年级上学期期末质量评价语文试卷.docx VIP
- 门窗加工安全操作规程手册.docx VIP
- 人体表面放射性污染去污处理对策研究.docx VIP
- HAIER 海尔 海尔Haier冰箱 BCD-649WE 说明书.pdf
- 公共机构节水管理规范.doc VIP
- 如何找回误删微信好友,微信好友一键恢复.doc VIP
- 2012韩山师范学院专升本插班生考试《数据结构》试卷.pdf VIP
- Dragons: Riders of Berk《驯龙记:伯克岛的龙骑手(2012)》第一季第六集完整中英文对照剧本.docx VIP
- 供电设备、供水设备运行维护管理方案.pdf VIP
- 股票操作手册.pdf VIP
原创力文档

文档评论(0)