windowsAPI实现Arp功能Word格式文档下载.docx

上传人:b****6 文档编号:17666523 上传时间:2022-12-08 格式:DOCX 页数:12 大小:140.39KB
下载 相关 举报
windowsAPI实现Arp功能Word格式文档下载.docx_第1页
第1页 / 共12页
windowsAPI实现Arp功能Word格式文档下载.docx_第2页
第2页 / 共12页
windowsAPI实现Arp功能Word格式文档下载.docx_第3页
第3页 / 共12页
windowsAPI实现Arp功能Word格式文档下载.docx_第4页
第4页 / 共12页
windowsAPI实现Arp功能Word格式文档下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

windowsAPI实现Arp功能Word格式文档下载.docx

《windowsAPI实现Arp功能Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《windowsAPI实现Arp功能Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。

windowsAPI实现Arp功能Word格式文档下载.docx

(4)将封装好的IPv6报文写入输出文件ipv6data中。

2、编程训练二

根据7.5节的内容,改写编程训练一中的程序。

(1)原始数据为传输层TCP协议栈向下传输至网络层TCP数据报的数据字段。

编程时,需要额外填充TCP报头,并且构造TCP伪报头来计算校验和。

然后填充IPv6报头,将TCP数据报填充到IPv6数据报的数据字段。

然后将完整的IPv6数据报写入输出文件。

(2)程序的命令行格式,输入与输出的要求与编程训练一相同。

3、编程训练三

根据第五章的内容以及本章的相关知识编写IPv6流量的分析程序。

(1)捕获一段时间内以本机为源地址或目的地址的IPv6数据包(不包括以广播形式发出的数据包)并进行统计,列出本机与其他主机之间不同协议类型的IPv6数据包的数量。

(2)程序以命令行的方式运行,格式如下:

Ipv6Minitor.exeduration_time

其中,duration_time是监督时间,单位为秒。

(3)

3.课程设计分析

1)课程设计中涉及的网络基本理论简介:

在网际协议中定义的是因特网的IP地址,但在实际进行通信时,物理层不能识别IP地址只能识别物理地址。

因此,需在IP地址与物理地址之间建立映射关系,地址之间的这种映射称为地址解析。

以太网网络中的物理地址即网卡的序列号。

IEEE规定网卡序列号为6个字节(48位),前三个字节为厂商代号,由于厂商向IEEE注册登记申请,后3个字节为网卡的流水号。

地址解析包括从IP地址到物理地址的映射和从物理地址到IP地址的映射。

TCP/IP协议组提供了两个映射协议:

地址解析协议ARP和逆向地址解析协议RARP。

ARP用于从IP地址到物理地址的映射,RARP用于从物理地址到IP地址的映射。

地址解析协议的ARP的工作原理:

假定在一个物理网络上,A(源主机)要与D(目的主机)进行通信,但是不知道D的物理地址。

A利用ARP协议工作的过程如下:

A广播一个ARP请求报文,请求IP地址为IPD的主机回答其物理地址。

网上所有主机都能收到该ARP请求,并将本机IP地址与请求的IP地址比较,D主机识别出自己的地址IPD,并作出回应,通报自己的物理地址。

A收到这个ARP回应包后,就可以与D进行通信。

为了提高效率,ARP协议使用了高速缓存技术。

在每台使用ARP的主机中,都保留了一个专用的内存区,一收到ARP应答,主机就将获得的IP地址和物理地址存入缓存。

以后每次要发送报文时,首先到缓存中查找有无相应的项,若找不到,再利用ARP进行地址解析。

由于多数网络通信都要连续发送多个报文,所以高速缓存大大提高ARP的效率。

在ARP请求报文中还放入源主机的“IP地址——物理地址”的地址对,源主机在广播ARP请求时,网络上所有主机都可以知道该源主机的“IP地址——物理地址”的地址对并将其存入自己的缓存。

在新主机入网时,令其主动广播其地址映射,以减少其他主机进行ARP请求。

网卡具有如下的几种工作模式:

广播模式(BroadCastModel):

它的物理地址(MAC)地址是0Xffffff的帧为广播帧,工作在广播模式的网卡接收广播帧。

多播传送(MultiCastModel):

多播传送地址作为目的物理地址的帧可以被组内的其它主机同时接收,而组外主机却接收不到。

但是,如果将网卡设置为多播传送模式,它可以接收所有的多播传送帧,而不论它是不是组内成员。

直接模式(DirectModel):

