解析ARP数据包-计算机网络课程设计_第1页
解析ARP数据包-计算机网络课程设计_第2页
解析ARP数据包-计算机网络课程设计_第3页
解析ARP数据包-计算机网络课程设计_第4页
解析ARP数据包-计算机网络课程设计_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上计算机网络课程设计报告题 目: 解析ARP数据包 姓 名: 学 号: 同组姓名: 专业班级: 指导教师: 评阅意见:评定成绩: 指导老师签名:年 月 日 目 录一、课程设计目的:2二、课程设计要求:2三、课程设计分析31课程设计中的重点及难点32.参考算法33.核心代码4四、源程序及运行截图5五、心得体会9六、参考文献10一、课程设计目的:本课程设计的目的是对网络上的ARP数据包进行解析,从而熟悉ARP数据包的结构,对ARP协议有更好的理解和认识。二、课程设计要求:通过编制程序,获取网络中的ARP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。程

2、序的具体要求如下所示:1以命令行的形式运行,如下所示:arpparse logfile其中,arpparse为程序名;logfile为日志文件名。2程序输出内容如下所示:源IP地址 源MAC地址 目的IP地址 操作时间各部分的说明如下所示:l 源IP地址:输出ARP消息格式中的源IP地址字段。l 源MAC地址:输出ARP消息格式中的源物理地址字段。l 目的IP地址:输出ARP消息格式中的目的IP地址字段。l 目的MAC地址:输出ARP消息格式中的目的物理地址字段。l 操作:输出ARP消息格式中的操作字段,若为ARP请求,则为1,若为ARP应答,则为2。l 时间:该ARP包产生的时间3.当程序接

3、收到键盘输入Ctrl+C时退出。三、课程设计分析1课程设计中的重点及难点1) 程序中会用到Winpcap,Winpcap是Win32环境下数据包捕获的开放代码函数库。基于Winpcap的应用程序一般按照下面几个步骤进行设计:l 输出网卡设备列表。l 选择网卡并打开。l 捕获数据包时,可能需要设置过滤器。l 捕获数据包或者发送数据包。2) 在程序设计过程中需要注意网络主机字节顺序的转化。由于不同的计算机系统所采用的数据表示方式不同,对于2B或4B的数据,有的采用低字节地址存放数据的高权值位,而有的却以低地址字节存放数据低权位值,在网络的数据传输中,我们应该统一表示,所以我们在捕获数据包后,应将数

4、据包头部的表示长度或类型的数据转换成本地机的表达形式。可以利用函数ntohs()将网络字节序转换为主机字节序。3) 选择网卡并打开时,注意选择可用的网卡。2.参考算法1) 取得当前网卡设备列表。2) 选择Ethernet网卡并打开,注意判断所选网卡是否为实际存在的可用网卡。3) 设置过滤器,此处的过滤器正则表达式为“arp”或者“ether protoarp”。4) 捕获数据包并进行处理(包括输出各IP地址,物理地址,操作类型以及时间)。由于要记录日志文件,为了便于输出流参数,建议采用pcap_next_ex()函数。流程图如下图所示:开始获取网卡列表选取Ethernet网卡打开网卡(混杂模式

5、)编译设置过滤器捕获ARP包并将其相应内容输出3.核心代码l ARP数据包结构struct arppkt unsigned short hdtyp; /硬件类型。值0001表示其为Ethernetunsigned short protyp; /协议类型。值0800表示上层协议为IPunsigned char hdsize; /硬件地址长度。值为06unsigned char prosize; /协议地址长度。值为04unsigned short op; /操作值为0001/0002,分别表示ARP请求/应答u_char smac6; /源MAC地址,6Bu_char sip4; /源IP地址,

6、4Bu_char dmac6; /目的MAC地址u_char dip4; /目的IP地址;l 获取网络设备列表,并以混杂模式打开网络设备/获取网络设备列表if(pcap_findalldevs(&alldevs,errbuf)=-1)cout<<"Error in pcap_findalldevs:"<<errbuf;return;/选择Ethernet卡for(d=alldevs;d;d=d->next) /以混杂模式打开网卡,以接受所有的帧if(adhandle=pcap_open_live(d->name,1000,1,30

7、0,errbuf)=NULL)cout<<"nUnable to open the adapter."pcap_freealldevs(alldevs); /释放设备列表return;if(pcap_datalink(adhandle)=DLT_EN10MB&&d->addresses!=NULL)break;l 编译过滤器并设置过滤器,只捕获ARP数据包char packet_filter=”ether proto arp”; /过滤,选择arp协议if(pcap_compile(adhandle,&fcode,packet_fi

8、lter,1,netmask)<0) cout<<"nUnable to compile the packet filter.Check the syntax.n" pcap_freealldevs(alldevs); return;/设置过滤器if(pcap_setfilter(adhandle,&fcode)<0) cout<<"nError setting the filter.n" pcap_freealldevs(alldevs); return;l 循环捕获ARP包,并进行解析while(resul

9、t=pcap_next_ex(adhandle,&header,&pkt_data)>=0) 输出ARP数据包的各个域的内容到文件和屏幕上 四、源程序及运行截图1.源程序如下:#include<winsock2.h>#pragma comment(lib,"Ws2_32.lib") /用到ntobs()/等同于点击"project-setting-link"打开object/library module编辑框后加入文件#pragma comment(lib,"wpcap.lib")#include &

