如何用tcpdump从第二个tcp连接告诉第一个fin包?

时间:2012-01-01 07:26:35

标签: session networking tcp tcpdump

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

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

这是一个问题,如何通过tcpdump告诉第二个FIN数据包?由于它们都设置在FIN和ACK标志位中。

提前致谢并祝新年快乐!

1 个答案:

答案 0 :(得分: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发送了ACK。同样,我们知道因为源端口不是5000。