我正在使用Java应用程序将UDP数据包发送到Android设备。在那里我有另一个接收这些UDP数据包并显示其数据的Java应用程序 - 非常简单。如何在Java中获取UDP数据包的TTL?
现在我正在研究一些路由算法 - 因此很高兴知道UDP数据包发送后有多少跳。我的想法是读出数据包的TTL(生存时间)值并显示它。你知道这是纯粹的Java可能吗?类DatagramPacket
根本没有提供任何提示。
我想这是不可能的,因为这个信息可能已经被删除在较低层,但我只是想确定。 :-)
我正在使用Java应用程序将UDP数据包发送到Android设备。在那里我有另一个接收这些UDP数据包并显示其数据的Java应用程序 - 非常简单。如何在Java中获取UDP数据包的TTL?
现在我正在研究一些路由算法 - 因此很高兴知道UDP数据包发送后有多少跳。我的想法是读出数据包的TTL(生存时间)值并显示它。你知道这是纯粹的Java可能吗?类DatagramPacket
根本没有提供任何提示。
我想这是不可能的,因为这个信息可能已经被删除在较低层,但我只是想确定。 :-)
的TTL field是,如你所知,底层IP协议(使用时)没有的,UDP的一个特征。因此它在DatagramPacket API中不可见是有道理的。不过,我认为你是对的。通常不可能通过数据报级API访问IP数据包:您可能需要查看数据包捕获。
这是IP头的一部分,并从套接字设置,显然只适用于组播套接字。检查这个答案:
您可以使用MulticastSocket而不是DatagramSocket进行单播但是你仍然无法从中获取数据包的TTL。 getTimeToLive()方法仅返回用于* sending *的默认TTL。 – EJP 2010-11-25 23:16:38
[确定Java中多播数据包的剩余TTL]的可能重复(http://stackoverflow.com/questions/1723429/determine-the-remaining-ttl-of-a-multicast-packet-in-java ) – 2010-11-25 14:19:25
(答案似乎是,在纯Java中不可能获得剩余的TTL,并且TTL仅在原始IP数据包级别才有意义。) – 2010-11-25 14:20:19