2012-01-01 36 views
2

我正在開發一個http服務器。現在我想做一些統計,具體來說,我想知道客戶端關閉了多少個tcp連接,並且我的服務器關閉了多少個tcp連接。如何用tcpdump從第二個分析tcp連接的第一個fin數據包?

我在我的http服務器上關閉了保活功能,所以正常的情況是我的服務器發送第一個FIN數據包,客戶端發送第二個數據包,這意味着服務器正常關閉連接。如果它們的順序相反,則表示關閉異常,這是我關心的問題。

這裏是一個問題,我怎樣才能告訴從第二個第一個FIN數據包與tcpdump?由於它們都被設置在FIN和ACK標誌位中。

在此先感謝和新年快樂!

回答

1

我通過ssh隧道連接到我的網絡服務器,它正在監聽5000/TCP。我運行了會話的tcpdump,即使您忽略了時間戳,仍然很清楚從TCP源端口號發送了哪些內容。

05:42:06.344592 IP localhost.5000 > localhost.37924: Flags [F.], seq 243, 
    ack 419, win 529, options [nop,nop,TS val 120830308 ecr 120830308], length 0 
05:42:06.381872 IP localhost.37924 > localhost.5000: Flags [.], ack 244, 
    win 513, options [nop,nop,TS val 120830318 ecr 120830308], length 0 
05:42:06.382504 IP localhost.37924 > localhost.5000: Flags [F.], seq 419, 
    ack 244, win 513, options [nop,nop,TS val 120830318 ecr 120830308], length 0 
05:42:06.382535 IP localhost.5000 > localhost.37924: Flags [.], ack 420, 
    win 529, options [nop,nop,TS val 120830318 ecr 120830318], length 0 

05:42:06.344592,我的網絡服務器ACK'd從客戶端的字節,並設置FIN標誌。我知道這是網絡服務器,因爲源端口是5000.在現實世界中,它甚至更容易,單獨的源IP地址就可以讓它消失。

05:42:06.382504客戶端發送一個ACK到服務器的FIN。再次,我們知道,因爲源端口不是5000.

+1

非常感謝。我沒有清楚地提出我的問題。困難的是我有很多連接,並且不可能手動處理每個連接。所以正確的標題應該是「如何從第二個使用tcpdump告訴第一個fin數據包,而不需要人工干預」 – kekaoyunfuwu 2012-01-10 03:55:05

+0

當它們到達列表或數組時,記錄FIN數據包(每個會話)。如果該數組不爲零,則這是該會話的另一個FIN。 – 2012-01-10 06:28:41

相關問題