ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:462.73KB ,
资源ID:17708772      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-17708772.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(sniffer设计与实现.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

sniffer设计与实现.docx

1、sniffer设计与实现信息安全专业程序实践四网络安全与网络管理实践报告软件学院 实验成绩表2010年版1.实践目的(1)掌握sniffer程序原理;(2)学习Wincap编程(3)能够使用Wincap实现数据包的捕获(4)设计和实现一个sniffer程序(5)掌握ARP欺骗原理,并能够实施ARP欺骗2.实践内容(1)使用Winpcap实现数据包的捕获:;(2)分析数据包:处理捕获的数据包,解析出其协议类型、源MAC地址、目的MAC地址、源IP地址、目的IP地址、源端口、目的端口和数据部分,然后将这些信息保存在文件中。最终根据文件内容统计以下协议的数据流量:网络层:IP,ICMP;传输层:TC

2、P,UDP.(3)将捕获的信息存放在数据库中,根据捕获的信息进行流量统计;(4)ARP欺骗:截获网络上的数据包,对其进行分析,获取源和目的地址,用该数据包的目的IP地址来伪装自己的IP地址,并按照ARP报文格式,对该数据包的发送者发送ARP欺骗包,并验收ARP欺骗成功。(5)界面化:利用MFC构建图形界面,便于用户操作。3.实践过程1Sniffer网络嗅探器使用MFC构建图形界面,工程基于对话框模式建立.工程共有两个对话框,分别为主对话框IDD_WINCAPA_DLG,其类名为CWincapaDlg,以及新建的对话框IDD_DIALOG,其类名为CAdapaterSelDlg,其作用是在进入主

3、对话框之前选择网卡设备。 类CAdapaterSelDlg:如截图显示,对话框内使用了Combo Box控件,并在ClassWizard里定义了CComboBox的变量m_selAdapter,在类CAdapaterSelDlg中定义了一个public的变量int m_selIndex.在ClassWizard中添加三个成员函数: virtual void OnOK();/把选中的设备的序号赋值到m_selIndex中 virtual BOOL OnInitDialog();/初始化对话框,把已经查找出来的网络设备显示在下拉列表中 virtual void OnCancel();/弹出对话框,

4、并退出程序 获取本地网卡列表所使用的函数以及代码在实验指导书中都有,这里就不过多介绍了。主对话框:主对话框中使用了check box控件,list control控件,以及五个button控件。在ClassWizard里定义变量:list control控件变量CListCtrl m_list,BOOL型的check box变量m_arpFilter; m_icmpFilter; m_ipFilter; m_tcpFilter; m_udpFilter。在WincapaDlg。cpp中定义结构体:struct ETHDR/以太网头部 u_char eh_dst6; u_char eh_src6

5、; u_short eh_type;/IP?ARP?;typedef struct ip_header/ IPv4 header / u_char ver_ihl; / Version (4 bits) + Internet header length (4 bits) u_char tos; / Type of service u_short tlen; / Total length u_short identification; / Identification u_short flags_fo; / Flags (3 bits) + Fragment offset (13 bits) u

6、_char ttl; / Time to live u_char proto; / Protocol u_short crc; / Header checksum u_int saddr; / Source address u_int daddr; / Destination address u_int op_pad; / Option + Paddingip_header;struct TCPPacketHead / TCP header/ u_short SourPort; u_short DestPort; u_int SeqNo; u_int AckNo; u_char HLen; u

7、_char Flag; u_short WndSize; u_short ChkSum; u_short UrgPtr;;struct UDPPacketHead/ UDP header*/ u_short sport; / Source port u_short dport; / Destination port u_short len; / Datagram length u_short crc; / Checksum;struct ICMPPacketHead /*ICMP header/ u_char type; u_char code; u_short chkSum;;typedef

8、 struct ARP_header/ARP header u_char hardware; u_char proto; / Protocol u_short haddresslen; u_short paddresslen; u_char type; u_char smaddr6;/source mac address u_int saddr;/soure ip address u_char dmaddr6;/destination mac address u_int daddr;/destination ip addressARP_header;在ClassWizard里添加成员函数: O

9、nInitDialog(), OnSysCommand(UINT nID, LPARAM lParam),OnPaint(),HCURSOR OnQueryDragIcon()等。下面会做具体介绍:BOOL CWincapaDlg:OnInitDialog()函数中,对对话框进行初始化,主要是对list control控件的初始化操作,添加“数据”,“大小”,“目的端口”,“目的MAC地址”,“目的地址”,“源端口”,“源MAC地址”,“源地址”,“序号”共十列。主要代码如下:m_list。SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDL

10、INES);m_list。InsertColumn(0,”数据”,LVCFMT_LEFT,335);m_list.InsertColumn(0,”大小”,LVCFMT_LEFT,40);CFont font = CFont:FromHandle((HFONT):GetStockObject(DEFAULT_GUI_FONT));void CWincapaDlg:OnStart()函数是在ClassWizard对IDD_START按钮添加的响应函数,主要是进行数据包的捕获,因为MFC中对pcap_loop()函数不兼容,所以在工程中我使用了线程函数,如上代码所示,而在OnStart()函数中调用

11、线程AfxBeginThread(threadFunc, (LPVOID)this);即可是捕获数据包。流程图中为wincap捕获数据包的流程:线程函数UINT threadFunc (LPVOID p) CWincapaDlg pDlg = static_castCWincapaDlg (p) ; int res; struct pcap_pkthdr header; const u_char pkt_data; while(!isStop & (res = pcap_next_ex(adhandle, header, pkt_data)) = 0) if(res = 0)/Timeout

12、elapsed continue; u_char a= s; pDlgintepretPacket(a, header, pkt_data); /解释报文 if(res = 1) CString tmp; tmp.Format(Error reading the packets: %sn”, pcap_geterr(adhandle)); AfxMessageBox(tmp); exit(1); pcap_close(adhandle); return 1; void CWincapaDlg::applyFilter(pcap_t *fp, char *packet_filter, bpf_u

13、_int32 NetMask, struct bpf_program fcode)函数设置过滤规则.在OnStart()函数中调用此函数。通过m_arpFilter; m_icmpFilter; m_ipFilter; m_tcpFilter; m_udpFilter,当选中其中某项时,变量的值变为TRUE型(默认为FALSE),把过滤表达式线程相应的网络协议类型。比如,选中arp协议项,通过判断m_arpFilter=TRUE,strcpy(packet_filter,”arp);将过滤表达式设置为arp,使用pcap_compile(fp, fcode, packet_filter, 1,

14、 NetMask)以及pcap_setfilter(fp, &fcode)设置过滤规则。void CWincapaDlg::intepretPacket(u_char param, const pcap_pkthdr *header, const u_char *pkt_data)函数,主要是分析数据包,根据接收的数据包的字段类型进行分类.如线程代码所示,在线程中调用此函数.将分析出的数据包的协议, 源MAC地址,目的MAC地址,源地址,源端口,目的地址,目的端口,大小, 数据等信息都通过格式化xx。Format()函数转换为其对应的格式,添加到list control列表中。下面的流程图为区

15、分四种协议的流程图。ARP:以太网的协议类型值为0x0806;IP:以太网的协议类型值为0x0800;UDP:IP的协议类型值为17;TCP: IP的协议类型值为6;ICMP IP的协议类型值为1。void CWincapaDlg::insertData( CString s1, CString s2, CString s3, CString s4, CString s5, CString s6, CString s7, CString s8,CString s9,CString s10)函数将分析出的数据包信息写入list control列表,函数在intepretPacket()中调用.部

16、分代码如下:int index; index = m_list.InsertItem(0,s1);m_list.SetItem(index,1,LVIF_TEXT,s2, 0, 0, 0,0);void CWincapaDlg::OnStop()函数是在ClassWizard对IDD_STOP按钮添加的响应函数,停止捕获数据包,并显示已经捕获的不同协议数据包的数量。在工程中定义4个static int的全局变量,c_tcp,c_udp,c_icmp,c_arp,在OnStart函数中对其值初始化为0,在intepretPacket函数中在相应的协议中进行累加,最后用MessageBox把其值显

17、示出来。以下为设置ARP过滤的捕获停止的截图:void CWincapaDlg:OnClear()函数是在ClassWizard对IDD_CLEAR按钮添加的响应函数,清除list control列表中的数据内容,使用m_list。DeleteAllItems().void CWincapaDlg::OnSavelist()函数在ClassWizard对IDD_SAVELIST按钮添加的响应函数,用于将list control列表中的数据内容存放在数据库中。我所使用的数据库为MYSQL,在数据库中建立了命名为sniffer的表单,在安装数据库时,设定用户名为root,密码为123。连接数据库使

18、用的代码: if(m_list。GetItemCount()=0) MessageBox(”没有数据要存储!!); return; u_int i; MYSQL db; db=mysql_init(0);/初始化数据库 CString str1,str2,str3,str4,str5,str6,str7,str8,str9,str10,sqls; if(mysql_real_connect(db,”localhost,”root,123”,sniffer,3306,NULL,0)/连接数据库 for(i=1;isour_addr,6);memcpy(packet。arp.sour_addr,p

19、acket1,6); for (i = 0; i 18; i+) packet.arp。paddingi = 1;psend=(unsigned char)&packet;/强制转换发送的数据包的类型 /发送数据包pcap_sendpacket(adhandle,psend,sizeof(psend);3试验中出现的问题以及解决方案(1)Combo Box控件无法下拉工程运行时发现,对话框中的下拉列表只能显示第一个网卡的信息.解决方法:把鼠标放在下拉列表的处,当光标的形状变成上下箭头时,点击下拉框的中间白点,向下拉即可.(2)Wincap中的部分函数与MFC中的函数redefine,重定义在l

20、ink过程中,出现wincap中的一些函数以及变量重定义的错误,比如pcap_complile等。解决方法:在StdAfx。h文件中加上#define WIN32_LEAN_AND_MEANincludewindows。hinclude(3)编译时出现如下问题:packet32。h(231) : error C2079: IPAddress uses undefined struct sockaddr_storage解决方法:1。向winpcap库的packet32.h文件中加入如下代码,且应位于“struct npf_if_addr”定义之前: #ifndef _SS_PAD1SIZE st

21、ruct sockaddr_storage u_char sa_len; u_char sa_family; u_char padding128; ; #endif 2.将sockaddr_storage 改成 sockaddr。 (4)添加mysql时出现错误解决方式:把mysql的Include,Lib。debug目录添加进VC6。0的环境变量中;针对每一个项目,先用VC打开项目,然后在”ProjectSettings”,择Link”,在”Object/library modules”的输入框里添加libmysql.lib ”。在StdAfx。h文件中加上 include ”afxdb。h

22、和include ”mysql。h。 (5)在arp欺骗的工程中出现连接错误,需要在”Project-Settings”,择”Link”,在”Object/library modules”的输入框里添加 wsock32。lib 。4.实践总结实验结论:通过了近一个多星期的努力学习与实践运用,终于制作出了一个实现网络嗅探的基本功能的网络嗅探器,较为合理、圆满的完成了本实验的各项实验要求,取得了应有的实验效果.能列出监测主机的所有网卡,并显示在网卡列表框中。能选择其中的一个网卡进行监听,并记录器数据信息能捕获并显示流经网卡的数据包,并做相应的分析和统计能设置捕获过滤规则在TCP、UDP、ARP、I

23、CMP、等协议都能进行重点分析能按照协议格式进行格式化显示有可视化操作界面,易于使用对ARP欺骗有了比较系统的了解,可以进行比较简单的ARP欺骗实验体会: 通过自学,亲自动手,一点一滴的积累并实现,完成了一个具备了基本功能的网络嗅探器,受益良多。学习了WinPcap开发工具包,对其在网络底层实现和接口运用的方面,有了更加清楚、较为深入的认识与掌握,熟练学会了如何利用WinPcap工具开发上实现网络协议编程.通过实现了一个基于WinPcap的网络嗅探器,我对网络协议栈有了更加深入的了解与认识,并懂得了基本的网络协议栈的实现与应用,对以后网络学习和网络编程,将会大有裨益。通过自己制作网络嗅探器,我对网络嗅探器的开发流程、基本原理和应用领域,有了大体的认识与掌握,知道制作网络嗅探器的基本

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2