随笔分类 -  驱动开发

详述IP数据包的转发流程
摘要:IP数据包的转发流程1)IP数据包到达网络层之后,首先根据目的IP地址得到目的网络号,然后决定是直接交付还是转发数据包。如果网络号不匹配,需要转发数据包,则跳到3);2)将数据包转发给目的主机;3)首先根据目的IP地址在路由表(转发表)中查找下一跳IP地址;4)然后在路由器的ARP高速缓存表中查找下一跳IP地址对应的MAC地址,如果找到下一跳路由器的MAC地址,则将查到的MAC地址填入数据帧的首部6字节(即更新链路层的数据帧);如果ARP高速缓存表中不存在此IP地址,则通过向当前局域网内广播一个ARP分组来请求下一跳路由器的MAC地址。ARP请求分组广播出去后,只有下一跳路由器会对此请求分组做 阅读全文

posted @ 2009-11-19 17:52 wolflion 阅读(2044) 评论(0) 推荐(0)

WinPcap编程4——捕获数据包
摘要:winpcap程序中,捕获数据包主要分为如下几步:获取网络适配器列表打开网络适配器捕获数据获取网络适配器列表在前文中已经讲述,这里就不再累述了。打开设备的函数是pcap_open()。下面是参数 snaplen, flags 和 to_ms 的解释说明 snaplen 制定要捕获数据包中的哪些部分。 在一些操作系统中 (比如 xBSD 和Win32), 驱动可以被配置成只捕获数据包的初始化部分:这样可以减少应用程序间复制数据的量,从而提高捕获效率。本例中,我们将值定为65535,它比我们能遇到的最大的MTU还要大。因此,我们确信我们总能收到完整的数据包。 flags: 最最重要的flag是用来 阅读全文

posted @ 2009-04-18 18:58 wolflion 阅读(338) 评论(0) 推荐(0)

WinPcap编程1——简介
摘要:什么是WinPcapWinPcap是一个基于Win32平台的,用于捕获网络数据包并进行分析的开源库. 大多数网络应用程序通过被广泛使用的操作系统元件来访问网络,比如sockets。 这是一种简单的实现方式,因为操作系统已经妥善处理了底层具体实现细节(比如协议处理,封装数据包等等),并且提供了一个与读写文件类似的,令人熟悉的接口。 然而,有些时候,这种“简单的方式”并不能满足任务的需求,因为有些应用程序需要直接访问网络中的数据包。也就是说,那些应用程序需要访问原始数据包,即没有被操作系统利用网络协议处理过的数据包。 WinPcap产生的目的,就是为Win32应用程序提供这种访问方式; Wi... 阅读全文

posted @ 2009-04-18 18:57 wolflion 阅读(228) 评论(0) 推荐(0)

WinPcap编程3——获取网络适配器列表
摘要:WinPcap应用程序的第一件事情就是获得已连接的网络适配器列表。WinPcap提供了pcap_findalldevs_ex() 函数来实现该功能: 它返回一个pcap_if结构的链表,每个这样的结构都包含了一个适配器的详细信息。下列代码能获取适配器列表,并在屏幕上打印出其名称和描述信息,如果没有找到适配器,将打印错误信息。#include "pcap.h" main(){pcap_if_t *alldevs;pcap_if_t *d;int i=0;char errbuf[PCAP_ERRBUF_SIZE];/* 获取本地机器设备列表*/if (pcap_findalld 阅读全文

posted @ 2009-04-18 18:57 wolflion 阅读(257) 评论(0) 推荐(0)

WinPcap编程2——环境搭建
摘要:搭建WinPcap编程环境可以分为如下几步:1.下载winpcap及开发包。winpcap下载地址:http://www.winpcap.org/install/default.htmwinpcap开发包: http://www.winpcap.org/devel.htm2. 安装winpcap3. 解压winpcap开发包,将得到一个WpdPack目录,该目录中包含了5个子目录:docs、Examples-pcap、Examples-remote、Include和Lib。docs中是winpcap的帮助文档,比较通俗易懂。Examples的是一些例子include和lib则分别为C++项目的 阅读全文

posted @ 2009-04-18 18:54 wolflion 阅读(216) 评论(0) 推荐(0)

导航