扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
关于JAVA的UDP协议
我想使用JAVA本身自带的方法绑定自己PC的某一张网卡收发UDP数据 请问我要怎么做?
(可以不用把源码写给我,只要告诉我用什么类或者什么方法,甚至是给我点提示都行)
1.不能使用插件(因为我之前用JPCAP实现了,但是客户不允许)
2.需要绑定MAC,因为我做的项目的通信不需要基于IP,所以绑定IP是没什么用的。
我把我用JPCAP实现的方法贴出来 以便大家好理解
Java code
EthernetPacket ether = new EthernetPacket(); ether.frametype = EthernetPacket.ETHERTYPE_IP; ether.dst_mac = {(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff}; JpcapSender sender = JpcapSender.openDevice(devices[i]); ether.src_mac = devices[i].mac_address; UDPPacket p = new UDPPacket(5555,5556); p.datalink = ether;
其中,devices[]是我获取的PC机所有网卡信息,通过p.datalink = ether;这句话,我就可以指定网卡收发UDP数据了,不知道我该怎么用JAVA本身自带的方法实现
答:标准JDK API的java.net包中是不支持数据链路层功能的。连IP层都不支持。(JDK6.0中所谓的获取网卡MAC主要目的还是用于组播的网卡MAC绑定。)我可以明确对楼主说:你的这个需求在标准JAVA API中是无法完成的。
你的途径有:
1)支持数据链路层功能的包如:JPCAP包[它其实是从LINUX中有名的LIBPCAP轻量级包装而来的]
2)你自己的JNI或JNA[用C在数据链路层写--这在LINUX下很好写,在WINDOWS下在数据链路层写,你会很麻烦,除非你用第三方的低层驱动-如:有名的WINPCAP包中的低层网络驱动。](用C写,JAVA调用)
3)一个网卡可以绑定多个IP,如:逻辑多址。绑定IP其实没什么用。真正有用的(更强一些的)当然是绑定MAC。
JAVA本身不能实现,再加个类似JPCAP的就可以.
例:
目标IP:192.168.100.254
宿主PC-NIC-1:192.168.100.1
宿主PC-NIC-2:10.3.1.1
假设你的客户要求往[目标IP]去包都要从NIC2走,那么做二个设置:
1.在NIC2上加个IP[192.168.100.250],保证能PING通[目标IP].
2.修改PC路由表[假设PC是瘟到死系统]
route add 192.168.100.254 255.255.255.255 192.168.100.250
这样就应该可以了.
改完后PING下,再抓几个包看看就知道了.
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者