2010-06-02 72 views
5

如何識別自定義Wireshark解剖器中丟失的UDP幀?Wireshark解剖器:如何識別丟失的UDP幀?

我已經寫了CQS feedreference page)的自定義解剖。我們的服務器在收到此饋送時存在空白。根據Wireshark,一些UDP幀永遠不會被接收。我知道這些幀是因爲我們所有其他服務器都沒有間隙而發送的。

甲CQS幀由多個消息,每個具有其自己的序列號。我的自定義解剖提供了以下數據,以Wireshark的:

cqs.frame_gaps   - the number of gaps within a UDP frame (always zero) 
cqs.frame_first_seq  - the first sequence number in a UDP frame 
cqs.frame_expected_seq - the first sequence number expected in the next UDP frame 
cqs.frame_msg_count  - the number of messages in this UDP frame 

而且我顯示每個自定義列這些值,如在此截圖:wireshark screenshot http://img692.imageshack.us/img692/9484/wiresharkcqs.jpg

我嘗試添加代碼到我的解剖,僅僅保存最後處理的序列號(作爲本地靜態),並在解剖器處理幀時標記差距,其中current_sequence != (previous_sequence + 1)。這不起作用,因爲可以按隨機訪問順序調用解剖器,具體取決於您在GUI中單擊的位置。所以,你可以處理幀10,然後框架15,然後框架11等

有沒有辦法爲我的剝離知道,如果缺少它之前出現的幀(或後面的幀)?

解剖器是用C寫

(另見A companion post on serverfault.com

回答

4

你應該記住,Wireshark的解剖確實多次信息的功能參數之一。首次在加載文件時按嚴格的順序對數據包進行分割。然後,當您滾動packet_tree_view或選擇一個數據包來構建它的樹時,它會調用解析器。

您可以檢查是否有剝離被稱爲FOT療法第一次:

if (PINFO_IS_VISITED(pinfo)) { ... }; 

你應該剝離行爲不同的第一和下一個夾層。

在第一夾層你要存儲每個數據包的一些信息(例如哈希表),因爲它的序列號,如果它出了故障。第二次調用時,您將需要它來正確構建數據包樹。

+0

我很久沒有碰過這個,但我懷疑這是答案。我沒有意識到包被解剖了兩次。 – 2012-10-30 11:43:18

0

我卻不知道,如果你能窺視到前面或後面的幀,但是當Wireshark是加載tcpdump的,它會調用你的解剖器在每個幀上依次排列。因此,我可以添加一個靜態本地變量,它是一個數組或散列表,並將您的值存儲在那裏。然後你的解剖器可以檢查該陣列的前一幀和後一幀,並進行分析。

你應該看看這個PINFO vairable,這是對有關幀號,IP信息等