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

下载本文档

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

文档简介

1、 沈阳理工大学课程设计专用纸 No14成 绩 评 定 表学生姓名班级学号1103050409专 业计算机科学与技术课程设计题目解析ARP数据包评语组长签字:成绩日期 20 年 月 日课程设计任务书学 院信息科学与工程学院专 业计算机科学与技术学生姓名班级学号课程设计题目解析ARP数据包实践教学要求与任务:1. 课程设计的目的是对网络上的ARP数据包进行解析,从而熟悉ARP数据包的结构,对ARP协议有更好的理解和认识。2. 通过编写程序,获取网络中的ARP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。工作计划与进度安排:第15周星期一:设计任务分析和总体设计星期二:软件算

2、法和流程设计星期三:软件编码实现星期四:软件总体调试星期五:交课程设计报告、答辩、验收程序指导教师: 201 年 月 日专业负责人:201 年 月 日学院教学副院长:201 年 月 日目 录摘 要1 课程设计目的.12 课程设计要求13相关知识14课程设计分析15程序代码16运行结果与分析17 个人心得.18参考文献1沈阳理工大学摘 要 本文首先介绍了解析ARP数据包课程设计的目的与意义,本次课程设计的要求,接着说明了,什么是ARP?ARP数据报消息格式以及ARP协议的工作流程加强我们对ARP协议的认识,然后分析了本次课程设计的难点、重点、参考算法、核心代码,以及对运行结果的分析,还有一些相关

3、知识的拓展。最后对本次课设进行了个人心得的总结。1课程设计目的 课程设计的目的是对网络上的ARP数据包进行解析,从而熟悉ARP数据包的结构,对ARP协议有更好的理解和认识。2 课程设计要求 通过编写程序,获取网络中的ARP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。程序的具体要求如下所示:(1) 以命令行的形式运行,如下所示:ParseArp log_file其中,arpparse为程序名;log_file为日志文件名。(2)程序输出内容如下所示:源IP地址 源MAC地址 目的IP地址 目的MAC地址 操作 时间各部分的说明如下所示:源IP地址:输出ARP消息格式中的

4、源IP地址字段源MAC地址:输出ARP消息格式中的源物理地址字段目的IP地址:输出ARP消息格式中的目的IP地址字段。目的MAC地址:输出ARP消息格式中的目的物理地址字段 操作:输出ARP消息格式中的操作字段,若为ARP请求, 则为1,若为ARP应答,则为2。时间:该ARP包产生的时间。(3)当程序接收到键盘输入Ctrl+C时字段退出。3 相关知识(1)什么是ARP地址解析协议(Address Resolution Protocol,ARP)是在仅知道主机的IP地址时确定其物理地址的一种协议。因IPv4和以太网的广泛应用,其主要用作将IP地址翻译为以太网的MAC地址,但其也能在ATM和FDD

5、IIP网络中使用。从IP地址到物理地址的映射有两种方式:表格方式和非表格方式。ARP具体说来就是将网络层(IP层,也就是相当于OSI的第三层)地址解析为数据连接层(MAC层,也就是相当于OSI的第二层)的MAC地址。在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议栈中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(a

6、ddress resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。 另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的某个端口的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理(ARP Proxy)。(2)ARP数据报的消息格式网络上的每台主机或设备都有一个或多个IP地址。IP地址是网络层的地址,在网络层,数据被组装成IP包。但是发送

7、IP包需要物理设备的支持(通常是Ethernet设备,在本课程设计中我们指定为Ethernet设备),即发送端必须知道目的物理地址才能将IP包发送出去,所以需要一种将IP地址映射为物理地址的机制。ARP协议就是用来完成这个任务的。ARP协议能够在同一个物理网络中,在给定目的主机或设备的IP地址的条件下,得到目的主机或设备的物理地址。ARP协议的数据包格式如图所示: 0 8 16 24 31(位) 硬件类型 协议类型物理地址长度协议地址长度 操作 源物理地址(八位组03) 源物理地址(八位组45) 源IP地址(八位组01) 源IP地址(八位组23) 目的物理地址(八位组01) 目的物理地址(八位

8、组25) 目的IP地址(八位组03)ARP数据包的消息格式下面对数据包的各个部分进行说明l 硬件类型:指定硬件接口类型。例如,值为1表示Ethernetl 协议类型:指定发送方支持的上层协议的类型l 物理地址长度:指定物理(硬件)地址的长度l 协议地址长度:网络层协议的地址长度。若为IP协议,其值为4l 操作:指定ARP的操作类型,例如,1表示ARP请求,2表示ARP应答l 源物理地址:指定发送方的IP地址l 目的物理地址:指定目的物理地址。l 目的IP地址:指定目的IP地址ARP分组必须在数据链路层中被封装成侦,才能发送出去封装形式如图所示ARP消息帧头部 帧数据 将ARP数据包封装成一个帧

9、(3)ARP协议的工作流程。1) 在发送一个ARP分组之前,源主机首先根据目的IP地址,在本地ARP高速缓存表中查找与之对应的目的物理地址。如果找到对应的物理地址,就不用进行地址解析,否则需要进行地址解析。2) 实现地址解析的第一步是产生ARP请求分组。在相应的字段写入本地主机的源物理地址、源IP地址,在目的物理地址字段写入0,并在操作字段写入1。3) 将ARP分组发送到本地的数据链路层,并封装成帧。以源物理地址作为源地址,以物理广播地址(FF-FF-FF-FF-FF-FF)作为目的地址,通过物理层发送出去。4) 由于采用了广播地址,因此网段内所有的主机或设备都能接受到该帧。除了目的主机外,所

