1

如果我有一个侦听多播数据的 Java 程序,我如何知道传入数据报的剩余 TTL 是多少?

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

4

3 回答 3

1

到达数据包是什么?一个数据报或 UDP 数据包实际上可以被分成几个 IP 数据包,如果它们的路由不同,它们会以不同的 TTL 到达。无论哪种情况(拆分与否),Java 都不提供对 IP 标头的访问。

于 2009-11-12T17:19:38.693 回答
1

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

  • 原始套接字不是 Java 原生的(尽管至少有一个多平台第 3 方插件可用: http: //www.savarese.org/software/rocksaw/index.html)。
  • 在大多数操作系统上,您必须具有 root 访问权限或管理权限才能使用原始套接字
  • 如果您还想使用 UDP 数据,您将不得不自己进行校验和并重新组装分段数据报......以及可能在片段之间遇到不同的 TTL(如 jambjo 所说)。
于 2009-11-17T20:51:04.287 回答
0

我看了(我想你也做了),但找不到一个很好的 Java API 来做这件事。

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

于 2009-11-12T17:00:30.010 回答