《计算机网络课程设计报告--解析Ethernet ARP 数据包.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计报告--解析Ethernet ARP 数据包.docx(9页珍藏版)》请在第一文库网上搜索。
1、计算机网络课程设计报告题目:解析EthernetARP数据包一、问题描述通过编制程序,获取网络中的ARP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。程序的具体要求如下所示:1,以命令行的形式运行,如下所示:arparp.1og其中,arp为程序名arp.1og为日志文件名。2,程序输出内容如下所示:源IP地址源MAC地址目的IP地址目的MC地址操作时间各部分的说明如下所示:源IP地址:输出ARP消息格式中的源IP地址字段源NIAC地址:输出ARP消息格式中的源物理地址字段目的IP地址:输出ARP消息格式中的目的IP地址字段目的MAC地址:输出ARP消息格式中的目的物理
2、地址字段操作:输出ARP消息格式中的操作字段,若为ARP请求,则为1,若为ARP应答,则为2,时间:该ARP包产生的时间3,当程序接收到键盘输入CtrI+C时字段退出。二、概要设计首先取得当前网卡设备列表,利用PCAP提供的PCAP_finda11devs()函数实现此功能.其次选择Ethernet网卡并打开,注意判断所选网卡是否为实际存在的可用网卡。然后设置过滤器,使其只捕获ARP包.过滤函数PCAP_comp1ie和PCAP_setfi1ter.设置函数为PCAP_setfi1ter().最后捕获数据包并进行处理包括输出各IP地址,物理地址,操作类型以及时间)。由于要记录日志文件,为了便于
3、输出流参数,使pcap_next_ex()函数。ARP数据结构及流程图如下。ARP数据包结构structarppktunsignedshorthdtyp;unsignedshortprotyp;unsignedcharhdsize;unsignedcharprosize;unsignedshortop;u_charsmac6;u_charsip4;u_chardmac6;u_chardip4;硬件地址值OOO1表示其为Ethernet/协议类型值0800表示上层协议为IP硬件地址长度协议地址长度操作值源MAC地址源IP地址目的MAe地址目的IP地址;开始三、详细设计voidpacket_han
4、d1er(constpcap_pkthdr*header,constu_char*pkt_data,OStream&);voidmain()(char*argv=,arp.1og”;网络设备结构错误信息子网掩码过滤,选择ARPpcap_if_t*a1Idevs;pcap_if_t*d;pcap_t*adhand1e;charerrbufPCAP_ERRBUF_SIZE;u_intnetmask;charpacket_fi1ter=etherprotoarp”;协议structbpf_programfcode;structpcap_pkthdr*header;constu_char*pkt_da
5、ta;获取本机网卡列袤if(pcap_finda1Idevs(&a11devs,errbuf)=-1)(coutzzErrorinpcap_finda1Idevs:,errbuf;return;inti=0;CoUt”本机网卡列表如下:,znext)(printf(z/%d.%s”,+i,d-name);if(d-description)printfC(%s)n”,d-description);e1sePrintf(没有可用的网络设备)n);if(i=O)printf(,Nointerfacesfound!MakesureWinPcapisinsta11ed.n);return;)选择一个Et
6、hernetka卡intinum;printf(zzEntertheinterfacenumber(1-%d):z/,i);SCanf(%d”,&inum);for(;inumi;)(printf(,Interfacenumberoutofrange,nzz);printf(z,P1easeinput,Ctr1+C,finishthisoperation0rnEntertheinterfacenumber(1-%d):,i);scanf(z,%d,z,&inum);)/跳转到选中的适配器for(d=a11devs,i=0;inext,i+);以混杂模式打开网卡,接受所有的帧if(adhand1
7、e=pcap_open_1ive(d-name,1000,1,300,errbuf)=NU11)(coutaddresses!=NU11)检查薮据链路是否为Ethernet(D1T-EN1OMB)(cout,Errorzaddresses-netmask)-sin_addr.S_un.S_addr;调试过滤器,只捕获ARP包if(pcap_compi1e(adhand1e,&fcode,packet_fi1ter,1,netmask)0)coutz*nUnab1etocompi1ethepacketfi1ter.Checkthesyntax.n;pcap_freea1Idevs(a11devs
8、);return;设置过滤器if(pcap_setfiIter(adhand1e,&fcode)0)(coutznErrorsettingthefi1ter,n,z;pcap_freea1Idevs(a11devs);return;)coutzzttIisteningonz*descriptionz*.z*end1end1;ofstreamfout(argv,ios:app);日志记录文件加入日期记录time_tt;time(&t);fout.seekp(0,ios:end);if(int(fout.te11p()!=0)foutend1;fout,ttARPrequest(1)/rep1ay
9、(2)onz,ctime(&t);cout,sourIPAddr,zSourMACAddress”DesIPAddrz,DesMACAddress0PVz,Timez,end1;fout,SourIPAddrSourMACAddress”,z,z,DesIPAddr,z,zDesMACAddress0P,Timez,=0)(if(resu1t=0)continue;packet_handIer(header,pkt_data,cout);解析ARP包,输出结果packet_hand1er(header,pkt_data,fout);输出到文件)voidpacket_hand1er(constp
10、cap_pkthdr*header,constu_char*pkt_data,OStreamfeout)(inti;从截获的数据帧中找到arp包头的位置arppkt*arph=(arppkt*)(pkt_data+14);14为EthCrnCt帧头的长度输出源IP地址for(i=0;i3;i+)outsipi),.,;out.setf(ios:1eft);outsetw(3)sip3)“;out.unsetf(ios:1eft);输出源MAC地址charO1dfi11char=OUt.fi11(10,);out.setf(ios:!uppercase);/MAC地址以分开-的大写字符表示for
11、(i=0;i5;i+)outhexsetw(2)smaci);outhexsetw(2)smac5);out.fi11(o1dfiI1char);输出目的的IP地址out.unsetf(ios:hexios:uppercase);for(i=0;i3;i+)outdipi),.,;out.setf(ios:1eft);outsetw(3)dip3),z;out.unsetf(ios:1eft);输出目的MAC地址out.fi11(,0,);out.setf(ios:!uppercase);for(i=0;i5;i+)outhexsetw(2)dmaci),;outhexsetw(2)dmac5
12、),z;out.fi11(o1dfiI1char);out.unsetf(ios:hexios:uppercase);outop)ts.tv_sec;Itime=Ioca1time(&time);out.fi11(,0,);outtm_hour,setw(2)tm_min,tm-sec;out.fi11(o1dfi11char);outend1;四、调试分析在最开始运行该程序时,出现了很多问题。比如:没有正确的导入本程序所需要的数据库;重复定义一个变量;运行界面不够美观。对于没能正确导入数据库,我们充分发挥了网络的功能,下载、安装并导入了数据库。将程序改动后,重复定义变量和运行界面不够美观的问题也解决了。五、心得体会本次课程设计,完成了解析ARP数据包的编写。在此期间我们查阅了大量的案例,学到了很多知识,使我们对计算机网络有了更深入的了解。在具体实现获取网络中的ARP数据包解析数据包的内容,并将其写入日志文件的过程中,是我们更加清楚物理地址、IP地址的关联,源地址与目的地址的关系,