课 程 设 计 任 务 书
分院(系)
信息科学与工程学院
学生姓名
设计题目
解析 ARP 数据包
通信工程
专业
学号
内容及要求:
本课程设计的目的是对网络上的 ARP 数据包进行解析,从而熟悉 ARP 数据包的结构,
对 ARP 协议有更好的理解和认识.。通过编制程序,获取网络中的 ARP 数据包,解析数据
包的内容,将结果显示在标准输出上,并同时写入日志文件。
进度安排:
1, 了解 ARP 协议的相关内容
2, 编写程序浏览 ARP 数据包的相关内容。
3, 对程序中使用的函数和参数等进行分析
4, 对结果进行分析
5, 写课程设计报告
指导教师(签字):
分院院长(签字):
年 月 日
年
月
日
- 1 -
目录
一 具体要求 ………………………………………………………3
二 相关知识………………………………………………………4
三 课程设计分析………………………………………………… 6
四 代码实现过程…………………………………………………10
五 运行结果及分析………………………………………………13
六 相关扩展………………………………………………………14
七课程设计总结 ……………………………………………… 15
八 参考文献………………………………………………………15
- 2 -
一、课程设计具体要求
程序具体要求如下所示:
一、已命令行的形式运行,如下所示:
apparse
loqfile
其中,arpparse 为程序名,logfile 为日志文件名。
二、程序输出内容如下所示:
1 源 IP 地址
2 源 MAC 地址
3 源 MAC 地址
4 操作
5 时间
各部分的说明如下所示:
●源 IP 地址:输出 ARP 消息格式中的源 IP 地址字段。
●源 MAC 地址:输出 ARP 消息格式中的源物理地址字段。
●目的 IP 地址:输出 ARP 消息格式中的目的 IP 地址字段
●目的 MAC 地址:输出 ARP 消息格式中的目的物理地址字段。
●操作:输出 ARP 消息格式中的操作字段,若为 ARP 请求,则为 1,
若为 ARP 应答,则为 2.
●时间:该 ARP 包产生的时间。
三、当程序接收到键盘输入 Ctir+C 时退出。
- 3 -
二、相关知识
我们知道,网络上的每台主机或设备都有一个或多个 IP 地址。
IP 地址是网络层的地址。在网络层,数据被组装成 IP 包。但是发送
IP 包需要物理设备的支持(通常时 Ethernet 设备,在本课程设计中我
们指定为 Ethernet 设备),即发送端必须知道目的物理地址才能将 IP
包发送出去,所以需要一种将 IP 地址映射为物理地址的机制。ARP
协议就是用来完成这个任务的。ARP 协议能够在同一个物理网络中,
在给定目的主机或设备的 IP 地址的条件下,得到目的主机或设备的
物理地址(即 48 位的 MAC 地址)。ARP 协议的数据包格式如图 6-1
所示。
0
8
硬件类型
16
物理地址长度 协议地址长度
31
24
协议类型
操作
源物理地址(八位组 0~3)
源物理地址(八组 4~5)
源 IP 地址(八位组 0~1)
源 IP 地址(八位组 2~3)
目的物理地址(八位组 0~1)
目的物理地址(八组位 2~5)
目的 IP 地址(八组位 0~3)
图 6-1 ARP 数据包的消息格式
下面对数据包的各个部分进行说明。
●硬件类型: 指定硬件接口类型。例如,值为 1 表示 Ethernet。
- 4 -
●协议类型: 指定发送支持的上层协议的类型,如(0800)16
●物理地址长度:指定物理(硬件)地址的长度。
●协议地址长度:网络层(即上层)协议的地址长度。若为 IP 协议,
其值为
●操作:指定 ARP 的操作类型,例如,1 表示 ARP 请求,2 表示 ARP
应答等。
●源物理地址:指定发送方的物理地址。
●源 IP 地址:指定发送方的 IP 地址。
●目的物理地址:指定目的的物理地址。
●目的 IP 地址:指定目的的 IP 地址。
ARP 分组必须在数据链路层中被封装成帧,才能发送出去,封装形式
如图 6-2 所示。
↓
14B
帧头部
ARP 消息
帧数据
↓
图 6-2 将 ARP 数据报封装成一个帧
接着,我们介绍 ARP 协议的工作流程。
1) 在发送一个 ARP 分组之前,源主机首先根据目的 IP 地址,在
本地 ARP 高速缓存表中查找与之对应的目的物理地址。如果找到
对应的物理地址,就不用进行地址解析,否则需要进行地址解析。
- 5 -
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.课程设计中的重点及难点
- 6 -
1)程序中会用到 Winpcap,Winpcap 是 Win32 环境下数据包捕获的
开放代码函数库。具体使用方法请参见资料。基于 Winpcap 的应用程
序一般按照下面几个步骤进行设计:
●输出网卡设计备列表。
●选择网卡并大开。
●捕获数据包时,可能需要设置过滤器。
●捕获数据包或者发送数据包。
2)在程序设计过程中需要注意网络-主机字节顺序的转化。由于不同
的计算机系统所采用的数据表示方式不同,对于 2B 或 4B 的数据,有
的采用低字节地址存放数据的高权值位,而有的却以低地址字节存放
数据的低权位值,在网络的数据传输中,我们应该统一表示,所以我
们在捕获数据包后,应将该统一表示,所以我们在捕获数据包后,应
将数据包头部的表示长度或类型的数据转换成本地的表达形式。可以
利用函数 ntohs()将网络字节序列转换为主机字节序。
3)选择网卡并打开时,注意选择可用的网卡。
2 参考算法
1) 取得当前网络设备列表。
2) 选择 Ethernet 网卡并打开,注意判断所选网卡是否为实际
存在的可用网卡。
3) 设置过滤器,此处的过滤器正则表示为“arp”或者“ether
proto \\arp”。
4) 捕获数据包并进行处理(包括输出各 Ip 地址,物理地址,
- 7 -
操作类型以及时间)。由于要记录日志文件,为了便于输出
流参数,建议采用 pcap-next-ex()函数。
程序流程如图 6-3 所示。
开始
获取网卡列表
选取 Ethernet 网卡
打开网卡(混杂模式)
编译设置过滤器
捕获 ARP 包并将
其相应内容输出
图 6-3 程序流程图
3.核心代码
●ARP 数据包结构
struct arppkt{
unsigned short hdtyp;//硬件类型,值 0001 表示其为 Ethernet
unsigned short protyp;//协议类型,值 0800 表示上层协议为 IP
unsigned char hdsize;//硬件地址长度。值为 06
- 8 -