计算机网络课设-解析ARP数据包

计算机网络课程设计
课程(设计)题目:解析ARP数据包
学    院:_计算机科学与信息学院_
专    业:_通信工程_______
班    级:_082班________
学    号:_************_____
学生姓名:_杨邑_________
指导教师:_何勇、杨平______
2011年 12月 27日
1.摘要……………………………………………………..3
2014世界女排锦标赛2.意义与目的…………………………………………..3
3.课程设计要求………………………………………3
4.相关知识………………………………………………4
a)RP数据报的消息格式……………………..4
b)ARP协议的工作流程……………………….5
5.课程设计分析………………………………………..6
1)课程设计中的重点及难点………………. 6
2)参考算法………….……………………………….6
3)核心代码…………………………………………..7
6.相关扩展………………………………………………..16
7.心得体会………………………………………………..17
8.参考文献………………………………………………..18
                               
摘要:本文首先介绍了解析arp数据包课程设计的目的与意义,本次课程设计的要求,接着说明了arp数据报消息格式以及arp协议的工作流程加强我们对ARP协议的认识,然后分析了本次课程设计的难点、重点、参考算法、核心代码,最后对本次试验进行了总结.
正文
绪论:
1.意义与目的
    这次课程设计的意义与目的:
我们已经学习了一个学期的计算机网络课程,在网络协议体系结构中,不管采用哪一种划分形式,网络层都是作为独立的一层,可见其在网络通信中的重要性。在网络层中有对重要协议:ARP/RARP,用于网卡物理地址(MAC地址)与网络协议地址(IP地址)之间的转换。通过这个课程设计,加深对课本知识的理解与掌握,同时自己亲自动手实现,对知识的领悟能够起到事半功倍的效果。
2.课程设计要求
        通过编制程序,获取网络中的ARP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
程序的具体要求如下所示:
1,以命令行的形式运行,如下所示:
arpparse logfile其中,arpparse为程序名;logfile为日志文件名。
2,程序输出内容如下所示:
源IP地址  源MAC地址  目的IP地址  操作  时间
各部分的说明如下所示:
源IP地址:输出ARP消息格式中的源IP地址字段
源MAC地址:输出ARP消息格式中的源物理地址字段
目的IP地址:输出ARP消息格式中的目的IP地址字段。
目的MAC地址:输出ARP消息格式中的目的物理地址字段
操作:输出ARP消息格式中的操作字段,若为ARP请求,则为1,若为ARP应答,则为2,
时间:该ARP包产生的时间
3,当程序接收到键盘输入Ctrl+C时字段
一、相关知识
a)ARP数据报的消息格式
网络上的每台主机或设备都有一个或多个IP地址。IP地址是网络层的地址,在网络层,数据被组装成IP包。但是发送IP包需要物理设备的支持(通常是Ethernet设备,在本课程设计中我们指定为Ethernet设备),即发送端必须知道目的物理地址才能将IP包发送出去,所以需要一种将IP地址映射为物理地址的机制。ARP协议就是用来完成这个任务的。ARP协议能够在同一个物理网络中,在给定目的主机或设备的IP地址的条件下,得到目的主机或设备的物理地址。ARP协议的数据包格式如图1所示:
      0          8          16        24        31(位)  方立天
          硬件类型
      协议类型
物理地址长度
协议地址长度
        操作
                    源物理地址(八位组0~3)
源物理地址(八位组4~5)
源IP地址(八位组0~1)
源IP地址(八位组2~3)
目的物理地址(八位组0~1)
              目的物理地址(八位组2~5)
              目的IP地址(八位组0~3)
图1        数据报的消息格式
下面对数据包的各个部分进行说明
硬件类型:指定硬件接口类型。例如,值为1表示Ethernet
协议类型:指定发送方支持的上层协议的类型
物理地址长度:指定物理(硬件)地址的长度
协议地址长度:网络层协议的地址长度。若为IP协议,其值为4
操作:指定ARP的操作类型,例如,1表示ARP请求,2表示ARP应答
源物理地址:指定发送方的IP地址
目的物理地址:指定目的物理地址。
目的IP地址:指定目的IP地址
ARP分组必须在数据链路层中被封装成侦,才能发送出去封装形式如图2所示
           
