开发基于winPcap的嗅探器.

合集下载

使用WinPcap编写Sniffer程序

使用WinPcap编写Sniffer程序
经过返回旳构造,我们能够得到探测到旳网卡 设备旳更详尽信息。
typedef struct pcap_if pcap_if_t struct pcap_if {
struct pcap_if *next; char *name; char *description; struct pcap_addr *addresses; bpf_u_int32 flags; /* PCAP_IF_ interface flags */ }; struct pcap_addr { struct pcap_addr *next; struct sockaddr *addr; struct sockaddr *netmask; struct sockaddr *broadaddr; struct sockaddr *dstaddr; };
pcap_compile() 编译一种包过滤器。将一种高级旳、布尔形式表 示旳字符串转换成低档旳、二进制过滤语句,以便被包驱动使用。 pcap_setfilter() 在关键驱动中将过滤器和捕获过程结合在一起。从 这一时刻起,全部网络旳数据包都要经过过滤,经过过滤旳数据 包将被传入应用程序。
过滤设置举例
设备标识 (字符串)
抓包长度
混杂模式
超时时间
捕获数据包(回调机制)
int pcap_loop ( pcap_t * p,
int cnt,
pcap_handler callback,
例如:
u_char * user )
pcap_loop(adhandle, 0, packet_handler, NULL);
打开一种适配器开始捕获数据包
pcap_t * pcap_open_live ( const char * device, int snaplen, int promisc, int to_ms, char * ebuf )

基于Winpcap的网络嗅探器的设计与实现

基于Winpcap的网络嗅探器的设计与实现

性 与可靠 性 日益 受到人们 的重 视 。网络 嗅探 器 可 以有效完 成对 网络 上 传输 数 据 包 的捕 获 , 而收 从 集 与分析 网络 信息 , 网络 流 量监 控 和 故 障 检测 是
所 必 不 可 少 的 工 具 之 一 , 网 络 管 理 与 网 络 安 全 对 具 有重要 的意义 。
Ab t a t Ai n t h e u t wbe fn t r n g me t t ep p r rp ss an t o k s i e t n c p sr c : mi g a es c r y p lmso ewo k ma a e n , a e o o e ew r nf r h Wi p a t i h p wi
a e e o me tp a om n s a sd v l p n lt r a d Viu lC f a e eo me t o l ip a n iu l .T e fn a n a p i cpe o s d v l p n o n c p a d v s a t W C h d me t r i l f u l n
De i n a d I p e e t to f sg n m lm n a i n o
Newo k S i e s d o i p a t r n f r Ba e n W n c p
C HENG 。 n L n I Fa g
( col f o p t cec , agh Istt o eh o g , agh u e 4 5 0 ) Sh o o m ue S i e Hun sin tue f c nl y Hun si b i 3 0 3 C r n i T o H
随着 I e e 的迅 猛发展 , nr t tn 网络 已 1益成 为 工 3

上机:基于WinPcap的网络嗅探器设计与实现

上机:基于WinPcap的网络嗅探器设计与实现
ﻩﻩreturn -1;

ﻩﻩ
ﻩﻩprintf("Enterthe interface number(1-%d):",i);
ﻩscanf("%d",&inum);