工作在直接模式下的网卡只接收目地址是自己Mac地址的帧。

混杂模式(PromiscuousModel):

工作在混杂模式下的网卡接收所有的流过网卡的帧,信包捕获程序就是在这种模式下运行的。

ARP帧的数据结构表达方式:

以太网帧头中的前两个字段是以太网的目的地址和源地址。

目的地址为全1时为广播地址。

 

两个字节长的以太网帧类型表示后面数据的类型。

对于ARP请求或应答来说,该字段的值为0X0806.

 硬件类型字段:

指明了发送方想知道的硬件地址的类型,以太网的值为1;

协议类型字段:

表示要映射的协议地址类型,IP为0X0800;

 硬件地址长度和协议地址长度:

指明了硬件地址和高层协议地址的长度,这样ARP帧就可以在任意硬件和任意协议的网络中使用。

对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4;

  操作字段:

用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;

  发送端的以太网地址:

源主机硬件地址,6个字节;

  发送端IP地址:

发送端的协议地址(IP地址),4个字节;

  目的以太网地址:

目的端硬件地址,6个字节;

  目的IP地址:

目的端的协议地址(IP地址),4个字节。

2)课程设计中涉及的主要问题

1.ARP相关数据帧结构

2.ARP协议工作原理

3.程序的流程

4.Winpcap开发包的使用方法

5.Windows平台构造自定义数据帧,并通过指定网络适配器发送的方法。

解决思路:

1.先查找资料,深入掌握ARP的相关数据帧结构,工作原理。

并且对要编程的ARP程序的流程进行熟悉。

2.查阅资料,掌握Winpcap开发包的使用方法。

3.查阅资料,掌握通过指定网络适配器发送数据帧的方法。

实现预期目标的可行性分析:

ARP协议工作在TCP/IP的第二层,用于将IP地址转换为网卡的物理地址。

通过一定时间的学习,熟悉ARP协议和Winpcap开发包使用方法,本设计主要通过对ARP协议的帧结构,ARP原理,工作流程等的分析来完成获取局域网内活动主机的物理地址的程序的开发。

3)ARP协议相关数据帧结构

下图显示了ARP数据帧结构。

硬件类型(Ethernet:

0X1)

上层协议类型(IP:

0X0800)

硬件地址长度

IP地址长度

操作(0X1为请求,0X2为应答)

源MAC地址(前32位)

源MAC地址(后16位)

源IP地址(前16位)

源IP地址(后16位)

目的MAC地址(前16位)

目的MAC地址(后32位)

目的IP地址(全部32位)

填充数据(共18B)

ARP数据帧结构

在Ethernet上发送该数据帧,还需要将此数据帧封装到物理帧中,封装后的结构如下图所示。

物理帧头(14B)

ARP帧结构及填充数据(48B)

CRC校验和(4B)

物理帧结构

物理帧头结构如下图所示

目的MAC(6B)

源MAC(6B)

类型(2B)

物理帧头部结构

以上数据结构对应的结构体实现如下:

structethernet_head

{

unsignedchardest_mac[6];

//目标主机MAC地址

unsignedcharsource_mac[6];

/源端MAC地址

unsignedshorteh_type;

//以太网类型

};

structarp_head

unsignedshorthardware_type;

//硬件类型:

以太网接口类型为1

unsignedshortprotocol_type;

//协议类型:

IP协议类型为0X0800

unsignedcharadd_len;

//硬件地址长度:

MAC地址长度为6B

unsignedcharpro_len;

//协议地址长度:

IP地址长度为4B

unsignedshortoption;

//操作:

ARP请求为1,ARP应答为2

unsignedcharsour_addr[6];

/源MAC地址:

发送方的MAC地址

unsignedlongsour_ip;

//源IP地址:

发送方的IP地址

unsignedchardest_addr[6];

//目的MAC地址:

ARP请求中该字段没有意义;

ARP响应中为接收方的MAC地址

unsignedlongdest_ip;

//目的IP地址:

ARP请求中为请求解析的IP地址;

ARP响应中为接收方的IP地址

unsignedcharpadding[18];

structarp_packet//最终arp包结构

ethernet_headeth;

//以太网头部

arp_headarp;

//arp数据包头部

4)编程流程介绍

由于Winpcap需要绑定在某特定的网络适配器上,所以程序在开始的时候要首先获得系统中全部的网络适配器列表,由用户选择适当的适配器。

