如果我有一个侦听多播数据的 Java 程序,我如何知道传入数据报的剩余 TTL 是多少?
我知道如何在发送多播套接字上设置 TTL,但我想知道到达数据包的剩余 TTL。
到达的数据包是什么?一个数据报或 UDP 数据包实际上可以被分成几个 IP 数据包,如果它们的路由不同,它们会以不同的 TTL 到达。无论哪种情况(拆分与否),Java 都不提供对 IP 标头的访问。
如果您收到带有原始套接字的 UDP 数据报,您可以检查 TTL(或 IP 或 UDP 标头中的任何其他内容)。但是有很多陷阱:
我看了(我想你也做了),但找不到一个很好的 Java API 来做这件事。
TTL 是 IPv4 数据报中的第 9 个完整字节。如果从传入的数据报中输出 DatagramPacket 的第 9 个字节会发生什么?这看起来像 TTL 值吗?或者,IP 数据报的标头是否在 DatagramPacket 中不可用,只有 IPv4 数据报的数据部分?