1、使用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地址的对应关系并显示;
2、7.课程设计任务说明书。设计工作计划与进度安排1.知识准备,整体思路设计 2小时2.开发环境与程序调试环境 4小时3.构造协议需要的相关数据帧,使用标准数据帧结构 2小时4.数据帧的发送 10小时5.接收、解析目的主机的相应数据帧,并显示结果 12小时6.课程设计说明书 10小时 10小时设计考核要求1.出勤 202.答辩或演示303.课程设计说明书 50使用ARP协议获取局域网内部活动主机物理地址的程序实现一、问题描述构造多个Arp的数据帧。输入:局域网中的IP地址;输出:从控制台屏幕输出局域网内部活动主机物理地址。二、基本要求1.协议实现需要哪些数据帧?2.如何实现数据帧的发送3.如何接收
3、及解析目的主机的响应数据帧4.如何显示ARP协议的执行结果三、设计思想首先构造ARP的数据包,然后通过java对网卡数据捕获需要用到jpcap,jpcap调用wincap实现数据包的发送,并监听返回的数据包,显示出来。四、系统结构程序可以分为两部分:1:程序构造具体的ARP数据包,发送。2:监听返回的数据包,并显示结果。五、程序流程程序一开始会要求用户输入本机所在局域网内的IP字段,再通过循环对每个目的IP发送请求包(根据构造目的IP构造的ARP请求包)。当发送完ARP的请求包,系统就会在监听状态,等待是否返回响应包。如果有返回包,说明此IP在局域网中并且处于活动状态,解析显示结果。如果没有返
4、回包,说明此IP没有在局域网或者处于关机状态六、源程序import jpcap.JpcapCaptor;import jpcap.JpcapSender;import java.util.Arrays;import .InetAddress;import .Inet4Address;import jpcap.packet.ARPPacket;import jpcap.packet.EthernetPacket;import jpcap.NetworkInterface;import jpcap.NetworkInterfaceAddress;public class Demo2 public
5、static ARPPacket getTargetMAC(InetAddress targetIp) NetworkInterface devices = JpcapCaptor.getDeviceList(); NetworkInterface device = null; / 寻找适合的网络设备 loop: for (NetworkInterface d : devices) for (NetworkInterfaceAddress addr : d.addresses) if (!(addr.address instanceof Inet4Address) continue; byte
6、 bip = targetIp.getAddress(); byte subnet = addr.subnet.getAddress(); byte bif = addr.address.getAddress(); for (int i = 0; i 4; i+) bipi = (byte) (bipi & subneti); bifi = (byte) (bifi & if (Arrays.equals(bip, bif) device = d; break loop; if (device = null) throw new IllegalArgumentException(targetI
7、p + is not a local address); JpcapCaptor captor = null; / 打开一个网络数据包捕捉者 try captor = JpcapCaptor.openDevice(device, 2000, false, 300); / 只接收ARP数包 captor.setFilter(arp, true); catch (Exception e) / 获得发送数据包的实例 JpcapSender sender = captor.getJpcapSenderInstance(); InetAddress srcip = null; for (NetworkI
8、nterfaceAddress addr : device.addresses) if (addr.address instanceof Inet4Address) srcip = addr.address; break; / 进行广播数据报的MAC地址 byte broadcast = new byte (byte) 255, (byte) 255, (byte) 255, (byte) 255, (byte) 255, (byte) 255 ; / 构造REQUEST 类型的ARP的数据包 ARPPacket arp = new ARPPacket(); arp.hardtype = AR
9、PPacket.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地址 ar
10、p.target_protoaddr = targetIp.getAddress(); / 构造以太网头部 EthernetPacket ether = new EthernetPacket(); ether.frametype = EthernetPacket.ETHERTYPE_ARP; ether.src_mac = device.mac_address; ether.dst_mac = broadcast; / ARP数据包加上以网关头部 arp.datalink = ether; / 向局域网广播ARP请求数据报 sender.sendPacket(arp); / 接收目标主面的答应
11、ARP数据报 while (true) ARPPacket p = (ARPPacket) captor.getPacket();/ 接收返回包 if (p = null) System.out.println(targetIp + 不是本地局域网的IP号 return p; else if(Arrays.equals(p.target_protoaddr, srcip.getAddress() public static void main(String args) throws Exception String s = 10.13.72.; for (int n = 1; n = 254;
12、 n+) System.out.println(s+n); ARPPacket arpP = Demo2.getTargetMAC(InetAddress.getByName(s+n); if(arpP=null) else System.out.println(硬件类型: + arpP.hardtype);操作类型: + arpP.operation);源MAC地址: + arpP.getSenderHardwareAddress();IP地址: + arpP.getSenderProtocolAddress();目标 + arpP.getTargetHardwareAddress(); +
13、 arpP.getTargetProtocolAddress();=七、测试数据循环输入局域网中的ip 10.15.130.0/24八、测试情况结 论通过这段时间对本系统的设计与实现,我们成长了很多,也增长了不少知识。也认识到了自己的不足之处:以前总是眼高手低,现在真动手操作了,才知道,要想熟练的运用学过的知识,也不是一件简单易行的事情,需要不断的积累,不断的实践,不断的总结经验和教训。同时,在设计过程中,遇到不会的问题应及时跟同学老师交流,或者查阅相关文献资料,这样才能提高工作效率,并且提高自己的自信心,同时也可以增强团队合作能力,和与他人的沟通能力。这次实践将会是我们人生的一笔宝贵财富。参考文献1 美Rogers Cadenhead. Java.梅兴文译.第4版.北京:人民邮电出版社,20072 美Bruce Eckel. Thinking In Java.英文第4版.北京:机械工业出版社,20073 陈轶.姚晓昆编著.Java程序设计实验指导.北京:清华大学出版社,20064 杨昭编著.二级Java语言程序设计教程.北京:中国水利水电出版社,20065 赵文靖编著.Java程序设计基础与上机指导.北京:6 赵毅主编.跨平台程序设计语言Java.西安:西安电子科技大学出版社,2006
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1