计算机网络课程设计报告
题
目:
学生姓名:
学
号:
解析 ARP 数据包
****
*******
专业班级: 计算机科学与技术 07103 班
同组姓名:
******
指导教师:
设计时间: 2010 年上学期第 16 周
******
指导老师意见:
评定成绩:
签名:
日期:
年 月 日
一、 课程设计的目的和意义
本课程设计的目的是设计一个系统,它能够实现对网络上的 ARP 数据包的
解析,从而熟悉 ARP 数据包的结构,对 ARP 协议有更好的理解和认识。了解并
熟悉 Microsoft Visual C++ 6.0 开发环境的使用,在该软件平台上进行工程的建立
和程序开发,理解和掌握 C++语言的程序设计和针对一些常用的网络协议的编
程。
二、 课程设计的内容和要求
通过编制程序,获取网络中的 ARP 数据包,解析数据包的内容,将结果显
示在标准输出上,并同时写入日志文件。
程序的具体要求如下所示:
1)以命令行的形式运行,如下所示:
logfile
arpparse
其中,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 时退出。
1
三、 课程设计的相关技术
3.1
ARP 协议相关知识
以太网设备比如网卡都有自己全球唯一的 MAC 地址,它们是以 MAC 地址来传
输以太网数据包的,但是它们却识别不了我们 IP 包中的 IP 地址,所以我们在以
太网中进行 IP 通信的时候就需要一个协议来建立 IP 地址与 MAC 地址的对应关
系,以使 IP 数据包能发到一个确定的地方去。这就是 ARP(Address Resolution
Protocol,地址解析协议)。
3.2 ARP 协议数据包格式
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 ARP 数据包的消息格式
2
3.3 ARP 数据包的各部分说明
下面对数据包的各个部分进行说明。
硬件类型 :指定硬件接口类型。例如,值为 1 表示 Ethernet。
协议类型:指定发送方支持的上层协议的类型,如(0800)16 表示 IP 协议。
物理地址长度 :指定物理(硬件)地址的长度。
协议地址长度 :网络层(即上层)协议的地址长度。若为 IP 协议,其值为
4。
操作:指定 ARP 的操作类型,例如,1 表示 ARP 请求,2 表示 ARP 应答等。
源物理地址:指定发送方的物理地址。
源 IP 地址:指定发送方的 IP 地址。
目的物理地址:指定目的物理地址。
目的 IP 地址:指定目的 IP 地址。
ARP 分组必须在数据链路层中被封装成帧,才能发送出去,封装形式如图 2 所示。
14B
帧头部
ARP 消息
帧数据
图 2 将 ARP 数据包封装成一个帧
3.4 ARP 协议的工作流程
下面介绍 ARP 协议的工作流程。
1. 每台主机都会在自己的 ARP 缓冲区 (ARP Cache)中建立一个 ARP 列表,以
表示 IP 地址和 MAC 地址的对应关系。
2.
当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP
列表中是否存在该 IP 地址对应的 MAC 地址,如果有﹐就直接将数据包发送到这
3
个 MAC 地址;如果没有,就向本地网段发起一个 ARP 请求的广播包,查询此目的
主机对应的 MAC 地址。此 ARP 请求数据包里包括源主机的 IP 地址、硬件地址、
以及目的主机的 IP 地址。
3.
网络中所有的主机收到这个 ARP 请求后,会检查数据包中的目的 IP 是否
和自己的 IP 地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将
发送端的 MAC 地址和 IP 地址添加到自己的 ARP 列表中,如果 ARP 表中已经存在
该 IP 的信息,则将其覆盖,然后给源主机发送一个 ARP 响应数据包,告诉对方
自己是它需要查找的 MAC 地址。
4. 源主机收到这个 ARP 响应数据包后,将得到的目的主机的 IP 地址和 MAC 地
址添加到自己的 ARP 列表中,并利用此信息开始数据的传输。如果源主机一直没
有收到 ARP 响应数据包,表示 ARP 查询失败。
四、 课程设计过程
1、本程序利用 Winpcap 驱动为 Win32 应用程序提供的访问网络底层的能力编写
解析 ARP 数据包的程序。
a) 设计步骤如下:
b) 输出网卡设备列表。
c) 选择网卡并打开。
d) 捕获数据包时,可能需要设置过滤器。
e) 捕获数据包或者发送数据包。
2、在程序设计过程中需要注意网络-主机字节顺序的转化。由于不同计算机系统
所采用的数据表示方式不同,对于 2B 或 4B 的数据,有的采用低字节地址存放数
据的高权值位,而有的却以低地址字节存放数据的低权位值,在网络的数据传输
4
中,我们应该统一表示,所以我们在捕获数据包后,应将数据包头部的表示长度
或者类型的数据转换成本地机的表达形式。可以利用函数 ntohs()将网络字节
序转换为主机字节序。
3、选择网卡并打开,判断网卡是否可用。
算法流程如下:
1) 取得当前网络设备列表。
2) 选择 Ethernet 网卡打开,注意判断所选网卡是否为实际存在的可用网卡。
3) 设置过滤器,此处的过滤器正则表达式为“arp”或者“ether proto\\arp”。
4) 捕获数据包并进行处理。(包括输出各 IP 地址,物理地址,操作类型以及
时间)。由于要记录日志文件,为了便于输出流参数,采用 pcap_next_ex
()函数。
程序流程图如下图所示:
开 始
获取网卡列表
选取 Ethernet 网卡
打开网卡(混杂模式)
编译设置过滤器
捕 获 ARP 包 并 将 其
相应内容输出
图 3 程序流程图
5
程序运行结果如下图:
图 4 运行结果截图
6
五、 课程设计小结
通过这次课程设计,我深刻体会到了 ARP 协议的基本功能与工作方式。在以
太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的
MAC 地址。但这个目标 MAC 地址是如何获得的呢?它就是通过地址解析协议
获得的。所谓“地址解析”就是主机在发送帧前将目标 IP 地址转换成目标
MAC 地址的过程。ARP 协议的基本功能就是通过目标设备的 IP 地址,查询
目标设备的 MAC 地址,以保证通信的顺利进行。
在这次课程设计过程中,通过查找相关书籍和资料,也使得自己增长了
不少知识。从这次课设中,我充分认识到自己相关网络知识的缺乏,虽然
也用了很长时间但设计方案还是缺乏一定的可行性,这次课程设计过程中
我也认真阅读了相关书籍,对局域网有了一定的了解,所以说这次课设我
好是收获不小。
六、 课程设计参考文献
1、吴功宜,计算机网络课程设计 北京:机械工业出版社,2005
2、张尧学,计算机网络与 Internet 教程(第二版) 北京:清华大学出版社,
2006
7