科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道关于JAVA的UDP协议

关于JAVA的UDP协议

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

关于JAVA的UDP协议

作者:csdn 来源:csdn 2009年12月17日

关键字: 问答 JavaSE java

  • 评论
  • 分享微博
  • 分享邮件

关于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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章