【问题标题】:Differentiate between TCP Connections using Seq No , Ack No and/or Datasize使用 Seq No 、 Ack No 和/或 Datasize 区分 TCP 连接
【发布时间】:2012-01-02 05:27:06
【问题描述】:

我通过收集的数据包转储聚合连接,使用 TCPDUMP 收集。我的代码是用 Ruby 编写的。 该代码将使用 4 元组(SrcIP、SrcPort、DstIP、DstPort)区分连接 现在,如果连接是在同一台机器之间,具有相同的 IP 和相同的端口,则通过以下方法区分连接。 1. 如果连接之间的时间超过 2 小时,那么它是一个新的连接 2. 如果我们已经看到了 FIN 或 RST,那么新数据包来自新连接 3.如果SYN的数量超过两个(每个方向一个),那么这个连接就是一个新的连接。

我无法解决的情况如下 如果相同的两台主机(具有相同的 4 元组)之间的新连接发生在 2 小时内,并且 TCPPDUMP 丢弃了先前的 RST 或 FIN 数据包,并且它还从两个连接中丢弃了 2 个或更多的 SYN 数据包。在这种情况下,我设置的上述条件都不起作用。剩下的唯一一组信息是新的一组数据包的时间,Seq Nos,Ack Nos和数据大小。仅使用此信息,我就可以确定连接是新连接还是旧连接?

我试图查看序列 No 或 SeqNo 和 AckNo 之间是否存在模式,但似乎没有一个是确定的。

【问题讨论】:

    标签: ruby tcp network-programming packet-sniffers tcpdump


    【解决方案1】:

    因为 TCP(主要)使用 sliding acknowledgement window,SeqNo 和 AckNo 将是单调递增的字段 - 直到它们由于 integer overflow 而回绕。

    此外,来自一个流量方向的 SeqNo 对应于另一个流量方向的 AckNo,提供了另一个您可以检查的不变量。

    一个复杂的因素是,最初选择 SeqNo 是随机的,以减少man in the middle attacks 的可能性;因此,具有其他相同参数的新会话可能会选择大于先前可见序列号的初始序列号,并混淆您的算法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 2012-08-12
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多