ﻩﻩif (inum <1|| inum>i)
ﻩ{
ﻩprintf("\nInterfacenumber outofrange.\n");
ﻩ{
fprintf(stderr,"Error inpcap_findalldevs_ex: %s\n",errbuf);
ﻩﻩexit(1);
ﻩﻩ}

ﻩ/* Printthe list*/
for(d=alldevs;d;d=d->next)
ﻩ{
printf("%d.%s\n",++i,d->name);
ﻩ/*Free thedevicelist*/
ﻩﻩpcap_freealldevs(alldevs);
ﻩﻩreturn -1;
}

/* Jumptothe selectedadapter*/
ﻩfor(d=alldevs, i=0;i<inum-1 ;d=d->next, i++);
ﻩ/*Opentheadapter */
ﻩﻩﻩreturn-1;
ﻩ}
ﻩ}
else
ﻩ{
ﻩﻩ/*Do notcheck fortheswitchtype ('-s') */
ﻩif((fp=pcap_open_live(argv[2],// name ofthe device
ﻩﻩ65536,ﻩﻩﻩﻩﻩ//portion of the packet tocapture.

基于Winpcap嗅探器技术分析与实现

基于Winpcap嗅探器技术分析与实现
全 情 况 ,本 文 提 出 了 Wi n p c a p嗅 探 器 的 算 法 设 计 与 实 断 ,计 算 机 的 中 央处 理 器 并 不 参 与 。 现 。嗅 探 器 最 早 是 为 网络 管 理 人 员 配 备 的 工 具 ,有 了 嗅
网 卡是 网 络 中 节 点 主 机 的关 键 硬 件 设 备 。 对 数 据 的
心 数 据 结 构 设 计 ,函 数 及 Wi n p c a p包获 取 流 程 ,并 最后 给 出了 实验 结果 。
关 键 词 :嗅探 器 ; 网络 安 全 ;数 据 结 构 ;动 态链 接 库 ;函数
随着计算 机技术 和 I n t e r n e t 网 络 技 术 在 生 产 和 生 活 是 否 接 收处 理数 据 ,如 果 认 为 应 该 处 理 ,则 网 卡 就 会 产
可 以通 过 嗅探 器 分 析 网络 流 量 ,找 出 网络 阻 塞 的来 源 。
模 式 :只有 匹配 的 目的 网卡 才 能 接 收 数 据 信 息 。 混 杂 模 式 :网 卡能 够 可 以接 收一 切 通 过 它 的数 据 信 息 。
为 实 现 接 收 网 络 中经 过 网卡 的所 有 数 据 ,需 要 把 网
温 乃 宁 ,龚 尚福
( 西 安科 技大 学 计算 机学 院 ,陕西 西安 7 1 0 0 5 4 )
摘 要 :嗅探 器技 术在 网络 安 全技 术 中 处 于 非 常 重 要 的 作 用 ,直 接 关 系到 网络 中数 据 传 输 的安 全 性 和 可 靠 性 。 本 文 分析 了嗅探 器 的概 念 和 工 作 原 理 、Wi n p c a p嗅探 器 的 功 能 和 组 成 , 阐述 了 Wi n p c a p嗅 探 器 的 核

嗅探器的实现

嗅探器的实现

通信网络编程实验嗅探器的实现班级:学号:姓名:一、实验目的掌握基于Winpcap的协议分析器的设计方法二、原理介绍嗅探器程序一般包括内核部分和用户分析部分。

1)内核部分负责从网络中捕获和过滤数据。

2)用户分析部分负责界面、数据转化与处理、格式化、协议分析,如果在内核没有过滤数据包,在这里还要对数据进行过滤。

一个较为完整的基于网络监听和过滤的程序一般包括以下步骤:1)数据包捕获2)数据包过滤与分解3)数据分析数据包捕获常用的方法有两种:1)通过设置硬路由器的监听端口;2)利用以太网络的广播特性。

这种方式必须将网卡设置为混杂(promiscuous)模式。

监听程序工作在网络环境的底三层,可以拦截所有经过该机器的网络上传送的数据,然后将这些数据做相应处理,可以实时分析这些数据的内容,进而分析网络当前状态和整体布局。

基于windows的数据包捕获方案有以下几种:1)使用原始套接字(row socket)机制。

方法简单,但功能有限,只能捕获较高层的数据包;2)直接连接调用NDIS库函数,这种方法功能非常强大,但是比较危险,很可能导致系统崩溃和网络瘫痪;基于windows的数据包捕获方案有以下几种:1)使用或者自行编写中间层驱动程序,这是微软公司推荐使用的一种方法,微软提供的win2000 DDK中也提供了几个这样的驱动程序。

在具体的实现方式上可分为用户级和内核级两类。

其中内核级主要是TDI捕获过滤驱动程序,NDIS中间层捕获过滤驱动程序,NDIS捕获过滤钩子驱动程序等,它们都是利用网络驱动来实现的;而用户级的包括SPI接口,Windows2000包捕获过滤接口等;2)使用或自行编写协议驱动程序;3)使用第三方捕获组件或者库,比如Winpcap。

捕获数据包后要进行的工作是对其进行包过滤与分解,就是在海量的数据里面找我们感兴趣的内容。

一些基础的过滤规则如下:1)站过滤:专门筛选出来自一台主机或者服务器的数据;2)协议过滤:根据不同的协议来筛选数据,例如:选择TCP数据而非UDP数据;3)服务过滤:根据端口号来选择特定数据包;4)通用过滤:通过数据包中某一特定位置开始,选择具有某些共同数据特征的数据包;过滤完成后,必须进行数据分析,这一部分就是对已经捕获的数据包进行各种分析,比如:网络流量分析、数据包中信息、分析敏感信息提取分析等,功能取决于系统要达到的目的。

基于WinPcap 的网络嗅探器设计与实现

