2009-11-12 18 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頭的訪問。