10、quot;pcap.h" /此头文件没有包含在VC中,需要另外加入#include<fstream.h>#include<iomanip.h> /格式化输出需要用到#include<conio.h> /用到_getch()/注意到接收的数据包头中代表类型,数据长度的字段采用的是big-endian/所以对于2B/4B的数据要用ntohs()转换为本机形式/ARP包结构struct arppkt unsigned short hdtyp; /硬件类型。值0001表示其为Ethernetunsigned short protyp; /协议类型。值080

11、0表示上层协议为IPunsigned char hdsize; /硬件地址长度。值为06unsigned char prosize; /协议地址长度。值为04unsigned short op; /操作值为0001/0002,分别表示ARP请求/应答u_char smac6; /源MAC地址,6Bu_char sip4; /源IP地址,4Bu_char dmac6; /目的MAC地址u_char dip4; /目的IP地址;void packet_handler(const pcap_pkthdr *header,const u_char *pkt_data,ostream& out)

12、;void main(int argc,char *argv )if(argc!=2)cout<<"Usage:arpparse logfilename"<<endl;cout<<"press any key to continue."<<endl;_getch();return;pcap_if_t *alldevs;pcap_if_t *d;pcap_t *adhandle;char errbufPCAP_ERRBUF_SIZE;u_int netmask;char packet_filter="

13、;ether proto arp"struct bpf_program fcode;struct pcap_pkthdr *header;const u_char *pkt_data;if(pcap_findalldevs(&alldevs,errbuf)=-1)cout<<"Error in pcap_findalldevs:"<<errbuf;return;for(d=alldevs;d;d=d->next) if(adhandle=pcap_open_live(d->name,1000,1,300,errbuf)=

14、NULL)cout<<"nUnable to open the adapter."pcap_freealldevs(alldevs);return;if(pcap_datalink(adhandle)=DLT_EN10MB&&d->addressess!=NULL)break;if(d=NULL)cout<<"nNo interfaces found! Make sure Winpcap is installed.n"return;/获得子网掩码netmask=(sockaddr_in *)(d->ne

15、tmask)->sin_addr.s_un.s_addr;/编译过滤器,只捕获ARP包if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)<0) cout<<"nUnable to compile the packet filter.Check the syntax.n" pcap_freealldevs(alldevs); return;/设置过滤器if(pcap_setfilter(ashandle,&fcode)<0) cout<<"nErr

16、or setting the filter.n" pcap_freealldevs(alldevs); return;cout<<"ttlistening on "<<d->description<<"."<<endl<<endl;/显示提示信息及每项含义ofstream fout(argv1,ios:app); /日志记录文件/为了查看日志时的方便,其中加入了日期记录time_t t;time(&t);fout.seekp(0,ios:end);if(fout.tell

17、p()!=0)fout<<endl;fout<<"ttARP request(1)/reply(2) on"<<ctime(&t);cout<<Sour Ip Addr"<<" "<<"Sour MAC Address"<<" "<<"Des Ip Addr"<<" "<<"Des MAC Address"<<

18、;" "<<"OP"<<" "<<"Time"<<endl;fout<<Sour Ip Addr"<<" "<<"Sour MAC Address"<<" "<<"Des Ip Addr"<<" "<<"Des MAC Address"<<&qu

19、ot; "<<"OP"<<" "<<"Time"<<endl;/释放设备列表pcap_freealldevs(alldevs);int result;while(result=pcap_next_ex(adhandle,&header,&pkt_data)>=0) if(result=0)continue;packer_handler(header,pkt_data,cout);packet_handler(header,pkt_data,fout);vo

20、id packet_handler(const pcap_pkthdr *header,const u_char *pkt_data,ostream& out) arpkt* arph = (arppkt *)(pkt_data +14); for(int i=0;i<3;i+) out<<int(arph->sipi)<<'.' out.setf(ios:left); out<<setw(3)<<int(arph->sip3)<<" " out.unsetf(ios:up

21、percase); for(i=0;i<5;i+) out<<hex<<setw(2)<<int(arph->smaci)<<'-' out<<hex<<setw(2)<<int(arph->smac5)<<" " out.fill(oldfillchar); out.unsetf(ios:hex|ios:uppercase); for(i=0;i<3;i+) out<<int(arph->dip3)<<

22、9;.'out.unsetf(ios:left);/输出目的MAC地址out.fill('0');out.setf(ios:uppercase);for(i=0;i<5;i+)out<<hex<<setw(2)<<int(arph->dmaci)<<'-'out.fill(oldfillchar);out.unsetf(ios:hex|ios:uppercase);out<<ntohs(arph->op)<<" "struct tm *ltime;ltime=localtime(&header->ts.tv_sec);out.fill('0');out<<ltime->tm_hour<<':'<<setw(2)<<ltime->

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论