每张网卡难道不是只能有一个IP?如果是这样,你绑定了IP不就是等于绑定了MAC了吗?UDP是传输层的协议,MAC是数据链路层的协议,中间隔了个网络层(IP层),你就是绑定了MAC,UDP还是会与IP层对话的,你绕不过这个IP层.个人观点.关于UDP的内容不是太懂.

解决方案 »

  1.   

    因为我这个软件收集2层交换机数据的,而二层交换机是没有IP这个概念的,虽然UDP是在IP之上,但是在我们这个软件里面,IP是没有任何作用的,也就是说,我随便写个IP放在数据包里面填充字节,都不影响我软件的使用,这样说,明白么?
    还有就是一张网卡怎么可能只能存在一个IP?这个是一个非常入门级的网络知识啊 汗...- -||
      

  2.   

    java2000.net 搜索 UDP能找到几个例子
    比如
    Java.net UDP编程
    Java中的UDP协议编程
    ...
      

  3.   

    谢谢楼上的 那里面介绍的方法我都会 但是还是没有能绑定某一个MAC来收发数据的方法
      

  4.   

    额。。客户需求真变态,能完成功能不就行了么?我们Java程序是跑在JVM上的,换句话说,Java程序一般情况下,只能看到JVM这一层的东西。
    如果想要进行底层开发,除了JNI我想不到还有其他方法了。其实JPCAP也是使用了JNI的方式。不过,我还是推荐楼主使用JPCAP,或者其他的插件,省事,而且代价小。
      

  5.   

    如果只想使用JDK的API,恐怕只有InetAddress类提供该功能了,如果它都没有,那就没办法了
      

  6.   

    答:标准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。
      

  7.   

    感谢10楼的大大的建议,我现在针对你的建议说一下我的困境吧
    1.在下一条我会详细说明
    2.我现在已经完成的功能就是依靠WINPCAP+JPCAP来完成客户的需求的,而且所有的测试也都通过了,但是用过WINPCAP的人都知道,这是需要安装的,所以当我们把安装包发给客户验收的时候,客户一看到需要安装插件就不干了,坚决要求我们把WINPCAP去掉,也就连带的把JPCAP去掉了(因为这两个需要配合使用),所以我现在被他们弄得很是无语....
    3.如果实在是没办法依靠JDK API无法完成的话,那我们只能和客户谈判,要么你接受插件,要么重新签订合同,我们外包给别人做,但是老板却都不想看见这样的情况,郁闷至极啊!
      

  8.   

    试下改路由表呢?
    设条静态路由记录,强制发往xxxIP的数据包从XXX网卡走.
      

  9.   

    改PC的路由表,其他网卡也可以正常用啊.
    我只是强制发往XXIP的包从XX网卡走而已,对其他网卡没影响啊.
    不太明白你做的软件功能,能详细说说么?
      

  10.   

    我想使用JAVA本身自带的方法绑定自己PC的某一张网卡收发UDP数据 请问我要怎么做?
    ======
    首先保证那片网卡和软件要通信的IP[段]能PING通.
    然后改PC路由表,设置所有发往指定IP[段]的包从这网卡走.
    即使多网卡间路由记录有重复,也可以用细化路由记录解决.
      

  11.   

    请问具体需要怎样实现?你这样说 我感觉很模糊 能说的具体一点么?JAVA本身的方法能实现么?
      

  12.   

    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下,再抓几个包看看就知道了.
    试试!
      

  13.   

    你的交换机也有管理IP吧.
    我糊涂了.
    Q:562174885
      

  14.   

    挖个坟...
    wpcap安装是可以不被察觉的,直接拷贝那几个dll,有两个dll不能覆盖,可以先把原来的剪切出来,再把你的拷贝进去。
    在安装包脚本里偷偷安装wpcap就可以啦
      

  15.   

    使用NetworkInterface就可以呀:
    MulticastSocket socket = new MulticastSocket();
    NetworkInterface ni = NetworkInterface.getByName("xxxx-name");
    if(ni!=null){
    socket.setNetworkInterface(ni);
    }
    socket.joinGroup("your remote ip");socket.send(data....)
    这样就可以用你指定的名为xxx-name的网络设备发送数据了呀
      

  16.   

    P.S.
    the network device name I metioned is normally known by names such as "le0 (Solaris)" or “eth0 (linux)”.