10、有接受到该分组的主机和设备都会丢弃该分组,因为目的主机能够识别ARP消息中的目的IP地址。5) 目的主机发送ARP应答分组。在ARP应答分组中,以请求分组中源物理地址、源IP地址作为其目的物理地址、目的IP地址,并将目的主机自身的物理地址、IP地址填入应答分组的源物理地址、源IP地址字段,并在操作字段中写入2。该分组通过数据链路层以点对点的方式发送出去(因为现在目的方已经知道双方的物理地址)。6) 源结点接收到ARP应答分组,知道对应于目的IP地址的目的物理地址,将它作为一条新记录加入到ARP高速缓存表。源结点将有完整源IP地址、源物理地址、目的IP地址、目的物理地址的信息和数据作为一个发送分

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

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

13、选取Ethernet网卡打开网卡(混杂模式)编译设置过滤器捕获ARP包并将其相应内容输出5 程序代码#include<conio.h>#include<fstream.h>#include<iomanip.h>#include"pcap.h"#include<winsock2.h>#pragma comment(lib,"ws2_32.lib")#pragma comment(lib,"wpcap.lib")/定义ARP包数据struct arppktunsigned short hdt

14、yp; /硬件类型unsigned short protyp; /协议类型unsigned char hdsize; /硬件地址长度unsigned char prosize; /协议地址长度unsigned short op; /(操作类型)操作值: ARP/RARPu_char smac6; /源MAC地址u_char sip4; /源IP地址u_char dmac6; /目的MAC地址u_char dip4; /目的IP地址;void packet_handler(const pcap_pkthdr *header,const u_char *pkt_data,ostream&

15、out) /从ARP包中找到头部位置 arppkt* arph = (arppkt *)(pkt_data +14);/输出源IP地址 for(int i=0;i<3;i+) out<<int(arph->sipi)<<'.' out.setf(ios:left); out<<setw(3)<<int(arph->sip3)<<" " out.unsetf(ios:left);/输出源MAC地址char oldfillchar=out.fill('0');out.s

16、etf(ios:uppercase); 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);/输出目的IP地址 for(i=0;i<3;i+) out<<int(arph-&

17、gt;dip3)<<'.'out.unsetf(ios:left);out<<setw(3)<<int(arph->dip3)<<' '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<<hex<

18、<setw(2)<<int(arph->dmac5)<<" "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<<

19、9;:'<<setw(2)<<ltime->tm_min<<':'<<setw(2)<<ltime->tm_sec;out.fill(oldfillchar);out<<endl;void main(int argc,char *argv )/命令行参数/检查输入命令格式if(argc!=2)cout<<"Please input command: ParseArp output_file"<<endl;return;/初始化网络设备相关参数p

20、cap_if_t *alldevs;pcap_if_t *d;pcap_t *adhandle;char errbufPCAP_ERRBUF_SIZE;u_int netmask;char packet_filter="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_find

21、alldevs:"<<errbuf;return;/选取一个Ethernet网卡for(d=alldevs;d;d=d->next) /网卡设为混杂模式,接收所有帧if(adhandle=pcap_open_live(d->name,1000,1,300,errbuf)=NULL)cout<<"nUnable to open the adapter."pcap_freealldevs(alldevs);return;/检查数据链路是否为Ethernetif(pcap_datalink(adhandle)=DLT_EN10MB&a

22、mp;&d->addresses!=NULL)break;if(d=NULL) cout<<"nNo interfaces found! Make sure Winpcap is installed.n" return;/获得子网掩码netmask=(sockaddr_in *)(d->addresses->netmask)->sin_addr.S_un.S_addr;/编译过滤器,只捕获ARP包if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)<0) c

23、out<<"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;/显示提示信息及每项含义cout<<"listening on "&

24、lt;<d->description<<"."<<endl<<endl;ofstream fout(argv1,ios:app); /日志记录文件/为了查看日志时的方便,其中加入了日期记录time_t t;time(&t);fout.seekp(0,ios:end);if(fout.tellp()!=0) fout<<endl;fout<<"ttARP request(1)/reply(2) on"<<ctime(&t);cout<<"

25、;Sour Ip Addr"<<" "<<"Sour MAC Address" <<" "<<"Des Ip Addr"<<" "<<"Des MAC Address"<<" "<<"OP"<<" "<<"Time"<<endl;fout<<&q

26、uot;Sour Ip Addr"<<" "<<"Sour MAC Address" <<" "<<"Des Ip Addr"<<" "<<"Des MAC Address" <<" "<<"OP"<<" "<<"Time"<<endl;/释放设备列表pca

27、p_freealldevs(alldevs);/开始截获ARP包int result;while(result=pcap_next_ex(adhandle,&header,&pkt_data)>=0) /循环解析ARP数据包 if(result=0) continue;/解析ARP包,结果输出到屏幕与文件 packet_handler(header,pkt_data,cout); packet_handler(header,pkt_data,fout);6 运行结果与分析相关扩展与分析:本课程设计还可以在Linux环境下用rawsocket完成。算法和代码提示:1) 调用

28、socket()打开协议簇为PF_PACKET的原始套接字,这样我们就可以收到数据链路帧:int fd = socket(PF_PACKET,SOCK_RAM,htons(ETH_P_ALL);2) 对打开的套接字调用ioct1(),将网卡设置为混杂模式,这样我们就可以接受到局域网中所有的包(包括目的地址不是本机的帧): struct ifreq req; memset (&req,0,sizeof(req); strncpy(req.ifr_name,”eth0”,strlen(“eth0”)+1); ioctl(fd,SIOCGIFFLAS,&req); req.ifr_flags|=IFF_PROMISC; /设置为混杂模式 icotl(fd, SIOCGIFFLAGS,&req);3) 利用recvfrom()接收包:recvform(fd,buffer,sizeof(buffer)

温馨提示

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

评论

0/150

提交评论