基于winpcap的sniffer程序设计
基于winpcap的嗅探器设计与实现毕业设计
![基于winpcap的嗅探器设计与实现毕业设计](https://img.taocdn.com/s3/m/8e11fb249ec3d5bbfd0a74f3.png)
计算机与信息学院《计算机网络系统实践》报告设计题目:嗅探器的设计与实现学生姓名:***学号:2010****专业班级:信息安全****2013 年9 月25一、设计要求1.不限平台,可以使用Libpcap、WinPcap 或 Linux的原始套接字;2.实现一个功能比较简单的、具有图形界面的Sniffer,主线程响应用户界面操作,工作线程完成抓包等工作;3.能够解析出IP层和传输层的协议头,能够过滤TCP、UDP等数据包;4.能够输出文本方式传送的数据包的内容;5.能够进行简单的流量统计。
二、开发环境与工具操作系统:windows7开发工具:visual studio开发语言:C++附加库:Winpcap三、设计原理网络嗅探器是一种常用的监听网络的工具。
所谓嗅探器( Sniffer) ,是一种利用计算机网络接口截获网络数据的软件或硬件,可用于网络管理、网络协议分析以及网络安全等众多方面。
嗅探器不同于一般的键捕获工具,后者只能捕获当地终端控制台上的按键内容,而嗅探器所“嗅”到的是动态的以信息包形式( 如IP 数据包或者以太网包) 封装的信息流。
其中可能携带了重要数据或敏感信息。
可以将这些捕获到的信息包存档,以利用相应工具可以作进一步分析。
计算机网络的设计为嗅探器的使用创造了最基本的条件。
在目前的网络环境中,所有计算机节点都是共享传输介质,任意节点发出或发往任意节点的数据帧必将经过网内每一个节点的网络接口,此时只需对嗅探节点的网络接口( 网卡) 进行适当的设置便可为实现嗅探的做好准备工作。
在计算机网络系统中,网卡是用来接收网络上其他节点发来的数据帧,其内嵌的单片处理程序会检测数据帧来源的MAC 地址,并根据网卡所设置的接收方式来是否接收处理数据,如果认为应该处理,则网卡就会产生中断信号通知中央处理器,接收该数据帧并传输给操作系统处理。
否则就简单丢弃,所对应节点的网卡就截断,计算机的中央处理器并不参与。
在vs2008MFC下开发基于winpcap的网络嗅探器(IP,TCP,UDP)
![在vs2008MFC下开发基于winpcap的网络嗅探器(IP,TCP,UDP)](https://img.taocdn.com/s3/m/1736fde8856a561252d36f17.png)
课程设计Ⅰ设计报告题目:基于Winpcap的网络嗅探器的实现学号:姓名:学院:专业班级:指导教师:设计时间:指导老师评语:评定成绩: 签名: 日期:目录1 概述 (3)1.1课程设计的目的 (3)1.2设计任务与要求 (3)1.3开发环境 (3)2系统设计的基本概念与原理 (3)2.1IP协议基本知识 (3)2.2TCP协议基本知识 (6)2.3UDP协议基本知识 (9)2.4 WINPCAP基本知识 (9)2.5 WINPCAP基本原理 (14)2.6MFC编程框架 (16)3 基于WINPCAP的单文档网络嗅探器的设计与分析 (19)3.1系统设计实现的基本原理与过程 (19)3.2系统功能设计 (21)3.3系统架构设计 (22)3.4子系统与模块设计 (23)3.4.1网络嗅探器设置模块 (23)3.4.2网络数据包的捕获模块 (23)3.4.3解析和显示模块 (23)4 系统详细设计与实现 (24)4.1数据结构的设计 (24)4.2全局变量与函数的声明 (25)4.3嗅探器界面设计 (25)4.4嗅探器捕获模块的设计与实现 (26)4.5网络数据包捕获模块的设计与实现 (31)4.6解析和显示模块的设计与实现 (32)4.6.1列表视图初始化设置 (32)4.6.2从读取离线数据包并在列表视图中显示 (33)4.6.2响应用户鼠标消息,解析对应行的数据包信息。
(36)5 系统调试与运行 (38)5.1 WINPCAP函数库的安装 (38)5.2 SNIFFER网络嗅探器的测试与运行 (38)6 课程设计总结 (39)参考文献 (40)1 概述1.1 课程设计的目的目的:设计一个GUI程序,实现IP、TCP、UDP数据包的捕获和解析。
通过编程了解各类数据报的结构,掌握网络编程的基本原理和方法。
1.2 设计任务与要求本课程设计的基本内容是捕获IP,TCP,UDP数据包,通过解析数据包,理解和掌握各类数据包的结构(1)设计一个GUI程序,完成局域网数据包的捕获和IP、TCP、UDP数据包的解析;(2)捕获几个网络数据报,给出实例并分析各数据包各字段的含义;(3)说明基于Winpcap编程的基本原理、程序的总体框架,绘制每个函数的详细设计流程图。
基于Winpcap的sniffer检测原理与实现
![基于Winpcap的sniffer检测原理与实现](https://img.taocdn.com/s3/m/150907fa33d4b14e852468af.png)
基于Winpcap的sniffer检测原理与实现作者:刘建亮,宋莉来源:《电脑知识与技术》2009年第34期摘要:以太局域网的监听检测软件可以监视网络的状态,并利用这些信息来分析网络性能等。
由于监听工具能有效的截获网络上的数据,所以它也对网络信息安全造成极大威胁。
还必须采用各种反监听的检测措施以保护网络信息安全。
关键词:网络安全;Winpcap;ARP检测中图分类号:TP393文献标识码:A文章编号:1009-3044(2009)34-9685-03The Principle and Realization of sniffer Detection Based on WinpcapLIU Jian-liang, SONG Li(Information Engineering College of China University of Geosciences (Beijing), Beijing 100083, China)Abstract: The program of Ethernet Network's Interception and Detection is mostly a very good network' tool for managers. It can keep watch on network's condition, and use these information to analyze the network's performance. Because the wiretap tool can intercept and seize the data on the network effectively, it results the network and information's security problems. We must still adopt the anti detection measure to protect network and information's security problems.Key words: network security; winpcap; ARP detection在局域网内,安全总是值得关注的。
上机1:基于WinPcap的网络嗅探器设计与实现.
![上机1:基于WinPcap的网络嗅探器设计与实现.](https://img.taocdn.com/s3/m/ffcf9b1b31126edb6f1a10f4.png)
上机1:基于WinPcap的网络嗅探器设计1、目的与要求掌握基于WinPcap的网络编程模式。
理解并能应用WinPcap设计并实现网络数据包的捕获与解析。
2、设备与上机环境连网PC机(至少一台)。
计算机硬件要求:Intel Pentium5 处理器、256MB以上内存,Ethernet网卡,网线若干。
计算机软件要求:MS Windows 9x/2000/XP操作系统,TCP/IP协议,WinPcap430,Visual c++6.0/.net系统。
3、上机内容与步骤:在程序设计之前,请参照提供的软件安装WinPcap。
之后,按照如下步骤操作:步骤1:在VC++ 6.0下创建一个DOS命令行程序,工程名:自己的学号-PacketDump步骤2:打开main(函数,在主程序中增加如下头文件和常量定义:#include#define LINE_LEN 16pcap_if_t *alldevs, *d;pcap_t *fp;u_int inum, i=0;char errbuf[PCAP_ERRBUF_SIZE];int res;struct pcap_pkthdr *header;const u_char *pkt_data;printf("pktdump_ex: prints the packets of the network using WinPcap.\n"; printf(" Usage: pktdump_ex [-s source]\n\n"" Examples:\n"" pktdump_ex -s file.acp\n"" pktdump_ex -s \\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n"; if(argc < 3{printf("\nNo adapter selected: printing the device list:\n";/* The user didn't provide a packet source: Retrieve the local device list */if(pcap_findalldevs(&alldevs, errbuf == -1{fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf;exit(1;}/* Print the list */for(d=alldevs; d; d=d->next{printf("%d. %s\n ", ++i, d->name;if (d->descriptionprintf(" (%s\n", d->description;elseprintf(" (No description available\n";}if (i==0{printf("\nNo interfaces found! Make sure WinPcap is installed.\n"; return -1;}printf("Enter the interface number (1-%d:",i;scanf("%d", &inum;if (inum < 1 || inum > i{printf("\nInterface number out of range.\n";/* Free the device list */pcap_freealldevs(alldevs;return -1;}/* Jump to the selected adapter */for (d=alldevs, i=0; i< inum-1 ;d=d->next, i++;/* Open the adapter */if ((fp = pcap_open_live(d->name, // name of the device65536, // portion of the packet to capture.// 65536 grants that the whole packet will be captured on all the MACs. 1, // promiscuous mode (nonzero means promiscuous1000, // read timeouterrbuf // error buffer== NULL{fprintf(stderr,"\nError opening adapter\n";return -1;}}else{/* Do not check for the switch type ('-s' */if ((fp = pcap_open_live(argv[2], // name of the device65536, // portion of the packet to capture.// 65536 grants that the whole packet will be captured on all the MACs. 1, // promiscuous mode (nonzero means promiscuous1000, // read timeouterrbuf // error buffer== NULL{fprintf(stderr,"\nError opening adapter\n";return -1;}}/* Read the packets */while((res = pcap_next_ex( fp, &header, &pkt_data >= 0{if(res == 0/* Timeout elapsed */continue;/* print pkt timestamp and pkt len */printf("%ld:%ld (%ld\n", header->_sec, header->_usec, header->len; /* Print the packet */for (i=1; (i < header->caplen + 1 ; i++{printf("%.2x ", pkt_data[i-1];if ( (i % LINE_LEN == 0 printf("\n";}printf("\n\n";}if(res == -1{printf("Error reading the packets: %s\n", pcap_geterr(fp;return -1;}pcap_close(fp;return 0;步骤3:为编译器指定包含文件和库文件搜索目录。
(完整word版)Sniffer 网络抓包
![(完整word版)Sniffer 网络抓包](https://img.taocdn.com/s3/m/b29304ea650e52ea541898cd.png)
MySniffer抓包程序一、开发思路在windows操作系统下,要想捕获网络上的数据包,必须要对网卡进行控制,因为本机的数据报从网络上来到本机是通过网卡然后再保存到本地缓冲区上的,所以要抓获网包就必须调用网卡驱动中的对外函数.因此,通过调用网卡驱动函数,将网卡设置为杂乱模式状态,使得网卡不能阻塞、过滤或控制其他应用程序数据报的收发,以达到抓取数据包的目的.开发环境:系统:Windows XP;IDE:MyEclipse6.0。
1;工具包: winpcap;Jpcap;开发语言:java二、开发流程1、MySniffer功能本程序基本功能:包括对ipv6数据包的抓取,分析.扩展功能:提供友好的可视化界面和操作。
2、MySniffer层次结构MySniffer抓包程序分为三大部分:访问网络底层部分、数据包分析部分、可视化界面部分。
因此,层次结构大概为下图所示:图一、MySniffer抓包程序层次结构图从MySniffer抓包程序层次结构图可知,程序各部分的主要功能包括:●可视化界面部分:提供友好界面显示,抓包操作(网卡选择、开始抓包、停止抓包)及显示数据包分析结果。
●数据包分析部分:负责分析数据包及保存抓取到的数据包.●访问网络底层部分:提供底层服务,检测网卡设备及抓取网络中的原始数据包.3、MySniffer操作流程MySniffer操作流程具体为:初始化界面—〉检测网卡—〉调用网卡抓包—〉对抓到的数据包即时统计、分析->停止抓包—〉显示数据包内容。
如下图所示:图二、MySniffer抓包程序操作流程图4、MySniffer具体实现MySniffer抓包程序包括4个类,分别是IPV6Main(主函数)、IPV6Frame(界面)、IPV6Packet(数据包信息)、IPV6Captor(抓包)。
IPV6Frame提供界面显示,有以下方法:startButton()//开始按钮触发方法,调用doCapture()。
sniffer的研究和基于开源libpcap的sniffer实现 网络工程 毕业论文正文
![sniffer的研究和基于开源libpcap的sniffer实现 网络工程 毕业论文正文](https://img.taocdn.com/s3/m/b81e9be0102de2bd9605883d.png)
本科生学位论文题目:sniffer的研究和基于开源libpcap的sniffer实现姓名:xx专业:网络工程导师:xx学院:计算机学院2013年6月 1 日独创性(或创新性)声明本人声明所呈交的论文是本人在导师指导下进行的研究工作及取得的研究成果。
尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得北京邮电大学或其他教育机构的学位或证书而使用过的材料。
与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。
申请学位论文与资料若有不实之处,本人承担一切相关责任。
本人签名:日期:关于论文使用授权的说明学位论文作者完全了解北京邮电大学有关保留和使用学位论文的规定,即:研究生在校攻读学位期间论文工作的知识产权单位属北京邮电大学。
学校有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许学位论文被查阅和借阅;学校可以公布学位论文的全部或部分内容,可以允许采用影印、缩印或其它复制手段保存、汇编学位论文。
(保密的学位论文在解密后遵守此规定)保密论文注释:本学位论文属于保密在年解密后适用本授权书。
非保密论文注释:本学位论文不属于保密范围,适用本授权书。
本人签名:日期:导师签名:日期:sniffer的研究和基于开源libpcap的sniffer实现摘要局域网嗅探技术是一种分析局域网的重要工具,局域网嗅探技术绕过了操作系统TCP/IP协议栈,直接从网卡捕获数据包,非常自由和灵活,在流量分析、网络安全、故障排查、协议分析、局域网测试等众多领域内发挥了重要作用。
论文主要介绍了嗅探器的技术原理与应用,TCP/IP的四层结构模型、数据帧和IP 包的字段的信息,详细分析了libpcapAPI,并提出了利用libpcap在fedora14操作系统下实现“个性化”的嗅探器的方法,这个嗅探器主要有以下三个功能:功能一,计算当前局域网内包的个数,每秒的字节数等基本局域网状况的参数;功能二,分析ip包,udp 包,tcp包,itcmp包等特定的数据包的状况;功能三,对数据包做应用层协议分析,这里用到了基于端口、协议、正则表达式、长度的综合识别方法,并加入了基于流识别的内容,论文最后对在fedora14下编写完成的“个性化”嗅探器做出了测试分析并提出了进一步研究的思路。
sniffer的研究和基于开源libpcap的sniffer实现 开题报告
![sniffer的研究和基于开源libpcap的sniffer实现 开题报告](https://img.taocdn.com/s3/m/0dcd3c88b9d528ea81c77996.png)
本科毕业设计(论文)开题报告学院计算机专业网络工程班级09211311 学生姓名学号09211419 班内序号8 指导教师姓名所在单位网络技术研究院职称讲师设计(论文)题目sniffer的研究和基于开源libpcap的sniffer实现一、选题的背景和意义sniffer是一种非常常用的网络工具,在流量分析、网络安全、故障排查、协议分析、局域网测试等众多领域内发挥了重要作用。
当然目前已经有良好的嗅探工具,比如wireshark。
但是面对一些“个性化”的场合,拥有冗长用户说明和庞大功能系统的wireshark并不是我们的首选。
个性化的嗅探器有以下优点:轻量级。
根据自己需要开发的嗅探器不需要像wireshark那样面面俱到,只要针对需求即可,这样我们的嗅探器将变得更为灵巧,同时更加符合需求。
针对性。
比如需要分析的是一种非通用的新型的应用层协议,显然wireshark对这种“个性”的要求无能为力,我们就可以根据现实需求量身定制符合需求的灵巧的嗅探器。
对自身能力的成长有帮助。
摆脱现有sniffer工具的“拐杖”,加深对协议的理解。
现有的sniffer工具功能强大,使使用者在享受方便的同时,对协议字段本身了解不求甚解。
自行编写sniffer有助于作者加深对各类协议的了解,加深对网络和网络协议的理解。
二、研究的基本内容和拟解决的主要问题设计并实现一个基于libpcap的sniffer,主要实现以下三大功能:1)计算当前局域网内包的个数,每秒的字节数等基本局域网状况的参数。
2) 分析ip包,udp包,tcp包,itcmp包等特定的数据包的状况。
3) 对数据包做应用层协议分析,这里用到了基于端口、协议、正则表达式、长度的综合识别方法,并加入了基于流识别的内容。
三、研究方法及措施第一,通过学习了解实现这个嗅探器的功能需要哪些理论知识,这些需要通过阅读libpcap库的API 获取以及相关论文。
第二,要把大问题模块化,分层次分阶段,逐步解决问题。
sniffer报告
![sniffer报告](https://img.taocdn.com/s3/m/9469c01c59eef8c75fbfb30e.png)
默认规则为包括 ICMP,ARP,UDP.TCP 核心代码如下: int state[ 4 ]; state[ 0 ] = 1; for( int i = 1; i < 4; i++ ) { state[ i ] = 2 * state[ i - 1 ]; } CButton* pBtn; pBtn = (CButton*)GetDlgItem(IDC_CHECK_ICMP); state[ 0 ] *= pBtn->GetCheck(); pBtn = (CButton*)GetDlgItem(IDC_CHECK_ARP); state[ 1 ] *= pBtn->GetCheck(); pBtn = (CButton*)GetDlgItem(IDC_CHECK_TCP); state[ 2 ] *= pBtn->GetCheck(); pBtn = (CButton*)GetDlgItem(IDC_CHECK_UDP); state[ 3 ] *= pBtn->GetCheck(); result = (state[ 0 ] | state[ 1 ] | state[ 2 ] | state[ 3 ]); //record the rule 4. 数据包处理 这部分是整个系统的核心部分。 4.1 对话框绘制 新建 CpacketInfo 类,并且绘制对话框,此对话框也正是 view 中所显示的 对话 框。具体的控件及其作用在视图部分已经详细给出了。 4.2 协议添加 为每个系统支持的协议类型各创建一个类。以 TCP 协议为例,创建 CTcp 类。 通过查询 TCP/IP 协议,可以得到数据包中各部分的信息。如下图所示:
CString nFlag = true);
GetStr(unsigned int nNum,unsigned char * pData = NULL,bool
sniffer技术原理及应用,包括编程方法和工具使用
![sniffer技术原理及应用,包括编程方法和工具使用](https://img.taocdn.com/s3/m/85a650d052ea551811a68793.png)
sniffer技术原理及应用,包括编程方法和工具使用sniffer技术原理及应用,包括编程方法和工具使用2021-08-25 12:46:07| 分类:网络|字号订阅sniffer中文翻译过来就是嗅探器,在当前网络技术中使用得非常得广泛。
sniffer 既可以做为网络故障的诊断工具,也可以作为黑客嗅探和监听的工具。
最近两年,网络监听(sniffer)技术出现了新的重要特征。
传统的sniffer技术是被动地监听网络通信、用户名和口令。
而新的sniffer技术出现了主动地控制通信数据的特点,把sniffer技术扩展到了一个新的领域。
Sniffer 技术除了目前在传统的网络侦测管理外,也开始被应用在资讯保全的领域。
可以这样说,sniffer技术是一把双刃剑,如何更好的利用它,了解它的一些特性,将能使这项技术更好的为我们带来便利。
sniffer的编程方法比较通用的有以下几种,1.winpcap 这是一个比较通用的库,相信做过抓包的工具大多数人都不会太陌生2.raw socket 在2000以后的版本都支持此项功能,2000 server有个网络监视器就是基于raw socket3.tdi,ndis,spi,hook socket技术,这种技术比较大的不同是可以将包截取而不是仅仅获得包的一份拷贝。
总的说来,一般以前两者居多。
一)winpcap驱动简介winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。
开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。
它提供了以下的各项功能:1> 捕获原始数据报,包括在共享网络上各主机发送/接收的以及相互之间交换的数据报;2> 在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;3> 在网络上发送原始的数据报; 4> 收集网络通信过程中的统计信息。
使用WinPcap编写Sniffer程序
![使用WinPcap编写Sniffer程序](https://img.taocdn.com/s3/m/1b68d81fa9956bec0975f46527d3240c8447a1be.png)
typedef void(* pcap_handler)
( u_char *user,
const struct pcap_pkthdr *pkt_header,
const u_char *pkt_data)
捕获数据包(直接方式)
int pcap_next_ex ( pcap_t * p, struct pcap_pkthdr ** pkt_header, const u_char ** pkt_data )
if (d->description) printf(" (%s)\n", d->description);
else
printf(" (No description available)\n");
}
if(i==0){
printf("\nNo interfaces found! Make sure WinPcap is
打开一种适配器开始捕获数据包
pcap_t * pcap_open_live ( const char * device, int snaplen, int promisc, int to_ms, char * ebuf )
pcap_t *adhandle= pcap_open_live(d->name, 65536,1, 1000, errbuf );
照顾客要求旳规范过滤数据包 ➢将捕获到旳数据包输出到文件中,
并能够对这些文件进行再分析 ➢向网络发送原始数据包 ➢搜集网络传播统计数据
Winpcap简介
哪些应用适合使用 WinPcap
网络和协议分析network and protocol analyzers 网络监控network monitors 流量统计traffic loggers 流量产生traffic generators 顾客级网桥和路由器user-level bridges and routers 网络入侵检测network intrusion detection systems (NIDS) 网络扫描network scanners 安全工具security tools
Sniffer原理解析及其WinPcap实现
![Sniffer原理解析及其WinPcap实现](https://img.taocdn.com/s3/m/b3a17af9aef8941ea76e05a2.png)
收稿日期:2005-04-18作者简介:刘波涛(1980-),男,湖北省孝感市大悟县,现就读于成都市新都区西南石油学院研究生院硕士.文章编号:1005-0523(2005)05-0096-04Sniffer 原理解析及其WinPcap 实现刘波涛1,赵 刚1,冯翠丽2,唐 乐1(1.成都市新都区西南石油学院,四川成都610500;2.长江大学计科院,434102)摘要:在分析Sniffer 工作原理的基础上,阐述了有关Sniffer 设计的一般流程,并用VC ++结合WinPcap 实现了Sniffer 的主要功能.关 键 词:嗅探器;TCP/IP ;WinPcap ;VC ++中图分类号:TP206 文献标识码:A 随着网络的日益普及,网络对信息安全的要求也与日俱增.在网络安全中扮演着重要角色的Snif 2fer ,将越来越受到关注.熟悉Sniffer 的原理、实现将有利于更好的利用Sniffer 来维护计算机网络及解决网络安全问题.1 Sni ffer 的工作原理要对sniffer 的工作原理进行深入的了解,可以从网络通讯及网卡的基本工作原理着手.在实际的网络通讯T CP/IP 模型中,数据以一定的单位(不妨称为数据包)在网络上进行传输.数据包在发送端一方的协议栈从上层至下层被依次封装,即将上层的整个数据包作为下层的数据部分,再加上下层的Header ,作为新的数据包.此过程如图1所示.其中,网卡工作在L1层,在这里数据包被网卡驱动程序封装成帧,然后被发送到网线上,经网络路由到达目的机器.那么,包是怎么到达目的机器的呢?这是通过两个地址(MAC 地址及IP 地址)及路由协议实现的:首先网络根据此数据包的IP 地址将其路由到目的机器所在网络的网关上(这一步由路由协议实现),然后由此网关将数据包发送到MAC 地址所指定的目的机器.而E thernet (此处指的是共享式而非交换式的E thernet )的工作方式是,把要发送的数据包发送给连接在一起的所有主机,每台机器视网卡的工作模式来判断是否接收此数据第22卷第5期2005年10月华东交通大学学报Journal of East China Jiaotong University V ol.22 N o.5Oct.,2005包.若认为该接收,就在存储后产生中断信号通知CPU;若认为不该接收,就简单地丢弃该数据包.也就是说,不该接收的数据包被网卡截断了,OS根本就不知道.而接收后的数据包则经由接收端一方的协议栈从下层至上层被依次解包,即将下层的Header剥去,将数据部分根据Header的内容交付上层的协议或进程处理.对网卡来说,接收帧的目的MAC地址可以是六种MAC地址之一:1>T o-Me,目的MAC地址就是自己;2>T o-Others,目的MAC地址是别的主机;3>Multicast-In,目的MAC地址是组播地址,此时该H ost在多播列表中已注册;4>Multicast-N ot,目的MAC地址是组播地址,此时该H ost还没有在多播列表中注册;5>Broadcast,广播地址;6>G roup-Bit,目的MAC地址既不是Broadcast也不是Multicast,其组位被置位,即01-00-00-00-00-00.以太网卡有两种工作模式:normal m odel和promiscuous m odel.这两种模式针对不同MAC地址的过滤方式如表1所示.表1 网卡的过滤方式 M AC M odelT o-Me T o-Others Multicast-In Multicast-N ot Broadcast G roup-Bit normal Pass Reject Pass Reject Pass Reject promiscuous Pass Pass Pass Pass Pass Pass 通常,网卡都工作在normal m odel下,故对于不属于自己的数据包均作简单的丢弃处理.但如果让某个H ost的网卡处于promiscuous m odel,那么它就可以捕获网络上所有的数据包,此时的它(包括其软件)实际上就构成了一个嗅探器.也就是说,Sniffer的基本工作原理是:让网卡接收一切它所能接收到的数据.2 Sni ffer的设计及实现从以上Sniffer的工作原理可知,设计Sniffer的基本思想就是:置网卡于混杂模式、捕获数据包、分析数据包.一般来讲,Windows环境下有三种方案可供选择以编程实现Sniffer,表二对它们各自的优缺点进行了简要的比较.1)Raw S ocket(套接字)起初是Unix上最流行的网络编程接口之一,后来微软将它引入到Windows 中并得以实现.2)NDIS(Netw ork Driver Interface S pecification)由Micros oft和3C om公司联合开发,是Windows中“通信协议程序”和“网络设备驱动器”之间通信的规范,它为协议通讯程序操作网络设备提供标准的接口,它支持计算机通过不同的协议栈与网络相连.3)Packet32和WinPcap(windows packet capture)都是免费的基于Windows平台下的网络接口,为win32应用程序提供访问网络底层的能力,并且它们工作于驱动层、效率很高.前者是是微软的的一个实现版本,后者是UNIX下的libpcap移植到win2 dows下的产物.表2 Windows下实现Sniffer的三种方案方法优点缺点补充Raw S ocket实现简单只能抓到IP包,对与IP同层(如ARP)的其它数据包无能为力只能获得包的一份拷贝NDIS可以对网卡进行任意的操作可以抓取原始数据包驱动程序开发代价较大可截断数据流而不仅仅只获得一份拷贝Packet32或WinPcap库可抓取原始数据提供应用程序接口,复杂的内部操作由D LL完成实现的Sniffer需要安装相应的链接库才能运行只能获得包的一份拷贝 WinPcap包提供的功能有:能够捕获原始数据包、方便地把数据写入到文件和从文件中读出、按照自定义的规则过滤、发送原始数据包、收集网络统计信息.用VC++结合WinPcap包实现Sniffer的一般流程如图2所示.具体到编程实现上,除去必要的出错处理外,关键功能的实现如下:79第5期 刘波涛,等:Sniffer原理解析及其WinPcap实现 1)打开网卡列表DevP ointer =pcap -findalldevs(&AllDevs List ,ErrBu f ).其中,ErrBu f 是出错缓存,用来写入出错信息;而AllDevs List 是一个用来描述网卡数据结构的pcap -if -t 型指针.值得注意的是,在实际捕获数据包之前必须调用pcap -freealldevs (AllDevs 2List )来释放该指针.对于多穴机而言,此步旨在选择要检测的网卡接口,并返回pcap-if -t 型指针.2)打开对应的网卡DevH andle =pcap -open (Dev 2P ointer ->name ,65536,1,1000,ErrBu f ).在有些系统中,第一个参数为NU LL 表示监视所有网卡.第二个参数表明了要捕获数据包的长度,65536保证了所有数据包能被捕获.参数“1”表示设置成混杂模式,“1000”表示阻塞时间是1秒.该函数返回一个指向网卡的设备句柄DevH andle ,它是后面几个函数的关键参数.3)设置过滤规则,可用pcap -com pile ()和pcap-setfilter ()完成,以过滤掉自己不感兴趣的数据包,保证不会因为数据包总量太多而丢失需要监视的数据包.4)文件的读写.在一个繁忙的网络中,可能在一秒钟内得到上千个数据包,故有必要将数据存放在文件中以备将来分析使用.①打开文件由Dum pFile =ap -dum p -open (De 2vH andle ,Path )实现,其中的Path 存放要打开文件的完整路径.返回值Dum pFile 是一个与设备句柄De 2vH andle 相关联的文件句柄.②调用pcap -dum p (Dum pFile ,PktH eader ,PktDa 2ta )将数据存储到文件.其中Dum pFile 是u-char 型指针,即是上面提到的文件句柄.PktData 是一个u -char 型指针,指向原始数据包.该函数在PacketH andle ()内部被调用.③用pcap -open -offline ()打开一个堆文件,之后用pcap -loop ()循环从文件中读取数据.通过这种方式,读取脱机的数据几乎和实时从网卡上读取数据一模一样.④程序退出前,必须调用pcap -dum p-close(Dum pFile )来关闭所关联的文件句柄.5)捕获数据包pcap-loop (DevH andle ,0,Pack 2etH andle ,Dum pFile ),并将接收的数据包写入一个文件(用pcap -dum p ()实现),便于以后分析.一般有两种捕获方法:①用pcap -loop ()或是pcap -dispatch ().两者功能十分相似,不同的是前者在没有数据包到达时将阻塞,而后者可不被阻塞.②循环调用pcap -next -ex 或pcap -next (),前者只在Win32环境下才能够被调用,而后者则效率很低,因为它隐藏了回调方法,并且不能够识别文件结束标志E OF ,所以对来自文件的数据流它几乎无能为力.6)解析数据包由回调函数PacketHandle (Param ,PktHeader ,PktData )实现.其中Param 是u-char 型指针,多用于传递参数,如在PacketHandle 函数中调用pcap -dum p ()函数就用它来传送文件句柄Dum pFile.PktData 是一个u -char 型指针,指向原始数据包.除去出错处理、校验和验证等必要的附加程序外,每层协议处理模块的程序结构都是一个多分支结构.例如,L1层以太包处理函数E therHandle (char 3)的关键部分如下:E therHeader =(ETH -HE ADER 3)CharP ointer ;S wapETHHeader (E therHeader );s witch (E therHeader ->frm -typ ){case ARP -PACKET://ARP &RARPcase RARP -PACKET:ARPHandle (CharP ointer );break ;case IP -PACKET:IPHandle (CharP ointer );break ;//IP……}//s witch (eth ->frame-type )在调用E therHandle ()之前,有一个编程技巧就是用一个char 型指针CharP ointer 指向原始数据包,89 华东交通大学学报 2005年即CharP ointer =(char 3)PktData.随后所有各层协议处理函数都引用这个指针,以便在上层协议在需要下层协议相关信息时(例如计算T CP 校验和时需要IP 头部信息)可以方便地获取,不过这种做法打破了协议之间的独立封装性.在E therHandle ()中首先用以太包头指针E therHeader 指向数据包头,以便对以太包做进一步的处理.因为原始数据包的字节顺序是网络字节顺序即Big -endian ,而与主机字节顺序有可能不同,原因是主机字节顺序与具体CPU 有关,如X86系列的CPU 就是Little -endian ,因此要用S wapETHHeader (E therHeader )来交换字节顺序.随后根据“帧类型”的域值(E therHeader ->frm -typ )来判断该将数据包交给哪个模块作进一步的处理:如果是IP 包就交给IP 模块处理,如果是ARP 包就交给ARP 模块处理.因为ARPR 及RARP 包头格式一样,只是域值不同而已,故可以将这两个数据包放在一起进行分析.IPHandle (CharP ointer )的功能就是要提取以太包的Data (即IP 包)交由IP 处理模块处理.该函数首先由I pHeader =(IP -HE ADER 3)(CharP ointer +14)取得IP 数据包头,随后对此IP 数据包进行解析,其结构与E therHandle ()大体相同.数据包就是这样从下层至上层被依次解包而解析的.编译之前,要将WinPcap 包中include 、lib 目录下的文件分别拷贝到VC 对应的文件中,还需要在工程中加入宏WPC AP.为了使程序链接成功,还必须包含头文件wins ock2.h 、pcap.h 及连接库w pcap.lib 、ws2-32.lib 、ws ock32.lib.调试过程中为防止结构体产生空洞而与实际的网络通讯不一样,可以在工程中加入#pragma pack (1).3 优化及不足为提高性能,本文使用了两个线程来实现数据包的捕获及分析:首先在程序中建立一个公共的LI LO 缓冲池,捕获线程将过滤后的数据包添加到队列的头部;另一个分析线程则专门根据头部信息分析数据包.考虑到应尽可能少地丢失数据包,故必须设置捕获线程为较高优先级.为了使本文实现的Sniffer 具有一定的攻击力,实现中加入了发送数据包的“发包”功能,这是用pcap-sendpacket (DevHandle ,SendBuf ,SendBufLen )来实现的.本文所介绍的Sniffer 代码在Windows XP 及VC ++ 6.0环境下成功地得到了调试和运行.其运行结果表明,此实现具备了Sniffer 的捕获包、分析包、发包的基本功能,但尚未实现支持所有的T CP/IP 协议及IPX 、DEC Net 等其他非T CP/IP 族协议,故有待进一步地完善.参考文献:[1]W.Richard S tevens ,范建华,等.T CP/IP 祥解卷一:协议[M].北京:机械工业出版社.[2]sniffer 技术原理及应用.http :///develop/arti 2cle/22/22362.shtm.[3]监听以太网(一~四).http ://w w /document/viewdoc/?id =729.[4]深入学习sniffer ,http ://w w /edu/doctext.php ?docid =911.[5]sniffer 安全技术专题,http ://w w /w w w/special/sniffer.asp.[6]手把手教你玩转ARP 包,http :///superhack 2er110/.[7]用WinPcap 实现Sniffer ,http :///shadow 2star/essay/security/sniffer2.htm.Sniffer ’s Principle R esolution and R ealization in WinPcapLIU Bo 2tao 1,ZHAO G ang 1,FENG Cui 2li 2,TANG Le 1(1.SWPI ,X indu District ,Chengdu 610500;2.C om puter Science Department in Chang Jiang University ,434102,China )Abstract :On the basis of explained the Sniffer operation principle ,the paper has expounded the general procedure of designing a Sniffer ,and has realized the Sniffer ’s primary function in VC ++combined with WinPcap.K ey w ords :sniffer ;T CP/IP ;WinPcap ;VC ++99第5期 刘波涛,等:Sniffer 原理解析及其WinPcap 实现 。
一个简易网络嗅探器的实现源代码
![一个简易网络嗅探器的实现源代码](https://img.taocdn.com/s3/m/c5b57b5bbe23482fb4da4c6b.png)
摘要:本文介绍一个用C语言和网络数据包分析开发工具实现的简易网络Sniffer。
要害词:网络;数据包;Sniffer引言目前,已经有不少的Sniff工具软件,如Windows环境下,最富盛名的工具是Netxray和Sniffer pro,用它们在Windows环境下抓包来分析,非常方便。
在UNIX环境下如Sniffit,Snoop,Tcpdump,Dsniff 等都是比较常见的。
这里介绍一个用C语言和网络数据包和分析开发工具libpcap及winpcap实现的简易网络Sniffer。
网络嗅探器程序框图首先给出流程如图1所示。
图1 流程图网络嗅探器程序实现在c环境下编程,源码如下:/* June 2nd,2002* Project for graduation qualification By Bby Team 19 */ #include <stdio.h>#include <conio.h>//必须加路径,必须把头文件packet32.h包含进去#include "..\..\Include\packet32.h"#include "..\..\Include\ntddndis.h"#define Max_Num_Adapter 10// Prototypes原形//发包void PrintPackets(LPPACKET lpPacket);//设备列表char AdapterList[Max_Num_Adapter][1024];// 主程序开始int main(){//define a pointer to an ADAPTER strUCture设备指针LPADAPTER lpAdapter = 0;//define a pointer to a PACKET structure包指针LPPACKET lpPacket;int i;DWord dwErrorCode;DWORD dwVersion;DWORD dwWindowsMajorVersion;//Unicode strings (WinNT)WCHAR AdapterName[8192]; //网络适配器设备列表WCHAR *temp,*temp1;//ASCII strings (Win9x)char AdapterNamea[8192]; //网络适配器设备列表char *tempa,*temp1a;int AdapterNum=0,Open;ULONG AdapterLength;char buffer[256000]; // 容纳来自驱动器的数据的缓冲区struct bpf_stat stat;// 获得本机网卡名AdapterLength=4096;printf("Packet.dll test application. Library version:%s\n", PacketGetVersion());printf("Adapters installed:\n");i=0;下面这段代码是用来在不同版本下得到网络适配器名:Win9x 和WinNT中的网卡名称是分别用ASCII和UNICODE实现的,所以首先要得到本地操作系统的版本号:dwVersion=GetVersion();dwWindowsMajorVersion= (DWORD)(LOBYTE(LOWORD(dwVersion)));这里首先用到的Packet.dll函数是PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize,通常它是与驱动程序通信并被调用的第一个函数,它将返回的用户本地系统中安装的网络适配器的名字放在缓冲区pStr中;BufferSize是缓冲区的长度:if (!(dwVersion >= 0x80000000 && dwWindowsMajorVersion >= 4)){//是Windows NT// 找不到设备列表if(PacketGetAdapterNames(AdapterName,&AdapterLength)==FALSE){printf("Unable to retrieve the list of the adapters!\n");return -1;}// 找到设备列表temp=AdapterName;temp1=AdapterName;while ((*temp!='\0')(*(temp-1)!='\0')){if (*temp=='\0'){memcpy(AdapterList[i],temp1,(temp-temp1)*2);temp1=temp+1;i++;}temp++;}// 显示适配器列表AdapterNum=i;for (i=0;i<AdapterNum;i++)wprintf(L"\n%d- %s\n",i+1,AdapterList[i]);printf("\n");}else //否则就是windows 9x,获取适配器名的方法同WinNT下{if(PacketGetAdapterNames(AdapterNamea,&AdapterLength)==FALSE){ printf("Unable to retrieve the list of the adapters!\n");return -1;}tempa=AdapterNamea;temp1a=AdapterNamea;while ((*tempa!='\0')(*(tempa-1)!='\0')){if (*tempa=='\0'){memcpy(AdapterList[i],temp1a,tempa-temp1a);temp1a=tempa+1;i++;}tempa++;}AdapterNum=i;for (i=0;i<AdapterNum;i++)printf("\n%d- %s\n",i+1,AdapterList[i]);printf("\n");}下面这段代码就是让用户选择监听的网络适配器号:// 选择设备do{printf("Select the number of the adapter to open : ");scanf("%d",&Open);if (Open>AdapterNum)printf("\nThe number must be smaller than %d",AdapterNum);} while (Open>AdapterNum);然后,将所选择的设备打开,这里可以设置为“混杂”模式打开,也可以是“直接”模式打开。
基于winpcap的嗅探器设计及实现
![基于winpcap的嗅探器设计及实现](https://img.taocdn.com/s3/m/950a77481eb91a37f1115c69.png)
计算机与信息学院《计算机网络系统实践》报告2013 年 9 月 25设计题目:嗅探器的设计与实现 学生姓名:*** 学 号:2010**** 专业班级:信息安全****一、设计要求1.不限平台,可以使用Libpcap、WinPcap 或 Linux的原始套接字;2.实现一个功能比较简单的、具有图形界面的Sniffer,主线程响应用户界面操作,工作线程完成抓包等工作;3.能够解析出IP层和传输层的协议头,能够过滤TCP、UDP等数据包;4.能够输出文本方式传送的数据包的内容;5.能够进行简单的流量统计。
二、开发环境与工具操作系统:windows7开发工具:visual studio开发语言:C++附加库:Winpcap三、设计原理网络嗅探器是一种常用的监听网络的工具。
所谓嗅探器( Sniffer) ,是一种利用计算机网络接口截获网络数据的软件或硬件,可用于网络管理、网络协议分析以及网络安全等众多方面。
嗅探器不同于一般的键捕获工具,后者只能捕获当地终端控制台上的按键内容,而嗅探器所“嗅”到的是动态的以信息包形式( 如IP 数据包或者以太网包) 封装的信息流。
其中可能携带了重要数据或敏感信息。
可以将这些捕获到的信息包存档,以利用相应工具可以作进一步分析。
计算机网络的设计为嗅探器的使用创造了最基本的条件。
在目前的网络环境中,所有计算机节点都是共享传输介质,任意节点发出或发往任意节点的数据帧必将经过网内每一个节点的网络接口,此时只需对嗅探节点的网络接口( 网卡) 进行适当的设置便可为实现嗅探的做好准备工作。
在计算机网络系统中,网卡是用来接收网络上其他节点发来的数据帧,其内嵌的单片处理程序会检测数据帧来源的MAC 地址,并根据网卡所设置的接收方式来是否接收处理数据,如果认为应该处理,则网卡就会产生中断信号通知中央处理器,接收该数据帧并传输给操作系统处理。
否则就简单丢弃,所对应节点的网卡就截断,计算机的中央处理器并不参与。
基于SNIFFER的计算机网络攻防安全实验设计
![基于SNIFFER的计算机网络攻防安全实验设计](https://img.taocdn.com/s3/m/27034154804d2b160b4ec032.png)
2009年第5期福建电脑129基于SNIFFER的计算机网络攻防安全实验设计米志强,王晨,蒋春香(湖南现代物流职业技术学院湖南长沙410131)【摘要】:本文针对目前高校计算机网络安全技术教学的缺陷,通过基于Sniffer进行攻防实战来设计计算机网络安全技术实验教学。
并提出网络攻防安全策略。
【关键词】:Sniffer;网络攻防安全;实验设计l、引言<计算机网络安全技术》是一门应用性、实践性很强的专业课程.其实验教学与实践环节不仅是理论教学的深化和补充,对于培养学生综合运用所学知识.解决实际问题的能力。
也起着非常重要的作用。
但实验是本门课的难点也是重点,如何有效的开展计算机网络安全技术实验教学课程。
提高实验教学质量.是值得探讨和研究的问题。
在网络安全实验的教学方法上,针对高职学生的特点,我们采用”实验为主,理论为辅”的教学方法。
以实验带动教学,提高学生的学习兴趣和实际的动手能力。
本人通过长期的计算机网络安全技术教学.利用Sniffer软件来架构计算机网络安全实验,借助Sniffer嗅探工具,设计网络攻防实验。
让同学们得到实战体验,取得很好的效果。
2、Sniffer软件原理及课实验平台设计2.1SnifferSniffer。
又称”嗅探器”。
是一种基于被动侦听原理的网络分析方式.一种利用以太网的特性把网络适配卡置为杂乱(promis—CUOUS)模式状态的工具,一旦网卡设置为这种模式,它就能接收传输在网络上的每一个信息包.该网卡具备”广播地址”,它对所有遇到的每一个数据帧都产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的每一个报文包。
使用这种技术方式,可以监视网络的状态、数据流动情况以及网络上传输的信息。
这样,不管它的接受者或发送者,是不是运行sniffer的主机。
Sniffer将数据存人log文件,当信息以明文的形式在网络上传输时。
便可以使用网络监听的方式来进行攻击。
将网络接口设置在监听模式,便可以将网上传输的源源不断的信息截获。