我正在生成我捕獲的數據包的PCAPNG文件。除了每個數據包的時間戳無效以外,一切看起來都很好。將時間戳存儲爲兩個32位字(pcapng格式)
簡而言之,我將時間戳與所有其他數據一起存儲在字節緩衝區中,並將其寫入文件。當我然後用十六進制編輯器,我得到以下值時間戳字段檢查文件:
ByteBuffer data = ByteBuffer.allocate(epbLength).order(ByteOrder.BIG_ENDIAN);
data.putlong(timestamp);
00 00 01 49 D3 7F B4 D9 => 1416592602329 (According to Hex Fiend)
這似乎是一個有效的時間戳。然而,在Wireshark的打開文件我得到January 12, 46860
望着關於時間戳PCAPNG規範其規定如下:
時間戳(高)和時間戳(低):高,低32位 表示時間戳的64位數量。時間戳是一個單獨的 64位無符號整數,表示自 1/1/1970 00:00:00 UTC以來的單元數。通過接口 描述該數據包引用的塊的'if_tsresol'選項來指定解釋該字段的方式 。請注意, 與libpcap文件格式不同,時間戳不會保存爲 兩個32位值,它們自從 1/1/1970開始計算秒和微秒。它們被保存爲一個單一的64位數量,保存爲32位字的兩個 。
因此,我認爲我只是簡單地將值存儲在字節緩衝區中,然後將其保存到文件中是錯誤的。但我該如何將時間戳保存爲兩個32位字?我嘗試過不同的東西,比如簡單地將值存儲爲兩個整數,但似乎沒有給出正確的格式。
請注意,我還在數據包中指定了if_tsresol,但無論我給它什麼值(3爲10^-3 => millis),它都不會影響Wireshark解釋文件的方式。
另一件需要注意的事情是,如果我將時間戳存儲爲秒,我確實在wireshark中獲得了有效的時間戳。如所看到的here然而,毫秒被丟棄,這意味着在給定時間戳的情況下,在同一秒內接收的所有分組的排序不能被解決。
作爲參考,在這裏是從Wireshark的TCP捕捉較早採取了時間戳字段:
86 07 05 00 5A A5 4C F8
不知怎的,我需要存儲我的時間戳像他們這樣做。
最新PCAP規範草案可以發現here