基于WinPcap 的网络嗅探器设计与实现

基于WinPcap 的网络嗅探器设计与实现作者:赵钢来源:《电脑知识与技术》2013年第15期摘要:针对安全问题在网络管理中的日益突出,基于Winpcap开发平台,使用Visual C + +作为开发工具,设计并开发了一个网络嗅探器。

该文设计了一个GUI程序,实现IP、TCP、UDP数据包捕获和分析。

同时分析了网络嗅探器的基本工作原理,并阐述了应用捕获数据包流,根据Winpcap关键功能给出了其具体实现。

结果表明,该网络嗅探器结构简单,捕获数据快速,对网络安全管理具有重要意义。

关键词:WinPcap;MFC;嗅探器;计算机网络中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2013)15-3506-031 嗅探协议原理1.1 IP协议IP是英文Internet Protocol(网络互连的协议)的缩写,中文简称为“网协”,也就是为计算机网络相互连接进行通信而设计的协议。

在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。

任何厂家生产的计算机系统,只要遵守 IP协议就可以与因特网互连互通。

1.2 TCP协议TCP:Transmission Control Protocol (传输控制协议)TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层通信协议。

在OSI/RM模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。

1.3 UDP协议UDP的全称是用户数据报协议,在网络中该协议用于处理数据包。

它处在OSI模型中的第四层,即传输层,它处在TCP协议的更高一层。

UDP不提供数据报分组、装配,不能将退回的数据包进行排序。

也就是说,在消息发送后,不知道是否它是安全完整无损地运到了。

UDP是用来支持那些需要相互传递数据的计算机网络应用程序。

许多系统,包括网络视频会议系统,客户端/服务器模式的网络应用程序,都需要使用UDP协议。

基于WinPcap的网络嗅探器设计

基于WinPcap的网络嗅探器设计

结课论文题目名称:端口扫描程序的设计和实现院系名称:计算机学院班级:网络124学号:201200824426学生姓名:张继杰授课教师:孙飞显2014 年12月15目录1 引言 (3)1.1 课题的背景及意义 (3)1.2 端口扫描现状 (3)2 系统设计 (3)2.1 系统主要目标 (3)2.2 开发环境及工具 (4)2.3 功能模块与系统结构 (4)3 系统功能程序设计 (5)3.1、TCP端口扫描的工作原理: (5)3.2 TCP端口扫描的关键问题: (6)3.3TCP端口扫描程序代码分析 (7)4 设计步骤与实现 (7)4.1使用vc++6.0创建一个工程 (7)4.2 设计程序对话框 (10)4.3在的初始化对话框函数OnInitDialog()中添加列表控件的初始化: (11)4.4TCP connect() 扫描 (13)4.4UDP扫描: (14)4.41UDP相关代码截图: (15)5运行结果 (16)结论 (18)参考文献 (18)摘要计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。

端口扫描技术是发现安全问题的重要手段之一。

本程序是在Windows系统中使用C语言用MFC完成的一个端口扫描程序。

此程序主要完成了TCP connect()扫描和UDP扫描功能。

TCP扫描支持多线程,能对单个指定的主机进行扫描或对指定网段内的主机进行逐个扫描。

能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描。

此端口扫描程序能快速地进行TCP扫描,准确地检测出对TCP协议开放的端口。

而对于UDP扫描只支持单线程,速度较慢。

扫描结果以列表的形式直观地展现出来。

关键词:端口扫描、TCP、UDP扫描1引言1.1 课题的背景及意义网络中每台计算机犹如一座城堡,这些城堡中,有些是对外完全开放的,有些却是大门紧闭的。

入侵者们是如何找到,并打开它们的城门呢?这些城门究竟通向何处?在网络中,把这些城堡的“城门”称之为计算机的“端口”。

基于Winpcaplibpcap自主开发SnifferAnalyzer

基于Winpcaplibpcap自主开发SnifferAnalyzer

基于Winpcap/libpcap自主开发Sniffer/Analyzer——《网络攻防技术与实践》项目实践姓名:王新平学号:10948257 1 基本描述1.1 Libpcap/WinpcapLibpcap(Winpcap是其windows版本)可以提供与平台无关的接口,而且操作简单,它是基于改进的BPF(Berkeley Packet Filter),该软件来自Berkeley的Lawrence National Laboratory研究院。

Winpcap是Libpcap的windows版本,linux用户使用Libpcap,Windows用户使用Winpcap。

使用Winpcap包过程比较规范,在密码学协议分析中,我们常用它来实现协议攻击。

基于Libpcap/Winpcap库的基本使用流程比较规范,一般为:step1:使用pcap_lookupdev获取设备;step2:使用pcap_lookupnet获取网络地址和子网掩码;step3:使用pcap_open_live打开设备;step4:使用pcap_complile编译过滤规则;step5:使用pcap_setfilter设置过滤规则;step6:使用pcap_loop循环捕获数据包,在其中调用相应处理函数;step7:使用pcap_close关闭设备句柄。

1.2 Sniffer/Analyzersniffer,即网络嗅探器,可以监听网络流。

Sniffer程序是一种利用以太网的特性把网络适配卡(NIC,一般为以太网卡)置为杂乱(promiscuous)模式状态的工具,一旦网卡设置为这种模式,它就能接收传输在网络上的每一个信息包。

Sniffer是一种常用的收集数据的方法。

它的一般用处主要是分析网络的流量,以便找出网络中潜在的问题。

Sniffer程序被广泛应用于网络维护和管理方面,网络管理员可以深入了解网络当前的运行状况,是网络管理员的好帮手。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

网络安全课程设计报告(2015-2016 第一学期)题目开发基于winPcap的嗅探器专业学号姓名指导教师日期评分分细评分项优秀良好中等差遵守机房规章制度实验原理分析与设计课题功能实现情况设计验收与答辩课程设计报告书写简短评语教师签名:年月日评分等级备注开发基于winPcap的嗅探器一、实验目的开发一个winpcap的嗅探器,用它来捕获所有流经网卡的数据包,并进行分析。

二、实验环境操作系统:Windows 2000/XP编程环境:Visual c++6.0附加库:Winpcap三、实验内容和要求内容:所开发的程序可以输出本机所有网卡的信息和捕获流经网卡的数据包并能够过滤出IP、TCP、UDP、ICM P等数据包要求:掌握基于WinPcap的网络编程模式。

理解并能应用WinPcap设计并实现网络数据包的捕获与解析。

四、实验原理和步骤原理:我们所要做的嗅探器是一种常用的网络数据收集软件,它是在广播式网络环境下利用计算机网络接口截获目的地为其它计算机的数据报文的一种工具。

在以太网中,信息是以明文的形式在网络上传输 ,当将网络适配器设置为混杂模式时,由于采用以太网广播信道争用的方式,使得监听系统与正常通信的网络能够并联连接,并可以捕获任何一个在同一冲突域上传输的数据包。

IEEE802.3标准的以太网采用的是持续CSMA的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可以获得其他站点发送的数据。

运用这一原理使信息捕获系统能够拦截我们所要的信息,这是捕获数据包的物理基础。

首先,抓包系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包,这就要求一部分运行在操作系统核心内部,直接与网络接口驱动交互。

这个部分是系统依赖的,在Winpcap的解决方案里它被认为是一个设备驱动,称作NPF(Netgroup PacketFilter)。

Winpcap提供了两个不同的库:Packet.dll和Wpcap.dll。

Wpcap.dll提供了更加友好、功能更加强大的函数调用。

WinPcap的优势在于提供了一套标准的抓包接口,与libpcap兼容,可使得原来许多UNIX平台下的网络分析工具快速移植过来,便于开发各种网络分析工具,充分考虑了各种性能和效率的优化,包括对于NPF内核层次上的过滤器支持,支持内核态的统计模式,提供了发送数据包的能力。

前者提供了一个底层API,伴随着一个独立于Microsoft操作系统的编程接口,这些API可以直接用来访问驱动的函数;后者导出了一组更强大的与libpcap一致的高层抓包函数库(captureprimitives)。

这些函数使得数据包的捕获以一种与网络硬件和操作系统无关的方式进行。

网络嗅探器工作在网络环境的底层,拦截所有正在网络上传送的数据,并且通过相应的解析处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体拓扑布局。

步骤:程序所实现嗅探器的总体结构本机网卡信息描述跳转到选择的网卡选择过滤包类型(ip/tcp/udp/icmp)开始嗅探嗅探内容显示并分析1.获得本地网络网卡列表获取一个已经绑定的网卡列表,然后Winpcap对捕获网络数据端口进行设定。

通过pcap引擎找出并设定监听的网络接口。

Winpcap提供了pcap_findalldevs_ex()函数,这个函数返回一个指向pcap_if结构的链表,其中的每一项都包含了一个己经绑定的适配器(网卡)的全部信息。

其中name和description这两项分别包含了相应设备的名称和描述。

