快速业务通道

JPCAP-JAVA中的数据链路层控制 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25
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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号