您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 发送Ethernet+ARP数据包
计算机网络工程课程设计报告题目:发送EtherentARP包学生姓名:肖旺学号:201017010212专业班级:计科专业10102班同组姓名:李博纪伟国指导教师:李若兰设计时间:2013年下学期第16周指导老师意见:评定成绩:签名:日期:2013年6月20日1目录一、程设计的目的和意义...............................2二、设计的内容和要求.................................22.1基本要求..22.2系统开发语言及环境的选择.......................3三、设计的相关技术...................................43.1ARP协议及工作原理.............................43.2ARP的分组格式3.3工作原理:....................................43.4ARP包的填充5四、程设计过程.......................................64.1程序的流程图..................................74.2源程序代码....................................74.3运行结果16五、课程设计小结....................................17六、参考文献........................................182一、程设计的目的和意义IP地址将不同的物理地址统一起来,从而将物理地址隐藏起来,上层软件使用IP地址标识结点。但是。两台计算机只有在知道彼此的物理地址时才能进行通信。IP数据包常通过Ethernet发送。Ethernet设备并不识别32位IP地址,它们是以48位MAC地址传输Ethernet数据包的。因此,IP驱动器必须把IP目的地址转换成Ethernet网络目的地址。这两种地址之间存在着某种静态的或动态的映射,通常需要查看一张表来进行这种映射。这种地址协议(ARP)就是用来确定这些映象的协议。ARP工作时,送出一个所希望的IP地址的Ethernet广播数据包。目的地主机以一个含有IP和Ethernet地址对的数据包作为应答。发送者将这个地址对高速缓存起来,以节约不必要的ARP通信。本课程设计的目的是进一步熟悉ARP协议的帧结构以及它的运行过程二、设计的内容和要求2.1基本要求本次课程设计的基本要求是在熟悉ARP协议并了解Winpcap编程前提下,构造ARP包,选择并打开网卡,将ARP包发送。1)命令行格式:arpsendsrc_ipsrc_macdst_ipdst_macflag其中arpsend作为程序名。各参数意义:src_ip:源IP地址。src_mac:源MAC地址。dst_ip:目的IP地址。3dst_mac:目的MAC地址。Flag:0表示ARP请求;1表示ARP应答。例如:arpsend192.168.1.1FA:01:02:03:04:05192.168.1.20D:E1:02:03:B4:0612)输出:SendOK。3)程序的正确性的检验。可以安装一个截包软件,如Iris,运行该软件以查看能否收到程序发出的ARP包,并检查包中个字段填充的内容(如各地址,协议类型)是否正确。错误!未指定书签。2.2系统开发语言及环境的选择操作系统:WindowsXPProfessional运行环境:MicrosoftVisualC++6.0开发语言:C语言,C++等三、设计的相关技术3.1ARP协议及工作原理ARP协议是“AddressResolutionProtocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。ARP的基本运行过程是:1)主机A希望发送数据分组给主机B,但不知道B的物理地址。2)A发送广播报文,要求B主机用它的物理地址来响应。3)网站上所有主机都接收到这个分组。4)B识别出自己的IP地址,发送应答报文,告诉A自己的物理地址。43.2ARP的分组格式物理帧头(14B)ARP帧结构(28B)填充数据(18B)CRC(4B)图一ARP分组格式图2物理帧头08162431(位)硬件类型(Ethernet:0x1)上层协议类型(IP:0x0800)硬件地址长度(0x6)IP地址长度(0x4)操作(请求:0x1;应答:0x2)源MAC地址源MAC地址源IP地址源IP地址目的MAC地址目的MAC地址目的IP地址图3ARP帧结构3.3工作原理:源主机在传输数据前,首先要对初始数据进行封装,在该过程中会把目的主机的IP地址和MAC地址封装进去。在通信的最初阶段,我们能够知道目的主机的IP地址,而MAC地址却是未知的。这时如果目的主机和源主机在同一个网段内,源主机会以第二层广播的方式发送ARP请求报文。ARP请求报文中含有源主机的IP地址和MAC地址,以及目的主机的IP地址。当该报文通过广播方式到达目的主机时,目的主机会响应该请求,并返回ARP响应报文,从而源主机可以获取目的主机的MAC地址,同样目的主机也能够获得源主机的MAC地址。如果目的主机和源主机地址不在同一个网段内,源主机发出的IP数据包会送到交换目的MAC(6B)源MAC(6B)类型(2B)5机的默认网关,而默认网关的MAC地址同样可以通过ARP协议获取。经过ARP协议解析IP地址之后,主机会在缓存中保存IP地址和MAC地址的映射条目,此后再进行数据交换时只要从缓存中读取映射条目即可。关于ARP的功能,仅限于在没有安全防护的网络里。1)如果有多个用户都在同一个网关上网,那么若要禁止机器A上网,应该怎么做呢?就是让A得不到正确的网关的ARP映射。可以采取如下措施:伪装成网关,给机器A发送ARP包,该ARP的发送方为网关的IP,而MAC部分随便填一个地址;接收方正确填写A的相关信息。2)基于ARP欺骗的监听。如果某台计算机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的信息,方法类似。3.4ARP包的填充将命令行的参数作适当的转换后填到ARP分组结构的各字段中即可。要注意的是,填充请求包时。因为包要在Ethernet上广播,所以,物理帧头的“目的MAC”字段要填充为FFFFFFFFFFFF;而ARP帧结构中的目的MAC可填充为任意值,因为它此时不起作用。“填充数据”字段要填充为0。四、程设计过程4.1流程图6图5程序流程图YYN命令行参数=6?定义ARP包结构并初始化ARP请求,填充DLC头中目的MAC(广播,全F)及Flag填充DLC的其他字段及ARP头的各字段进入发送ARP包函数关闭网卡结束NARP请求,填充DLC头中目的MAC及FlagNNYYYN分配及初始化发送包结构获取网卡列表?选择网卡并打开?释放包结构发送包成功?Flag=0?开始74.2源程序#includeiostream.h#includefstream.h#includeconio.h#includestdio.h#includestdlib.h#includePacket32.h#includeNtddndis.h#pragmacomment(lib,ws2_32.lib)//DLC头typedefstructDLCHeader{unsignedcharDesMAC[6];unsignedcharSrcMAC[6];unsignedshortEthertype;}DLCHEADER;//ARP桢typedefstructARPFrame{unsignedshortHW_Type;unsignedshortProt_Type;unsignedcharHW_Addr_Len;unsignedcharProt_Addr_Len;unsignedshortFlag;unsignedcharSend_HW_Addr[6];8unsignedcharSend_Prot_Addr[4];unsignedcharTarg_HW_Addr[6];unsignedcharTarg_Prot_Addr[4];unsignedcharpadding[18];}ARPFRAME;//ARP包=DLC头+ARP桢typedefstructARPPacket{DLCHeaderdlcHeader;ARPFramearpFrame;}*PARPPACKET;ARPPacketARPPACKET;//源文件.cpp#includeiostream.h#includestring.h//#includeh.hinttransIP(char*,unsignedchar*);inttransMAC(char*,unsignedchar*);LPADAPTERlpAdapter;LPPACKETlpPacket;boolSend();voidmain(intargc,char*argv[]){if(argc!=6){9cout输入格式错误endl;return;}inti=0;memset(&ARPPACKET,0,sizeof(ARPPACKET));if(*argv[5]=='0'){for(i=0;i6;i++)ARPPACKET.dlcHeader.DesMAC[i]=0xff;ARPPACKET.arpFrame.Flag=(unsignedshort)1;}else{if(*argv[5]=='1'){//填充DLC头中目的MAC地址if(!transMAC(argv[4],ARPPACKET.dlcHeader.DesMAC))return;//ARP桢中flag位置2ARPPACKET.arpFrame.Flag=(unsignedshort)0x0200;}elsecoutflag位输入错误endl;}if(!transMAC(argv[2],ARPPACKET.dlcHeader.SrcMAC))return;//填充DLC头中桢类型ARPPACKET.dlcHeader.Ethertype=htons((unsignedshort)0x0608);ARPPACKET.arpFrame.HW_Type=(unsignedshort)0x0100;10//(Ethernet类型)ARPPACKET.arpFrame.Prot_Type=(unsignedshort)0x0008;ARPPACKET.arpFrame.HW_Addr_Len=(unsignedchar)6;ARPPACKET.arpFrame.Prot_Addr_Len=(unsignedchar)4;if(!transMAC(argv[2],ARPPACKET.arpFrame.Send_HW_Addr))return;if(!transIP(argv[1],ARPPACKET.arpFrame.Send_Prot_Addr))return;if(!transMAC(argv[4],ARPPAC
本文标题:发送Ethernet+ARP数据包
链接地址:https://www.777doc.com/doc-3306550 .html