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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(sniffer设计与实现.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.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;

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

3、其作用是在进入主对话框之前选择网卡设备。类CAdapaterSelDlg:如截图显示,对话框内使用了ComboBox控件,并在ClassWizard里定义了CComboBox的变量m_selAdapter,在类CAdapaterSelDlg中定义了一个public的变量intm_selIndex。在ClassWizard中添加三个成员函数: virtualvoidOnOK();/把选中的设备的序号赋值到m_selIndex中 virtualBOOLOnInitDialog();/初始化对话框,把已经查找出来的网络设备显示在下拉列表中 virtualvoidOnCancel();/弹出对话框,并

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

5、;/IP?ARP?;typedefstructip_header/*IPv4header*/u_charver_ihl;/Version(4bits)+Internetheaderlength(4bits)u_chartos;/Typeofserviceu_shorttlen;/Totallengthu_shortidentification;/Identificationu_shortflags_fo;/Flags(3bits)+Fragmentoffset(13bits)u_charttl;/Timetoliveu_charproto;/Protocolu_shortcrc;/Header

6、checksumu_intsaddr;/Sourceaddressu_intdaddr;/Destinationaddressu_intop_pad;/Option+Paddingip_header;structTCPPacketHead/*TCPheader*/ u_shortSourPort; u_shortDestPort; u_intSeqNo; u_intAckNo; u_charHLen; u_charFlag; u_shortWndSize; u_shortChkSum; u_shortUrgPtr;structUDPPacketHead/*UDPheader*/u_shorts

7、port;/Sourceportu_shortdport;/Destinationportu_shortlen;/Datagramlengthu_shortcrc;/Checksum;structICMPPacketHead/*ICMPheader*/ u_chartype; u_charcode; u_shortchkSum;typedefstructARP_header/ARPheader u_charhardware; u_charproto;/Protocol u_shorthaddresslen; u_shortpaddresslen; u_chartype; u_charsmadd

8、r6;/sourcemacaddress u_intsaddr;/soureipaddress u_chardmaddr6;/destinationmacaddress u_intdaddr;/destinationipaddressARP_header;在ClassWizard里添加成员函数:OnInitDialog(),OnSysCommand(UINTnID,LPARAMlParam),OnPaint(),HCURSOROnQueryDragIcon()等。下面会做具体介绍:BOOLCWincapaDlg:OnInitDialog()函数中,对对话框进行初始化,主要是对listcontr

9、ol控件的初始化操作,添加“数据”,“大小”,“目的端口”,“目的MAC地址”,“目的地址”,“源端口”,“源MAC地址”,“源地址”,“序号”共十列。主要代码如下:m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_list.InsertColumn(0,数据,LVCFMT_LEFT,335);m_list.InsertColumn(0,大小,LVCFMT_LEFT,40);CFont*font=CFont:FromHandle(HFONT):GetStockObject(DEFAULT_GUI_FONT);voi

10、dCWincapaDlg:OnStart()函数是在ClassWizard对IDD_START按钮添加的响应函数,主要是进行数据包的捕获,因为MFC中对pcap_loop()函数不兼容,所以在工程中我使用了线程函数,如上代码所示,而在OnStart()函数中调用线程AfxBeginThread(threadFunc,(LPVOID)this);即可是捕获数据包。流程图中为wincap捕获数据包的流程:线程函数UINTthreadFunc(LPVOIDp) CWincapaDlg*pDlg=static_cast(p); intres; structpcap_pkthdr*header; con

11、stu_char*pkt_data; while(!isStop&(res=pcap_next_ex(adhandle,&header,&pkt_data)=0) if(res=0)/Timeoutelapsed continue; u_chara=s; pDlg-intepretPacket(&a,header,pkt_data);/解释报文 if(res=-1) CStringtmp; tmp.Format(Errorreadingthepackets:%sn,pcap_geterr(adhandle); AfxMessageBox(tmp); exit(1); pcap_close(ad

12、handle); return-1;voidCWincapaDlg:applyFilter(pcap_t*fp,char*packet_filter,bpf_u_int32NetMask,structbpf_programfcode)函数设置过滤规则。在OnStart()函数中调用此函数。通过m_arpFilter;m_icmpFilter;m_ipFilter;m_tcpFilter;m_udpFilter,当选中其中某项时,变量的值变为TRUE型(默认为FALSE),把过滤表达式线程相应的网络协议类型。比如,选中arp协议项,通过判断m_arpFilter=TRUE,strcpy(pack

13、et_filter,arp);将过滤表达式设置为arp,使用pcap_compile(fp,&fcode,packet_filter,1,NetMask)以及pcap_setfilter(fp,&fcode)设置过滤规则。voidCWincapaDlg:intepretPacket(u_char*param,constpcap_pkthdr*header,constu_char*pkt_data)函数,主要是分析数据包,根据接收的数据包的字段类型进行分类。如线程代码所示,在线程中调用此函数。将分析出的数据包的协议,源MAC地址,目的MAC地址,源地址,源端口,目的地址,目的端口,大小,数据等信

14、息都通过格式化xx.Format()函数转换为其对应的格式,添加到listcontrol列表中。下面的流程图为区分四种协议的流程图。ARP:以太网的协议类型值为0x0806;IP:以太网的协议类型值为0x0800;UDP:IP的协议类型值为17;TCP:IP的协议类型值为6;ICMPIP的协议类型值为1。voidCWincapaDlg:insertData(CStrings1,CStrings2,CStrings3,CStrings4,CStrings5,CStrings6,CStrings7,CStrings8,CStrings9,CStrings10)函数将分析出的数据包信息写入listc

15、ontrol列表,函数在intepretPacket()中调用。部分代码如下:intindex; index=m_list.InsertItem(0,s1);m_list.SetItem(index,1,LVIF_TEXT,s2,0,0,0,0);voidCWincapaDlg:OnStop()函数是在ClassWizard对IDD_STOP按钮添加的响应函数,停止捕获数据包,并显示已经捕获的不同协议数据包的数量。在工程中定义4个staticint的全局变量,c_tcp,c_udp,c_icmp,c_arp,在OnStart函数中对其值初始化为0,在intepretPacket函数中在相应的协

16、议中进行累加,最后用MessageBox把其值显示出来。以下为设置ARP过滤的捕获停止的截图:voidCWincapaDlg:OnClear()函数是在ClassWizard对IDD_CLEAR按钮添加的响应函数,清除listcontrol列表中的数据内容,使用m_list.DeleteAllItems()。voidCWincapaDlg:OnSavelist()函数在ClassWizard对IDD_SAVELIST按钮添加的响应函数,用于将listcontrol列表中的数据内容存放在数据库中。我所使用的数据库为MYSQL,在数据库中建立了命名为sniffer的表单,在安装数据库时,设定用户名

17、为root,密码为123。连接数据库使用的代码: if(m_list.GetItemCount()=0) MessageBox(没有数据要存储!); return; u_inti; MYSQL*db; db=mysql_init(0);/初始化数据库 CStringstr1,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;idaddr;packet.arp.daddr=arp-sad

18、dr;memcpy(packet.arp.dest_addr,arp-sour_addr,6);memcpy(packet.arp.sour_addr,packet1,6);for(i=0;i18;i+) packet.arp.paddingi=1;psend=(unsignedchar*)&packet;/强制转换发送的数据包的类型 /发送数据包pcap_sendpacket(adhandle,psend,sizeof(psend);3 试验中出现的问题以及解决方案(1) ComboBox控件无法下拉工程运行时发现,对话框中的下拉列表只能显示第一个网卡的信息。解决方法:把鼠标放在下拉列表的处

19、,当光标的形状变成上下箭头时,点击下拉框的中间白点,向下拉即可。(2) Wincap中的部分函数与MFC中的函数redefine,重定义在link过程中,出现wincap中的一些函数以及变量重定义的错误,比如pcap_complile等。解决方法:在StdAfx.h文件中加上#defineWIN32_LEAN_AND_MEAN#include#include(3)编译时出现如下问题:packet32.h(231):errorC2079:IPAddressusesundefinedstructsockaddr_storage解决方法:1.向winpcap库的packet32.h文件中加入如下代码

20、,且应位于“structnpf_if_addr”定义之前:#ifndef_SS_PAD1SIZEstructsockaddr_storageu_charsa_len;u_charsa_family;u_charpadding128;#endif2.将sockaddr_storage改成sockaddr。(4)添加mysql时出现错误解决方式:把mysql的Include,Lib.debug目录添加进VC6.0的环境变量中;针对每一个项目,先用VC打开项目,然后在Project-Settings,择Link,在Object/librarymodules的输入框里添加libmysql.lib。在S

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

22、置捕获过滤规则 在TCP、UDP、ARP、ICMP、等协议都能进行重点分析 能按照协议格式进行格式化显示 有可视化操作界面,易于使用 对ARP欺骗有了比较系统的了解,可以进行比较简单的ARP欺骗实验体会:通过自学,亲自动手,一点一滴的积累并实现,完成了一个具备了基本功能的网络嗅探器,受益良多。 学习了WinPcap开发工具包,对其在网络底层实现和接口运用的方面,有了更加清楚、较为深入的认识与掌握,熟练学会了如何利用WinPcap工具开发上实现网络协议编程。 通过实现了一个基于WinPcap的网络嗅探器,我对网络协议栈有了更加深入的了解与认识,并懂得了基本的网络协议栈的实现与应用,对以后网络学习和网络编程,将会大有裨益。 通过自己制作网络嗅探器,我对网络嗅探器的开发流程、基本原理和应用领域,有了大体的认识与掌握,知道制作网络嗅探器的基本方法与步骤,并知道如何利用网络嗅探器应用于自己所关心的网络领域。 通过近一个多星期的学习、理解、实践、掌握、应用WinPcap和网络嗅探器,我对新知识、新事物的学习、实践与应用的方法与途径,有了更加深入的认识与掌握,能够较为快速的汲取新知识、运用新概念、应用于新领域,这种能力的培养,才是最重要的,也将是对我以后的学习和工作,会产生很好的引导与启发作用。 通过学习ARP欺骗,可以简单的完成黑客的基本工作。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1