【问题标题】:How to tell the first fin packet of tcp connection from the second with tcpdump?如何用 tcpdump 区分 tcp 连接的第一个 fin 数据包和第二个 fin 数据包?
【发布时间】:2012-01-01 07:26:35
【问题描述】:

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

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

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

提前致谢,新年快乐!

【问题讨论】:

    标签: session networking tcp tcpdump


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

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

    【讨论】:

    • 非常感谢。我没有清楚地提出我的问题。困难的是我有很多连接,不可能手动处理每个连接。所以正确的标题应该是“如何在没有人工干预的情况下使用 tcpdump 区分第一个 fin 数据包和第二个 fin 数据包”
    • 记录 FIN 数据包(每个会话),因为它们以列表或数组的形式到达。如果数组不为零,则这是该会话的另一个 FIN。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2012-01-31
    • 2015-09-24
    • 2012-10-14
    相关资源
    最近更新 更多