3

我正在开发一个http服务器。现在我想做一些统计,具体来说,我想知道有多少 tcp 连接被客户端关闭,有多少被我的服务器关闭。

我在我的http服务器上关闭了Keep-alive功能,所以正常情况是我的服务器发送第一个FIN数据包,客户端发送第二个,这意味着我的服务器正常关闭了连接。如果它们的顺序相反,则表明关闭异常,我很在意。

问题来了,如何使用 tcpdump 区分第一个 FIN 数据包和第二个 FIN 数据包?由于它们都在 FIN 和 ACK 标志位中设置。

提前致谢,新年快乐!

4

1 回答 1

2

我正在通过隧道连接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,我的网络服务器从客户端确认字节并设置FIN标志。我知道它是网络服务器,因为源端口是 5000。在现实世界中,这更容易,仅您的源 IP 地址就可以泄露它。

05:42:06.382504客户端向服务器的FIN. 同样,我们知道是因为源端口不是 5000。

于 2012-01-01T11:48:02.257 回答