




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 计算机网络课程设计实验报告题 目 发送Ethernet ARP包 学 院 数理与信息工程学院 专 业 计算机科学与技术 班 级 计科101 学 号 201059225101 学生姓名 王立娟 同组成员 潘明越、曾兵、田胜杰、宋炼杰、陈坦、韦国挺 指导教师 郭步 编写日期 2012-6-30 目录一、程设计的目的和意义2二、设计的内容和要求2三、设计的相关技术33.1 ARP协议及工作原理33.2 ARP的分组格式33.3工作原理43.4 ARP包的填充6四、程设计过程64.1流程图74.2源程序84.3运行结果18五、课程设计小结19六、参考文献19一、程设计的目的和意义IP地址将不同的物理
2、地址统一起来,从而将物理地址隐藏起来,上层软件使用IP地址标识结点。但是。两台计算机只有在知道彼此的物理地址时才能进行通信。IP数据包常通过Ethernet发送。Ethernet设备并不识别32位IP地址,它们是以48位MAC地址传输Ethernet数据包的。因此,IP驱动器必须把IP目的地址转换成Ethernet网络目的地址。这两种地址之间存在着某种静态的或动态的映射,通常需要查看一张表来进行这种映射。这种地址协议(ARP)就是用来确定这些映象的协议。ARP工作时,送出一个所希望的IP地址的Ethernet广播数据包。目的地主机以一个含有IP和Ethernet地址对的数据包作为应答。发送者将
3、这个地址对高速缓存起来,以节约不必要的ARP通信。本课程设计的目的是进一步熟悉ARP协议的帧结构以及它的运行过程。二、设计的内容和要求2.1 基本要求 本次课程设计的基本要求是在熟悉ARP协议并了解Winpcap编程,或者下载JAVA类:jpcap包构造ARP包,选择并打开网卡,将ARP包发送。1)命令行格式:arpsend src_ip src_mac dst_ip dst_mac flag其中arpsend作为程序名。各参数意义:src_ip: 源IP地址。src_mac: 源MAC地址。dst_ip: 目的IP地址。dst_mac: 目的MAC地址。Flag:0表示ARP请求;1表示AR
4、P应答。例如:arpsend FA:01:02:03:04:05 0D:E1:02:03:B4:06 12)输出:Send OK。3)程序的正确性的检验。可以安装一个截包软件,如Iris,运行该软件以查看能否收到程序发出的ARP包,并检查包中个字段填充的内容(如各地址,协议类型)是否正确。Error! No bookmark name given.2. 2系统开发语言及环境的选择操作系统:Windows XP Professional运行环境:Microsoft Visual C+ 6.0开发语言:C语言,C+等三、设计的相关技术3.1 ARP协
5、议及工作原理 ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。ARP的基本运行过程是:1) 主机A希望发送数据分组给主机B,但不知道B的物理地址。2) A发送广播报
6、文,要求B主机用它的物理地址来响应。3) 网站上所有主机都接收到这个分组。4) B识别出自己的IP地址,发送应答报文,告诉A自己的物理地址。32 ARP的分组格式物理帧头(14B)ARP帧结构(28B)填充数据(18B)CRC(4B)图一 ARP分组格式目的MAC (6B)源MAC(6B) 类型(2B) 图2 物理帧头 0 8 16 24 31(位) 硬件类型(Ethernet:0x1) 上层协议类型(IP:0x0800)硬件地址长度(0x6)IP地址长度(0x4) 操作(请求: 0x1; 应答: 0x2) 源MAC地址 源MAC地址 源IP地址 源IP地址 目的MAC地址 目的MAC地址 目
7、的IP地址图3 ARP帧结构3.3工作原理: 源主机在传输数据前,首先要对初始数据进行封装,在该过程中会把目的主机的IP地址和MAC地址封装进去。在通信的最初阶段,我们能够知道目的主机的IP地址,而MAC地址却是未知的。这时如果目的主机和源主机在同一个网段内,源主机会以第二层广播的方式发送ARP请求报文。ARP请求报文中含有源主机的IP地址和MAC地址,以及目的主机的IP地址。当该报文通过广播方式到达目的 主机时,目的主机会响应该请求,并返回ARP响应报文,从而源主机可以获取目的主机的MAC地址,同样目的主机也能够获得源主机的MAC地址。如果目的主机和源主机地址不在同一个网段内,源主机发出的I
8、P数据包会送到交换机的默认网关,而默认网关的MAC地址同样可以通过ARP协议获取。经过ARP协议解析IP地址之后,主机会在缓存中保存IP地址和MAC地址的映射条目,此后再进行数据交换时只要从缓存中读取映射条目即可。ARP协议工作原理详见图4.图4 网段内ARP工作原理关于ARP的功能,仅限于在没有安全防护的网络里。1) 如果有多个用户都在同一个网关上网,那么若要禁止机器A上网,应该怎么做呢?就是让A得不到正确的网关的ARP映射。可以采取如下措施:伪装成网关,给机器A发送ARP包,该ARP的发送方为网关的IP,而MAC部分随便填一个地址;接收方正确填写A的相关信息。2)基于ARP欺骗的监听。如果
9、某台计算机C和计算机A、B位于同一个局域网内,那么如何监听A和B间的通信呢?很简单,对A说“我是B”,在对B说“我是A”。具体的操作如下:给A发送一个伪造的ARP回应包,告诉A,B的IP对应的MAC为C的MAC地址,于是A就会相应地刷新自己的ARP缓存,将发给B的数据都发送到主机C上来。当然,因为ARP缓存是动态的,有超时时间,所以必须每隔一段时间就给A发送一个ARP回应包。为了不让B发现,我们还要对每次接受到的数据包进行转发。这样就监听了A发送给B的信息。如果想监听B发送给A的信息,方法类似。34 ARP包的填充 将命令行的参数作适当的转换后填到ARP分组结构的各字段中即可。 要注意的是,填
10、充请求包时。因为包要在Ethernet上广播,所以,物理帧头的“目的MAC”字段要填充为FFFFFFFFFFFF;而ARP帧结构中的目的MAC可填充为任意值,因为它此时不起作用。“填充数据”字段要填充为0。四、程设计过程4.1 流程图Y获取网卡列表?选择网卡打开?命令行参数 = 6?Flag=0?发送包成功? 开始YNYNYNNNY结束关闭网卡 释放包结构分配及初始化发送包结构进入发送ARP包函数填充DLC的其他字段及ARP头的各字段ARP请求,填充DLC头中目的MAC及FlagARP请求,填充DLC头中目的MAC(广播,全F)及Flag定义ARP包结构并初始化 图5 程序流程图4.2源程序#
11、include #include #include #include #include #include #include #pragma comment(lib,ws2_32.lib)/ DLC头typedef struct DLCHeader unsigned char DesMAC6; unsigned char SrcMAC6; unsigned short Ethertype; DLCHEADER;/ ARP桢typedef struct ARPFrame unsigned short HW_Type; unsigned short Prot_Type; unsigned char
12、HW_Addr_Len; unsigned char Prot_Addr_Len; unsigned short Flag; unsigned char Send_HW_Addr6; unsigned char Send_Prot_Addr4; unsigned char Targ_HW_Addr6; unsigned char Targ_Prot_Addr4; unsigned char padding18; ARPFRAME;/ ARP包=DLC头+ARP桢typedef struct ARPPacket DLCHeader dlcHeader; ARPFrame arpFrame;*PA
13、RPPACKET;ARPPacket ARPPACKET;/源文件.cpp#include #include /#include h.hint transIP(char *,unsigned char *);int transMAC(char *,unsigned char *);LPADAPTER lpAdapter;LPPACKET lpPacket;bool Send();void main(int argc,char *argv)if(argc!=6) cout输入格式错误endl; return;int i=0;memset(&ARPPACKET, 0, sizeof(ARPPACK
14、ET);if(*argv5=0) for(i=0;i6;i+) ARPPACKET.dlcHeader.DesMACi=0xff; ARPPACKET.arpFrame.Flag=(unsigned short)1;else if(*argv5=1) /填充DLC头中目的MAC地址 if(!transMAC(argv4,ARPPACKET.dlcHeader.DesMAC) return; /ARP桢中flag位置2 ARPPACKET.arpFrame.Flag=(unsigned short)0x0200; else coutflag位输入错误endl;if(!transMAC(argv2
15、,ARPPACKET.dlcHeader.SrcMAC) return;/填充DLC头中桢类型ARPPACKET.dlcHeader.Ethertype=htons(unsigned short)0x0608);ARPPACKET.arpFrame.HW_Type=(unsigned short)0x0100;/(Ethernet类型)ARPPACKET.arpFrame.Prot_Type=(unsigned short)0x0008;ARPPACKET.arpFrame.HW_Addr_Len=(unsigned char)6;ARPPACKET.arpFrame.Prot_Addr_Le
16、n=(unsigned char)4;if(!transMAC(argv2,ARPPACKET.arpFrame.Send_HW_Addr) return;if(!transIP(argv1,ARPPACKET.arpFrame.Send_Prot_Addr) return;if(!transMAC(argv4,ARPPACKET.arpFrame.Targ_HW_Addr) return;if(!transIP(argv3,ARPPACKET.arpFrame.Targ_Prot_Addr) return;for(i=0;i18;i+) ARPPACKET.arpFrame.paddingi
17、=0;if(!Send() cout发送arp包失败endl;int transIP(char *argv,unsigned char *a) char ip16; int i=0,j=0,k=0; strcpy(ip,argv); int m=strlen(argv); for(i=0;im;i+) /判断命令行输入的IP格式是否正确 if(ipi9)&ipi!=.) cout输入ip:argv格式错误3) cout输入ip:argv格式错误3) cout输入ip:argv格式错误endl; return 0; j=0; for(i=0;i4;i+) /填充IP地址 while(*(ip+j
18、)9)j+; ai=(unsigned char)atoi(ip+j); while(*(ip+j)=0&*(ip+j)=9)j+; return 1;int transMAC(char *argv,unsigned char *b) char mac18; int i=0,j=0,k=0; strcpy(mac,argv); int m=strlen(argv); for(i=0;im;i+) /判断命令行输入的MAC地址是否正确 if(maci:&maciZ&maciZ) cout输入mac:argv格式错误2) cout输入macargv格式错误5) cout输入macargv格式错误e
19、ndl; return 0; for(i=0;i=0&*(mac+j)=a&*(mac+j)=A&*(mac+j)=0&*(mac+j)=a&*(mac+j)=A&*(mac+j)= 0x80000000 & dwWindowsMajorVersion =4) /Windows NT /获取UNICODE码网卡名列表 if(PacketGetAdapterNames(AdapterNameU,&AdapterUlength)=FALSE) cout无法得到网卡列表!endl; return FALSE; /将第一个网卡名转为ASCII码 unsigned short *pAdapterName
20、=(unsigned short *)AdapterNameU; for(unsigned i=0;iAdapterAlength;i+) if(AdapterNameAi=(char)pAdapterNamei)=0) break; else /Windows 9x /获取ASCII码网卡名列表 if(PacketGetAdapterNames(AdapterNameA,&AdapterAlength)=FALSE) cout无法得到网卡列表!hFile=INVALID_HANDLE_VALUE) cout无法打开网卡,错误码:GetLastError()endl; return FALSE
21、; /发送帧 LPPACKET lpPacket; /分配发送包结构 if(lpPacket=PacketAllocatePacket()!=NULL) /初始化发送包结构 PacketInitPacket(lpPacket,&ARPPACKET,sizeof(ARPPACKET); / 每次只发送一个包 PacketSetNumWrites(lpAdapter,1); /发送包 if(PacketSendPacket(lpAdapter,lpPacket,true)=1) coutsend okendl; else cout发送包失败endl; PacketFreePacket(lpPack
22、et); /释放发送包结构 else cout分配发送包LPPACKET结构失败!endl; PacketCloseAdapter(lpAdapter); return TRUE; 4.3运行结果1.应该在预编译代码区加上预编译指令:#pragma comment(lib, ws2_32.lib);否则,链接时会出现符号无法解析的错误。2.程序中填充DLC头中帧类型应该是:ARPPACKET.dlcHeader.Ethertype = htons(unsigned short)0x0806);而实验所给的代码却是:ARPPACKET.dlcHeader.Ethertype = htons(un
23、signed short)0x0608);。而ARP报文封装在以太网帧中的帧类型字段应该是0x0806。3.程序在int transMAC(char *argv, unsigned char *b)函数中,判断MAC地址的格式是否正确后,在填充MAC地址之前,应该初始化局部变量j的值,即:j=0;。否则,在MAC地址格式正确的情况下,j的值为2,而后面填充MAC地址的时候会把正确的MAC地址的第一个十六进制字段删除。例如:正确的MAC地址- 11:12:13:14:15:16在被填充后会变成12:13:14:15:16:00。4.在bool Send()函数中,原程序打开网卡的程序代码为:lpAdapter = PacketOpenAdapter(AdapterNameA);。但是在XP系统中运行该程序时,始终打不开网卡。后经过分析,得知XP系统中的网卡名是UNICODE编码的,占2个字节,而AdapterNameA的长度是1个字节的ASCII编码方式。后来把那句代码改为:lpAdapter = PacketOpenAda
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 远程会诊系统的使用经验与改进计划
- 2025年板材卷材:普中板项目建议书
- 2025-2030中国防护眼镜行业市场发展分析及投资前景机会战略研究报告
- 2025-2030中国钢筋混凝土行业市场发展分析及发展潜力与投资机会研究报告
- 2025-2030中国钙镁磷肥市场竞争力剖析及运行态势分析研究报告
- 2025-2030中国连续激光二极管行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国辐射松行业现状动态与前景趋势研究研究报告
- 2025-2030中国软件加密系统行业市场发展现状及竞争策略与投资发展研究报告
- 2025-2030中国轨至轨输出放大器行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国豪华羊绒服装行业市场发展趋势与前景展望战略研究报告
- 2024年北京稻香村招聘考试真题
- 2025年4月自考15044马克思主义基本原理概论押题及答案
- 代办转学合同范例
- 高中主题班会 高一下学期《自律自主自觉-成就更好的自己》主题班会教案
- 猎头公司简介介绍
- 2025年ACR痛风管理指南
- 智能建筑 停车场管理系统安装及验收规范
- 2025年开封大学单招职业倾向性测试题库附答案
- GB/T 45233-2025化工园区安全风险评估导则
- 预制梁质量控制要点及注意事项手册
- 校园避震有办法PPT课件
评论
0/150
提交评论