网络技术与应用实验报告
实验三
目录
背景知识....................................................................... 错误!未定义书签。开发环境. (4)
程序设计 (7)
ARP数据包结构定义 (7)
获取本机网络接口的MAC地址和IP地址 (9)
向网络发送数据包................................................ 错误!未定义书签。程序测试.. (15)
执行结果界面截图 (15)
执行结果分析 (17)
获取IP地址与MAC地址的对应关系
背景知识
以太网的一个很大的特点就是具有强大的广播能力。针对这种具备广播能力、物理地址长但长度固定的网络,IP互联网采用动态联编方式进行IP地址到物理地址的映射,并制定了相应的协议——ARP。
假定在一个以太网中,主机A欲获取主机B的IP地址I B与MAC地址P B的映射关系。ARP协议的工作过程为:
1)主机A广播发送一个带有I B的请求信息包,请求主机B用它的IP地址I B 和MAC地址P B的映射关系进行相应;
2)于是,以太网上的所有主机接受到这个请求信息包(包括主机B在内);
3)主机B识别该请求信息,并向主机A发送带有自己的IP地址I B和MAC地址P B映射关系的相应数据包;
4)主机A 得到I B与P B的映射关系,并可以在随后的发送过程中使用该映射关系。
当ARP报文在以太网中传送时,需要将它们封装在以太网数据帧中。为了使接收方能够容易地识别该数据帧携带的为ARP数据,发送方需要将以太网数据帧首部的长度/类型字段指定为0x0806。由于ARP请求和应答分别采用广播方式和单播方式发送,因此封装ARP请求数据帧的目的地址为全“1”形式的广播地址,而封装ARP响应的数据真的目的地址为接收节点的单播地址。在以太网中,ARP数据包的格式如图3-1所示:
图3-1以太网中ARP的报文格式
其中,个字段的意义如下:
硬件类型:物理接口类型。其中,以太网的接口类型为1。
协议类型:高层协议类型。其中,IP协议类型为0x0800。
操作:指定ARP报文一个ARP请求还是一个ARP应答。其中,ARP请求报文为 1,ARP应答报文为2。
硬件地址长度:以字节为单位的物理地址长度。在以太网中,物理地址(MAC 地址)的长度为6B。
协议地址长度:以字节为单位的上层协议地址长度。IP地址长度为4B。
源MAC地址:发送方的MAC地址。
源IP地址:发送方的IP地址。
目的MAC地址:在ARP请求报文中,该字段内容没有意义;在ARP响应报文中,该字段为接收方的MAC地址。
目的IP地址:在ARP请求报文中,该字段为请求解析的IP地址;在ARP响应报文中,该字段为接收方的IP地址。
开发环境
本实验的目的是捕获以太网中的数据包并对其进行分析,因此以太网在该实验中时必不可少的。本实验使用的以太网既可以是共享式以太网也可以是交换式以太网。
本实验利用Microsoft集成开发环境IDE创建基于WinPcap的应用程序。因此,需要在源码中增加与WinPcap相关的信息,还需要对IDE中的某些缺省参数进行修改。下面介绍使用VC6.0创建基于WinPcap应用程序的配置方法:
1.添加pcap.h包含文件:如果一个源文件使用了WinPcap提供的函数,那么需
要在该文件开始位置增加pcap.h包含文件,如下所示:
#include “pcap.h”
2.增加与WinPcap有关的预处理器定义:需要将WPCAP和HA VE_REMOTE两
个标号添加到预处理器定义中。在VC6.0提供的IDE环境中,可以通过执行“工
程”菜单中的“设置”命令进入该项目的属性配置页,如图2-2所示。通过选择“C/C++”选项就可以增加这两个标号。
图3-2 在预处理器定义中增加WPCAP和HA VE_REMOTE
3.添加包含文件目录:在生成基于WinPcap的应用程序过程中,生成程序需要知道pcap.h等包含文件在磁盘中的位置,因此需要将WinPcap提供的包含文件目录位置通知生成程序。添加包含文件目录可以通过执行“工具”菜单中的“选项”命令进入“选项”对话框,如图2-3所示。然后,通过选择对话框中的“目录->include files”选项可以将WinPcap的包含文件目录添加到IDE集成开发环境中。
图3-3 在IDE集成开发环境中增加包含文件目录
4.添加wpcap.lib库文件:在生成基于WinPcap的应用程序过程中,生成程序需要链接wpcap.lib库文件。因此,需要将WinPcap.lib添加到利用IDE集成开发环境生成的项目中。添加wpcap.lib库文件可以通过执行“项目”菜单中的“设置”命令进入“Project Settings”对话框,如图2-4所示。通过选择“连接”选项就可以添加wpcap.lib库文件。
图3-4 添加wpcap.lib库文件
程序设计
利用WinPcap获取IP地址与MAC地址的对应关系需要经过下面各步骤。
ARP数据包结构定义
网络中传输的数据包是经过封装的,每一次封装都会增加相应的首部。由于WinPcap在数据链路层捕获数据包,因此在以太网中利用pcap_next_ex函数获得的数据都包含以太网帧头信息。同时,由于利用pcap_next_ex函数捕获到的数据包保存在一个无结构的缓冲区中,因此在实际编程过程中,通常需要定义一些有关首部的数据结构,通过将这些结构赋予存放数据包的无结构缓冲区简化数据的提取过程。
在分析以太网数据帧和ARP数据包时可以定义以太网数据帧和ARP数据包首部结构为: