2009-11-12 21 views
1

如果我有一个侦听多播数据的Java程序,该如何判断传入数据报的剩余TTL是多少?确定Java中多播数据包的剩余TTL

我知道如何在发送组播套接字上设置TTL,但我想知道到达数据包的剩余TTL。

+0

经过一番进一步的调查,我认为这是不可能从纯Java。 如果我愿意使用JNI,我认为可以使用rocksaw库完成:http://www.savarese.com/software/rocksaw/ – 2009-11-12 17:30:17

回答

1

如果您接收到带有原始套接字的UDP数据报,则可以检查TTL(或IP或UDP标头中的其他任何内容)。有很多陷阱,虽然:

  • 原始套接字非本地到Java(虽然至少一个多平台的第三方插件可用:http://www.savarese.org/software/rocksaw/index.html)。
  • 在大多数操作系统中,你必须有root权限或管理员权限才能使用原始套接字
  • 如果你想同时使用UDP数据,你就必须做校验和零散的数据报的重组自己......以及可能遇到不同的片段之间的TTL(正如jambjo所说的)。
0

我看着(正如我想象你做的那样),但找不到一个很好的Java API来做到这一点。

TTL是IPv4数据报中的第9个完整字节。如果从输入的数据报中输出DatagramPacket的第9个字节,会发生什么?这看起来像TTL值吗?或者,来自IP数据报的报头是否在DatagramPacket中不可用,只有IPv4数据报的数据部分?

1

什么是抵达包?实际上,数据报或UDP数据包可能会被拆分为多个IP数据包,如果路由不同,则数据包将以不同的TTL到达。在任何一种情况下(分裂或不分裂),Java都不提供对IP头的访问。