Winpcap编程(last).ppt
《Winpcap编程(last).ppt》由会员分享,可在线阅读,更多相关《Winpcap编程(last).ppt(58页珍藏版)》请在三一办公上搜索。
1、WinPcap编程,内容提要,什么是WinPcap WinPcap的结构WinPcap编程环境配置数据结构WinPcap编程,1.什么是WinPcap,当应用程序需要访问原始数据包,即没有被操作系统利用网络协议处理过的数据包时,socket无法满足需要,WinPcap为Win32应用程序提供这种访问方式。WinPcap提供了以下功能 捕获原始数据包,无论它是发往本机的,还是在其他设备(共享媒介)上交互的 在数据包递交给某应用程序前,根据用户指定的规则过滤数据包 将原始数据包通过网络发送出去 收集并统计网络流量信息,1.什么是WinPcap?,1.什么是WinPcap?,基于WinPcap的典型
2、应用网络与协议分析器(network and protocol analyzers)网络监视器(network monitors)网络流量记录器(traffic loggers)网络流量发生器(traffic generators)用户级网桥及路由(user-level bridges and routers)网络入侵检测系统(network intrusion detection systems(NIDS)网络扫描器(network scanners)安全工具(security tools),1.什么是WinPcap?,什么是WinPcap做不到的?WinPcap不能阻止、过滤或操纵同一机器
3、上的其他应用程序的通讯:它仅仅能简单地“监视”在网络上传输的数据包。所以,它不能提供以下支持:网络流量控制服务质量调度个人防火墙,1.什么是WinPcap,2.WinPcap的结构,2.1 WinPcap组成,WinPcap is an architecture for packet capture and network analysis for the Win32 platforms.It includes a kernel-level packet filter(NPF),a low-level dynamic link library(packet.dll),and a high-le
4、vel and system-independent library(wpcap.dll).,设备驱动-数据捕获-数据发送-可编程的过滤系统-监听引擎-,接口,2.1 WinPcap组成-Packet.dll,packet.dll(Packet Driver API)提供了一个底层的API访问接口,可以直接访问网卡,为win32平台提供了一个公共的接口。,2.1 WinPcap组成-Packet.dll,功能安装,启动和停止NPF设备驱动 从NPF驱动接收数据包 通过NPF驱动发送数据包 获取可用的网络适配器列表 获取适配器的不同信息,比如设备描述,地址列表和掩码 查询并设置一个低层的适配器参
5、数two versions of packet.dll the first one runs under Windows 95/98/ME the second one is for Windows NT/2000/XP.说明:以系统独立的方式访问网卡,开发的应用程序在不同的Windows系统上运行不需重新编译(向后兼容)透明处理NPF驱动,2.1 WinPcap组成-Wpcap.dll,Wpcap.dll(wpcap,libpcap)不依赖于操作系统,与libpcap兼容,提供了更加高层、抽象的函数。,2.1 WinPcap组成-Wpcap.dll,功能获取网络适配器列表 获取网络适配器的不
6、同信息,比如网卡描述和地址的列表 捕获数据包 发送数据 有效保存数据包到磁盘创建一个数据包过滤器把它们应用到数据捕获中去,2.1 WinPcap组成-NPF,NPF(Netgroup Packet Filter)一个数据报捕捉系统需要不经过系统协议栈的实现直接访问网络上传输的原始数据,这种功能的实现需要在系统内核运行组件与网卡直接打交道,由于需要与系统交互,因此与操作系统的依赖性非常强,对于不同的操作系统,都需要提供不同版本的NPF与系统交互。,2.1 WinPcap组成,NPF的位置NPF is implemented as a protocol driver,2.1 WinPcap组成,N
7、PF功能:数据捕获 流量监测 数据发送 dump to disk,1.什么是WinPcap,2.WinPcap的结构,3.WinPcap编程环境配置,Winpcap的安装,下载安装包和开发包 http:/winpcap.polito.it Winpcap的安装包(Winpcap4_0_2.exe)程序员开发包(WpdPack4_0_2.zip)运行Winpcap4_0_2.exe 测试安装结果,VC6.0编程环境设定,1.运行Visual C+6.0,打开WpdPack_3_1WpdPackExamples-pcap下的任一项目(本例用basic_dump目录下 basic_dump.dsw)
8、2.在“工程-设置 Link对象/库模块”中加入 wsock32.lib ws2_32.lib wpcap.lib 在“工具-选择-目录”的include files和library files设置中引入winpcap开发包中的Include和Lib目录3.编译,运行,环境配置,典型错误:VC6.0 编译不通过,下载4.0.1版本的WinPcap安装包和开发包,更新VC6.0的SDK,使用VS2005,OR,OR,1.什么是WinPcap,2.WinPcap的结构,4.数据结构,3.WinPcap编程环境配置,3 数据结构,网卡接口信息typedef struct pcap_if pcap_i
9、f_t struct pcap_if struct pcap_if*next;/指向下一个接口结构 char*name;/设备名,打开设备时使用 char*description;/设备的描述信息 struct pcap_addr*addresses;/指向地址链表的第一个地址 bpf_u_int32 flags;/接口标志;,接口地址信息struct pcap_addr struct pcap_addr*next;/指向下一个地址struct sockaddr*addr;/指向sockaddr类型的结构struct sockaddr*netmask;/指向addr相应的掩码struct so
10、ckaddr*broadaddr;/addr相应的广播地址struct sockaddr*dstaddr;/与addr对应的目标地址,如非点到点,则为NULL;,3 数据结构,接口地址数据结构,struct sockaddr u_short sa_family;char sa_data14;struct sockaddr_in short sin_family;u_short sin_port;struct in_addr sin_addr;char sin_zero8;,接口地址数据结构,struct in_addr union struct u_char s_b1,s_b2,s_b3,s_
11、b4;S_un_b;struct u_short s_w1,s_w2;S_un_w;u_long S_addr;S_un;,3 数据结构,捕捉实例typedef struct pcap pcap_t 一个已打开的捕捉实例的描述符。这个结构体对用户来说是不透明的,它通过wpcap.dll提供的函数,维护了它的内容。在打开网卡后作为捕获接口设备的标识。,libpcap dump文件头结构 struct pcap_file_header bpf_u_int32 magic;/标识位,是16进制的0 xa1b2c3d4 u_short version_major;/主版本号,0X02 u_short
12、version_minor;/次版本号,ox04 bpf_int32 thiszone;/时区校正,0 x0 bpf_u_int32 sigfigs;/时间戳精度,0X0 bpf_u_int32 snaplen;/包的最大存储长度,0 x0000ffff bpf_u_int32 linktype;/链路类型,以太网0 x00000001;,3 数据结构,3 数据结构,包描述头:dump文件中每个数据包的头部描述信息。struct pcap_pkthdr struct timeval ts;/时间戳bpf_u_int32 caplen;/数据包保存在pcap文件中的实际长度,以字节为单位bpf_
13、u_int32 len;/所抓获的数据包的真实长度,如果文件中保存不是完整的数据包,那么这个值可能要比前面的数据包长度的值大。;struct timeval DWORD GMTtime;/秒计时:32位,用来记录数据包抓获的时间,记录方式是记录从格林尼治时间的1970年1月1日 00:00:00 到抓包时经过的秒数 DWORD microTime;/毫秒计时:32位,抓取数据包时的毫秒值,1.什么是WinPcap,2.WinPcap的结构,5.WinPcap编程,4.数据结构,3.WinPcap编程环境配置,使用winpcap.dll编程,1、获取设备列表 int pcap_findallde
14、vs(pcap_if_t*alldevsp,char*errbuf)功能:返回本机所有的网络接口设备。当用户无法了解自己机器的接口设备时在程序的首部调用该函数。输入参数:两个参数全为空值(出口参数)返回:失败返回-1,errbuf中包含错误信息。成功则alldevsp中包含全部网络接口设备。举例:使用WPcap获得设备列表,释放设备列表,voidpcap_freealldevs(pcap_if_t*alldevsp),功能:释放一个由pcap_findalldevs()生成的接口列表,#include pcap.hint main()pcap_if_t*alldevs;pcap_if_t*d;
15、int i=0;char errbufPCAP_ERRBUF_SIZE;/*Retrieve the device list from the local machine*/if(pcap_findalldevs(,/*Print the list*/for(d=alldevs;d!=NULL;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!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Winpcap 编程 last
链接地址:https://www.31ppt.com/p-6523769.html