程序检测用户选择是否正确,确认无误后,获得本机的IP地址和MAC地址,然后开启两个工作者线程分别获得发送ARP请求数据帧和接收分析ARP响应数据帧的工作,接收到ARP响应数据帧后分析其有效性,并在确定某响应数据帧有效后发送更新消息通知用户界面线程刷新界面显示获得的对应关系。

下图是程序流程图:

4.课程具体步骤

1.安装WinPcap3.1版本。

2.创建一个c++工程,点击文件->

新建->

工程->

选择win32consoleApplication,写工程名为Getmac,点击确定。

创建一个空工程,点击完成就完成了一个空工程的创建。

3.创建cpp文件,按照协议编写如下步奏所示

1)首先创建一个C++SourceFile,文件名为Mac.

2)编写一个主函数main(),按照流程进行代码编写。

4.将必须的头文件插入到此工程中,在这里我们新建工程后直接添加相应文件:

添加到工程->

文件->

找到相应头文件并添加。

5.然后将对应的IPHLPAPI.LIB文件添加到当前目录下,并且添加相应的库文件:

设置->

连接->

对象/库模块->

对话框输入IPHLPAPI.LIB->

确定。

6.在生成的相应Debug文件中含有Mac.exe可执行文件。

然后在命令行里进入Mac.exe所在文件夹,然后输入命令Mac.exe,按enter键运行。

7.在命令行中输入指令ipconfig/all,查看本机物理地址,并与程序运行结果进行对比,对比结果发现程序运行结果正确。

5.课程总结

本次课程设计主要是让我们对计算机通信与网络方面的知识有所了解。

整个课程设计的过程,首先要对网络方面关于ARP协议的知识进行回顾,因此找此方面的资料便是应当做的首要任务。

我们通过阅读此方面的书籍熟练掌握ARP协议的详细过程。

ARP地址解析协议就是实现地址之间的这种映射关系的。

ARP地址解析协议的整个运作过程我简单的理解为:

源主机广播一个ARP请求报文,请求目的主机回答其物理地址。

网上所有主机都能收到该ARP请求,并将本机IP地址与请求的IP地址比较,目的主机识别出自己的地址IP,并作出回应,通报自己的物理地址。

源主机收到这个ARP回应包后,就可以与目的主机进行通信。

了解APR协议的过程,是编写程序的基本要求。

通过本次课程设计,使我们对网络方面的知识有了更深入的认识。

深刻体会了ARP协议的帧结构及运作过程,让我们把网络课上学到得书面的知识在实践中加以运用,深入理解。

并且增强了我们的合作能力,学会和同伴一起去完成任务。

本次课程设计确实不容易做,很多东西都是自己没学过的,整个过程要不断地学习,借鉴别人的程序。

6.参考文献

[1]《计算机网络高级软件编程技术》吴功宜等编著/2005年09月/机械工业出版社

[2]《C++程序设计》谭浩强编著/2004年07月/清华大学出版社

[3]《TCP/IP协议及网络编程技术》罗军舟等编著/2004年/清华大学出版社

源代码:

#include"

stdafx.h"

#include<

windows.h>

//============================================================================================

//通过GetAdaptersInfo()函数来获取MAC地址

Iphlpapi.h"

//linkiphlpapi.lib

boolGetMACaddress(char*pMac)

IP_ADAPTER_INFOAdapterInfo[16];

//定义网卡信息存储区。

DWORDdwBufLen=sizeof(AdapterInfo);

DWORDdwStatus=GetAdaptersInfo(

AdapterInfo,//[output]指向接收数据缓冲指针

&

dwBufLen);

//[input]缓冲区大小

if(dwStatus==ERROR_SUCCESS)//此处是个trap,用来保证返回值有效

{

PIP_ADAPTER_INFOpAdapterInfo=AdapterInfo;

if(pAdapterInfo!

=NULL)

sprintf(pMac,"

%02X-%02X-%02X-%02X-%02X-%02X"

pAdapterInfo->

Address[0],pAdapterInfo->

Address[1],pAdapterInfo->

Address[2],pAdapterInfo->

Address[3],pAdapterInfo->

Address[4],pAdapterInfo->

Address[5]);

returntrue;

}

else

returnfalse;

}

returnfalse;

}

intmain(intargc,char*argv[])

//方法1:

通过GetAdaptersInfo()函数来获取MAC地址

charMAC[18];

memset(MAC,0,18);

GetMACaddress(MAC);

printf(MAC);

return0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1