图2    将ARP数据包封装成一个帧
b)ARP协议的工作流程
1)在发送一个ARP分组之前,源主机首先根据目的IP地址,在本地ARP高速缓存表中查与之对应的目的物理地址。如果到对应的物理地址,就不用进行地址解析,否则需要进行地址解析。
2)实现地址解析的第一步是产生ARP请求分组。在相应的字段写入本地主机的源物理地址、源IP地址,在目的物理地址字段写入0,并在操作字段写入1。
3)将ARP分组发送到本地的数据链路层,并封装成帧。以源物理地址作为源地址,以物理广播地址(FF-FF-FF-FF-FF-FF)作为目的地址,通过物理层发送出去。
桃交易电影公安情报学4)由于采用了广播地址,因此网段内所有的主机或设备都能接受到该帧。除了目的主机外,所有接受到该分组的主机和设备都会丢弃该分组,因为目的主机能够识别ARP消息中的目的IP地址。
5)目的主机发送ARP应答分组。在ARP应答分组中,以请求分组中源物理地址、源IP地址作为其目的物理地址、目的IP地址,并将目的主机自身的物理地址、IP地址填入应答分组的源物理地址、源IP地址字段,并在操作字段中写入2。该分组通过数据链路层以点对点的方式发送出去(因为现在目的方已经知道双方的物理地址)。
6)源结点接收到ARP应答分组,知道对应于目的IP地址的目的物理地址,将它作为一条新记录加入到ARP高速缓存表。
7)源结点将有完整源IP地址、源物理地址、目的IP地址、目的物理地址的信息和数据作为一个发送分组,传送给它的数据链路层并封装成桢,然后以点对点的方式发送到目的主机。
四、课程设计分析
1.课程设计中的重点及难点
1)程序中会用到Winpcap,Winpcap是Win32环境下数据包捕获的开放代码函数库。基于Winpcap的应用程序一般按照下面几个步骤进行设计:
输出网卡设备列表。
选择网卡并打开。虹膜识别
捕获数据包时,可能需要设置过滤器。
捕获数据包或者发送数据包。
2)在程序设计过程中需要注意网络—主机字节顺序的转化。由于不同的计算机系统所采用的数据表示方式不同,对于2B或4B的数据,有的采用低字节地址存放数据的高权值位,而有的却以低地址字节存放数据低权位值,在网络的数据传输中,我们应该统一表示,所以我们在捕获数据包后,应将数据包头部的表示长度或类型的数据转换成本地机的表达形式。
可以利用函数ntohs()将网络字节序转换为主机字节序。
3)选择网卡并打开时,注意选择可用的网卡。
2.参考算法
1)取得当前网卡设备列表。
2)选择Ethernet网卡并打开,注意判断所选网卡是否为实际存在的可用网卡。
3)设置过滤器,此处的过滤器正则表达式为“arp”或者“ether proto\\arp”。
4)捕获数据包并进行处理(包括输出各IP地址,物理地址,操作类型以及时间)。由于要记录日志文件,为了便于输出流参数,建议采用pcap_next_ex()函数。
流程图如图3所示:
              图3  流程图
3.核心代码
ARP数据包结构
struct arppkt{             
    unsigned short hdtyp;    //硬件类型。值0001表示其为Ethernet张庭玉
    unsigned short protyp;  //协议类型。值0800表示上层协议为IP
    unsigned char hdsize;  //硬件地址长度。值为06
    unsigned char prosize;  //协议地址长度。值为04
unsigned short op;      //操作值为0001/0002,分别表示ARP请求/应答
    u_char smac[6];        //源MAC地址,6B
    u_char sip[4];          //源IP地址,4B
    u_char dmac[6];        //目的MAC地址
    u_char dip[4];          //目的IP地址
};
获取网络设备列表,并以混杂模式打开网络设备
//获取网络设备列表
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,300,errbuf))==NULL)
        {
            cout<<"\nUnable to open the adapter.";
            pcap_freealldevs(alldevs);    //释放设备列表
            return;
        }
        if(pcap_datalink(adhandle)==DLT_EN10MB&&d->addresses!=NULL)
            break;
    }
编译过滤器并设置过滤器,只捕获ARP数据包
char packet_filter[]=ether proto \\arp;    //过滤,选择arp协议
if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)<0)
{  cout<<"\nUnable to compile the packet filter.Check the syntax.\n";

本文发布于:2024-09-21 14:38:49,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/365921.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议