网络课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、使用ARP发现局域网内活动主机
——发送ARP数据包
摘要
ARP协议用于完成IP地址与MAC地址之间的转换。熟悉ARP协议对于IP数据包的传输过程。本课程设计的主要目的是通过封装与发送ARP帧,了解ARP
协议的工作原理与ARP帧的结构。根据后面介绍的ARP包结构,编写程序封装并发送ARP包。以命令行形式运行:SendArp source_ip source_mac dest_ip dest_mac 其中,SendArp为程序名,source_ip为源IP地址,source_mac为源MAC地址,dest_ip为目的IP地址,dest_mac为目的MAC地址。输出内容:ARP 帧的各字段值,包括源IP地址、源MAC地址、目的IP地址、目的MAC地址等。使用Vs6.0 C++、Winpcap编程。
关键词:ARP协议;ARP包的数据结构;填充与发送ARP包;网络适配器;Winpcap;
1.1 引言
了解ARP帧结构及ARP动作过程,掌握构造自定义数据帧,并通过指定网卡发送帧的方法。使用AR协议进行IP地址与MAC地址转换,如果所有的源结点在发送任何一个分组或者连续向同一个目的主机发送分组时,都要通过ARP服务去获取目的物理地址,它的工作效率肯定很低。为了克服这个缺点,要对ARP作一些改进,在使用ARP的主机上保留一个专用的高速缓存,用于存入最近的IP地址和物理地址的绑定,在发送ARP请求时先查看这个高速缓存。在程序界面上显示活动主机的IP地址和MAC地址的对应关系。
设计过程中需要解决的主要问题
1.ARP相关数据帧结构
2.ARP协议工作原理
3.程序的流程
4.Winpcap开发包的使用方法
3.Windows平台构造自定义数据帧,并通过指定网络适配器发送的方法。
解决思路:
(1).先查找资料,深入掌握ARP的相关数据帧结构,工作原理。并且对要编程的ARP 程序的流程进行熟悉。
(2)查阅资料,掌握Winpcap开发包的使用方法。
(3)查阅资料,掌握通过指定网络适配器发送数据帧的方法。
实现预期目标的可行性分析:ARP协议工作在TCP/IP的第二层,用于将IP 地址转换为网卡的物理地址。通过一定时间的学习,熟悉ARP协议和Winpcap
开发包使用方法,并且在老师的细心指导下,本课题中遇见的问题可以迎刃而解。顺利完成程序的开发。本论文主要通过对ARP协议的帧结构,ARP原理,工作流程等的分析来完成获取局域网内活动主机的物理地址的程序的开发。第一章主要介绍当前计算机网络,协议的发展。第二章主要描述网络基础知识和ARP协议的原理,帧结构等相关知识。第三章主要介绍ARP软件开发时使用的工具,包括Visual C++和Winpcap开发包。第四章为ARP软件的详细设计,主要包括ARP 软件的工作程序的编写,和ARP软件界面的设计。最后总结,对本文进行最终的归纳。
1.2 ARP协议的工作原理
1.ARP的基本运行过程是:
1)主机A希望发送数据分组给主机B,但不知道B的物理地址。
2)A发送广播报文,要求B主机用它的物理地址来响应。
3)网站上所有主机都接收到这个分组。
4)B识别出自己的IP地址,发送应答报文,告诉A自己的物理地址。1.3 ARP的包格式
图1给出了ARP分组格式的示意图
物理帧头(14B)ARP帧结构(28B)填充数据(18B)CRC(4B)
图1 ARP包格式
注:因为物理帧最小长度为64B,所以要填充18B。
(1)物理帧头
物理帧头的结构如图2所示。
目的MAC(6B)源MAC(6B)类型(2B)
图2 物理帧头格式
(2)ARP帧结构
图3给出了ARP帧格式的示意图,长度为28B。
0 8 16 24 31(位)
硬件类型(Ethernet:0x1)上层协议类型(IP:0x0800)
IP地址长度(0x4)操作(请求:0x1;应答:0x2)
硬件地址长度
(0x6)
源MAC地址
源MAC地址源IP地址
源IP地址目的MAC地址
目的MAC地址
目的IP地址
图3ARP帧格式
1.4 ARP包的填充
要注意的是,在填充请求包时,因为请求包要在Ethernet上广播,所以物理帧头的“目的MAC”字段要填充为FFFFFFFFFFFFF;ARP帧结构中的目的MAC 可填充为任意值,因为它此时不起作用,所以“填充数据”字段要填充为0。
1.5课程设计分析
1.程序流程 程序的流程图如图4所示。
N N
N
Y Y
N
Y
Y
N Y
开始 命令行参数=5? 定义ARP 包结构并初始化
Flag=0?
ARP 请求,填充DLC 头中目的MAC (广
播,全F )及Flag
ARP 请求,填充DLC 头中目的
MAC 及Flag
填充DLC 的其他字段及ARP
头的各字段
进入发送ARP 包函数
分配及初始化发送包结构
释放包结构
关闭网卡
获取网卡列表? 选择网卡并打开? 发送包成功?
2.核心代码
1)定义ARP包的数据结构
根据ARP包结构,分别定义两个子结构:物理帧头和ARP帧结构。
//物理帧头结构
typedef struct PhyFrame
{
unsigned char DstMAC[6]; //目的MAC地址
unsigned char SrcMAC[6]; //源MAC地址
unsigned short FrameType; //物理帧头型
}PHYFRAME;
//ARP帧结构
typedef struct ArpFrame
{
unsigned short HardwareType; //硬件类型
unsigned short ProtocolType; //上层协议类型
unsigned char MACLen; //MAC地址长度
unsigned char IPLen; //IP地址长度
unsigned short Flag; //1表示请求,2表示应答unsigned char SrcMAC[6]; //源MAC地址
unsigned char SrcIP[4]; //源IP地址
unsigned char DstMAC[6]; //目的MAC地址
unsigned char DstIP[4]; //目的IP地址
unsigned char Padding[18]; //填充数据
}ARPFRAME;
//ARP包=物理帧头+ARP帧
typedef struct ArpPacket
{
PHYFRAME phyFrame;
ARPFRAME arpFrame;
}*ARPPACKET;
2)填充与发送ARP包
根据命令行的输入,判断输入参数的正确性,完成ARP包中各字段的填充。