JPCAP-JAVA中的数据链路层控制 - 编程入门网
ion = ARPPacket.ARP_REPLY;arpGate.hlen = 6;arpGate.plen = 4;arpGate.sender_hardaddr = device.mac_address;arpGate.sender_protoaddr = InetAddress.getByName(targetIp).getAddress();arpGate.target_hardaddr = gateMAC;arpGate.target_protoaddr = InetAddress.getByName(gateIp).getAddress();
EthernetPacket ethToGate = new EthernetPacket();ethToGate.frametype = EthernetPacket.ETHERTYPE_ARP;ethToGate.src_mac = device.mac_address;ethToGate.dst_mac = gateMAC;arpGate.datalink = ethToGate; thread=new Thread(new Runnable(){ //创建一个进程控制发包速度public void run() {while (true) {sender.sendPacket(arpTarget);sender.sendPacket(arpGate);Thread.sleep(500);}).start();recP(); //接收数据包并转发}/***修改包的以太头,转发数据包*参数 packet 收到的数据包*参数 changeMAC 要转发出去的目标*/private void send(Packet packet, byte[] changeMAC) { EthernetPacket eth;if (packet.datalink instanceof EthernetPacket) {eth = (EthernetPacket) packet.datalink;for (int i = 0; i < 6; i++) {eth.dst_mac[i] = changeMAC[i]; //修改包以太头,改变包的目标eth.src_mac[i] = device.mac_address[i]; //源发送者为A}sender.sendPacket(packet);}}/***打印接受到的数据包并转发*/public void recP(){IPPacket ipPacket = null;while(true){ipPacket = (IPPacket)jpcap.getPacket();System.out.println(ipPacket);if (ipPacket.src_ip.getHostAddress().equals(targetIp))send(packet, gateMAC);elsesend(packet, targetMAC);}} 注意:这个例子只是为了说明问题,并没有考虑到程序的健壮性,所以并不一定能在任何一台机器任何一个系统上运行。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |