您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > ARP协议获取局域网内部活动主机物理地址的程序实现
山东建筑大学计算机科学与技术学院课程设计说明书题目:ARP协议获取局域网内部活动主机物理地址的程序实现课程:计算机网络院(部):计算机科学与技术专业:网络工程班级:网络***学生姓名:张***学号:*****111285指导教师:刘楠完成日期:2014-7-9山东建筑大学计算机学院课程设计说明书I目录课程设计任务书.................................................I使用ARP协议获取局域网内部活动主机物理地址的程序实现...........1一、问题描述...................................................1二、基本要求...................................................1三、设计思想...................................................1四、系统结构...................................................1五、程序流程..................................................2六、源程序.....................................................2七、测试数据...................................................5八、测试情况...................................................6结论..........................................................7山东建筑大学计算机学院课程设计说明书I山东建筑大学计算机科学与技术学院课程设计任务书设计题目使用ARP协议获取局域网内部活动主机物理地址的程序实现(Java)已知技术参数和设计要求1.已知参数:选择适当的网络适配器,以绑定Winpcap。2.设计要求:2.1协议实现需要哪些数据帧?注意要数据帧的定义要符合公共标准。2.2如何实现数据帧的发送?2.3如何接收及解析目的主机的响应数据帧?2.4如何显示ARP协议的执行结果?3.JAVA环境为Eclipse设计内容与步骤1.熟悉ARP协议的工作原理;2.熟悉ARP协议相关数据帧结构;3.构造ARP请求数据帧;4.使用Winpcap相关函数实现数据帧的发送;5.接收及解析目的主机的响应数据帧;6.获得IP地址与MAC地址的对应关系并显示;7.课程设计任务说明书。设计工作计划与进度安排1.知识准备,整体思路设计2小时2.开发环境与程序调试环境4小时3.构造协议需要的相关数据帧,使用标准数据帧结构2小时4.数据帧的发送10小时5.接收、解析目的主机的相应数据帧,并显示结果12小时6.课程设计说明书10小时10小时设计考核要求1.出勤20%2.答辩或演示30%3.课程设计说明书50%山东建筑大学计算机学院课程设计说明书1使用ARP协议获取局域网内部活动主机物理地址的程序实现一、问题描述构造多个Arp的数据帧。输入:局域网中的IP地址;输出:从控制台屏幕输出局域网内部活动主机物理地址。二、基本要求1.协议实现需要哪些数据帧?注意要数据帧的定义要符合公共标准。2.如何实现数据帧的发送3.如何接收及解析目的主机的响应数据帧4.如何显示ARP协议的执行结果三、设计思想首先构造ARP的数据包,然后通过java对网卡数据捕获需要用到jpcap,jpcap调用wincap实现数据包的发送,并监听返回的数据包,显示出来。四、系统结构程序可以分为两部分:1:程序构造具体的ARP数据包,发送。2:监听返回的数据包,并显示结果。山东建筑大学计算机学院课程设计说明书2五、程序流程程序一开始会要求用户输入本机所在局域网内的IP字段,再通过循环对每个目的IP发送请求包(根据构造目的IP构造的ARP请求包)。当发送完ARP的请求包,系统就会在监听状态,等待是否返回响应包。如果有返回包,说明此IP在局域网中并且处于活动状态,解析显示结果。如果没有返回包,说明此IP没有在局域网或者处于关机状态六、源程序importjpcap.JpcapCaptor;importjpcap.JpcapSender;importjava.util.Arrays;importjava.net.InetAddress;importjava.net.Inet4Address;importjpcap.packet.ARPPacket;importjpcap.packet.EthernetPacket;importjpcap.NetworkInterface;importjpcap.NetworkInterfaceAddress;开始输入目的IP构造ARP数据包监听返回的数据包解析数据包,显示结果是否有数据包返回是否山东建筑大学计算机学院课程设计说明书3publicclassDemo2{publicstaticARPPacketgetTargetMAC(InetAddresstargetIp){NetworkInterface[]devices=JpcapCaptor.getDeviceList();NetworkInterfacedevice=null;//寻找适合的网络设备loop:for(NetworkInterfaced:devices){for(NetworkInterfaceAddressaddr:d.addresses){if(!(addr.addressinstanceofInet4Address))continue;byte[]bip=targetIp.getAddress();byte[]subnet=addr.subnet.getAddress();byte[]bif=addr.address.getAddress();for(inti=0;i4;i++){bip[i]=(byte)(bip[i]&subnet[i]);bif[i]=(byte)(bif[i]&subnet[i]);}if(Arrays.equals(bip,bif)){device=d;breakloop;}}}if(device==null)thrownewIllegalArgumentException(targetIp+isnotalocaladdress);JpcapCaptorcaptor=null;//打开一个网络数据包捕捉者try{captor=JpcapCaptor.openDevice(device,2000,false,300);//只接收ARP数包captor.setFilter(arp,true);}catch(Exceptione){}//获得发送数据包的实例JpcapSendersender=captor.getJpcapSenderInstance();InetAddresssrcip=null;for(NetworkInterfaceAddressaddr:device.addresses)if(addr.addressinstanceofInet4Address){山东建筑大学计算机学院课程设计说明书4srcip=addr.address;break;}//进行广播数据报的MAC地址byte[]broadcast=newbyte[]{(byte)255,(byte)255,(byte)255,(byte)255,(byte)255,(byte)255};//构造REQUEST类型的ARP的数据包ARPPacketarp=newARPPacket();arp.hardtype=ARPPacket.HARDTYPE_ETHER;arp.prototype=ARPPacket.PROTOTYPE_IP;arp.operation=ARPPacket.ARP_REQUEST;arp.hlen=6;arp.plen=4;//源MAC地址arp.sender_hardaddr=device.mac_address;//源IP地址arp.sender_protoaddr=srcip.getAddress();//目地MAC地址:广播地址全为1(二进制)arp.target_hardaddr=broadcast;//目地IP地址arp.target_protoaddr=targetIp.getAddress();//构造以太网头部EthernetPacketether=newEthernetPacket();ether.frametype=EthernetPacket.ETHERTYPE_ARP;ether.src_mac=device.mac_address;ether.dst_mac=broadcast;//ARP数据包加上以网关头部arp.datalink=ether;//向局域网广播ARP请求数据报sender.sendPacket(arp);//接收目标主面的答应ARP数据报while(true){ARPPacketp=(ARPPacket)captor.getPacket();//接收返回包if(p==null){System.out.println(targetIp+不是本地局域网的IP号);returnp;}elseif(Arrays.equals(p.target_protoaddr,srcip.getAddress())){returnp;}}山东建筑大学计算机学院课程设计说明书5}publicstaticvoidmain(String[]args)throwsException{Strings=10.13.72.;for(intn=1;n=254;n++){System.out.println(s+n);ARPPacketarpP=Demo2.getTargetMAC(InetAddress.getByName(s+n));if(arpP==null){}else{System.out.println(硬件类型:+arpP.hardtype);System.out.println(操作类型:+arpP.operation);System.out.println(源MAC地址:+arpP.getSenderHardwareAddress());System.out.println(源IP地址:+arpP.getSenderProtocolAddress());System.out.println(目标MAC地址+arpP.getTargetHardwareAddress());System.out.println(目标IP地址+arpP.getTargetProtocolAddress());System.out.println(===================================);}}}}七、测试数据循环输入局域网中的ip10.15.130.0/24山东建筑大学计算机学院课程设计说明书6八、测试情况山东建筑大学计算机学院课程设计说明书7结论通过这段时间对本系统的设计与实现,我们成长了很多,也增长了不少知识。也认识到了自己的不足之处:以前总是眼高手低,现在真动手操作了,才知道,要想熟练的运用学过的知识,也不是一件简单易行的事情,需要不断的积累,不断的实践,不断的总结经验和教训。同时,在设计过程中,遇到不会的问题应及时跟同学老师交流,或者查阅相关文献资料,这样才能提高工作效率,并且提高自己的自信心,同时也可以增强团队合作能力,和与他人的沟通能力。这次实践将会是我们人生的一笔宝贵财富。山东建筑大学计算机学院课程设计说明书8参考文献[1][美]RogersCadenhead.Java.梅兴文译.第4版.北京:人民邮电出版社,2007[2][美]BruceEckel.Thinki
本文标题:ARP协议获取局域网内部活动主机物理地址的程序实现
链接地址:https://www.777doc.com/doc-6269862 .html