1) 修改单播UDP的TTL值TCP以及TCP传输时的TTL值.  
2) 纯java实现。因为跨平台的原因,原则上不考虑jni的实现。但是如果针对常见的linux发行版以及Mac OS.Windows等都有流畅稳定的实现,也可以考虑接受。  
3) 必须提供具体详细的解决方案。以及相关的代码,Demo,编译环境编译条件等等。详情:http://www.misuland.com/project/selectProjectdetailByidAction.do?id=64  

解决方案 »

  1.   

    哥们,结贴吧,我说不行了。
    这个班哪个哥们像我这么傻,曾经改IP头玩?Java连TCP包头都改不了哦。
      

  2.   

    只有JNI调用平台原始套接字这种办法,或者有WinPCap,LibCap这些C库可以调用,JNI是必然的。
      

  3.   

    java毕竟是个平台,网络层的东西是动不了的,不考虑JNI的话根本不可能
      

  4.   

    稍等一下结贴,感谢healer_kx,我在想想
      

  5.   

    这个问题咱们还是不要急着下结论,要求必须更改单播UDP的TTL,但是java平台上对多播的实现是支持更改的。咱们是不是可以通过这条路来考虑一下。
      

  6.   

    应该还是可以的,不过会比较复杂,这是一个比较大的工程.
    将会用到MulticastSocket,DatagramSocketImpl,DatagramSocket等,要继承这些类,重写他们中的setTTL,getTTL方法.虽然在java中有这些方法,但在目前这些方法是不能执行的,也就是目前还没有人去做这一块.只提供了这样一个框架.
      

  7.   

    可以自己拓展java.net包,往里增加几个socket接口的实现类来完成这个,不过依然需要jni
      

  8.   

    对不起,纠正一个错误:13楼写错了
    这个不是TTL,TTL只有8位
      

  9.   

    应该不可以吧
    jvm的native如果没有实现,即便有被废除的方法,重写也没用
    何况,这样的做法相当于在重写jvm,变动绝不是一个类那么简单
    就算实现了,在不同os上的性能也不好说
    最好的办法还是native调用。jni没什么不可以的,很多第三方包都是jni调用,tomcat也有,只不过对不通的os,jni调用不同而已
    自己写一个包,对常见os都做实现就可以了,这样效率会高一些不过还是不明白,什么样的项目需要改这个东西,这么底层,为什么还要用java呢
      

  10.   

    肯定是网络中产生了大量大的垃圾包阻塞网络了,要不也没必要修改TTL值