取得网卡列表后就在屏幕上显示出来,如果网卡没有被发现就显示有关错误,pcap_findalldevs()同其他的libpcap函数一样有一个errbuf参数,当有异常情况发生时,这个参数会被pcap填充为某个特定错误字串。

部分主要程序示意如下:①主函数部分:// 获取网卡列表if(pcap_findalldevs(&alldevs, errbuf) == -1){ fprintf(stderr,"pcap_findalldevs发生错误: %s\n", errbuf);exit(1);}// 输出网卡信息for(i=0,d=alldevs; d; d=d->next,i++){ ifprint(d,i+1)}if(i==0){ printf("\n没有找到任何网卡,请确认Winpcap已经安装.\n");return -1;}②调用函数部分:// 输出网卡信息void ifprint(pcap_if_t *d, int num){pcap_addr_t *a;printf("\n\n************网卡%d信息************\n",num);// 输出网卡名称printf("网卡名: %s \n",d->name);// 网卡描述信息if (d->description){ printf("网卡描述: %s \n",d->description);}// 反馈printf("反馈: %s \n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no"); // IP地址for(a=d->addresses;a;a=a->next){ switch(a->addr->sa_family){ case AF_INET:printf("IP地址类型: AF_INET\n");//打印网络地址类型if (a->addr)//打印IP地址printf("IP地址: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr));if (a->netmask)//打印掩码printf("掩码: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr));if (a->broadaddr)//打印广播地址printf("广播地址: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr));if (a->dstaddr)//目的地址printf("Destination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr));break;default:printf("Address Family Name: Unknown\n");break; }}}2.选择一个网卡准备获取数据包:获得网卡的信息后就可以算则其中一个网卡打开准备接受数据包。

打开网卡的功能是通过pcap_open_ live()来实现的。

它的函数原型定义如下: pcap_t3pcap_open_live(char3device,intsnaplen,intpromisc,intto_ms,char3ebuf) 在正常情况下网卡只接受去往它的包而去往其他主机的数据包则被忽略,相反当网卡处于混杂模式时它将接收所有的流经它的数据包,这就意味着在共享介质的情况下可以捕获到其它主机的数据包。

大部分的包捕获程序都将混杂模式设为默认。

部分主要代码如下:// 打开网卡设备if ((adhandle= pcap_open_live(d->name,// 设备名称65536,// 捕获全部的数据包1,// 设置网卡为混杂模式1000,// 读超时为1秒errbuf// 错误缓存)) == NULL){fprintf(stderr,"\n不能打开网卡. %s 不被Winpcap支持\n");// 释放设备列表pcap_freealldevs(alldevs);return -1;}// 检测链接层,只支持以太网模式if(pcap_datalink(adhandle) != DLT_EN10MB){fprintf(stderr,"\n此程序只能运行在以太网上.\n");// 释放设备列表pcap_freealldevs(alldevs);return -1;}if(d->addresses != NULL){// 返回接口的第一个地址的掩码netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;}else{// 如果没有掩码,则默认设置为C类netmask=0xffffff;}3.选择一个过滤包类型(数据包的过滤设定)通过设置数据流过滤规则(filter)来实现。

数据包过滤处理是嗅探技术中的难点和重点,Win2 pcap提供了最强大的数据流过滤引擎。

它采用了一种高效的方法来捕获网络数据流的某些数据且常常和系统的捕获机制相集成。

过滤数据的函数是pcap-compile()和pcap_setfilter()来实现的。

部分主要程序代码如下;// 选择过滤包类型int protocol_type; // 0->ip 1->tcp 2->udp 3->icmpprintf("\n请选择监听的数据包协议类型(0->ip 1->tcp 2->udp 3->icmp) : ");scanf("%d",&protocol_type);switch(protocol_type){case 0:strcpy(packet_filter,"ip");break;case 1:strcpy(packet_filter,"ip and tcp");break;case 2:strcpy(packet_filter,"ip and udp");break;case 3:strcpy(packet_filter,"ip and icmp");break;default:break;}// 编译过滤器if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 ){ fprintf(stderr,"\n不能编译过滤器. 请检测语法.\n");// 释放设备列表pcap_freealldevs(alldevs);return -1;}//设置过滤器if (pcap_setfilter(adhandle, &fcode)<0){ fprintf(stderr,"\n设置过滤器出错.\n");pcap_freealldevs(alldevs);return -1;}4.捕获所选择的数据包使用pcap_next_ex()从网络接口中读取一个数据包,该函数第一个参数是接口句柄,后两个参数由函数返回,分别为数据包的相关信息和数据包本身。

相关文档
最新文档