1

TCPDUMP を使用して収集された収集されたパケット ダンプを使用して、接続を集約しています。私のコードはRubyです。コードは 4 タプル (SrcIP、SrcPort、DstIP、DstPort) を使用して接続を区別します。接続が同じマシン間で、同じ IP と同じポートを持つ場合、接続は次の方法で区別されます。1. 接続間の時間が 2 時間以上の場合、それは新しい接続です 2. FIN または RST がすでに確認されている場合、新しいパケットは新しい接続からのものです 3. SYN の数が 2 時間以上の場合two (各方向に 1 つ) の場合、接続は新しい接続です。

私が対処できない状況は次のとおりです。同じ 2 つのホスト (同じ 4 タプルを持つ) 間の新しい接続が 2 時間以内に発生し、TCPDUMP が以前の RST または FIN パケットをドロップし、両方から 2 つ以上の SYN パケットもドロップした場合接続。その場合、私が設定した上記の条件はどれも機能しません。そして、残っている唯一の情報セットは、パケットの新しいセットの時間、Seq Nos、Ack Nos、およびデータ サイズです。この情報を使用するだけで、接続が新しいものか古いものかを判断できますか?

シーケンス番号にパターンがあるかどうか、または SeqNo と AckNo の間にパターンがあるかどうかを確認しようとしましたが、明確なものはないようです。

4

1 に答える 1

1

TCPは(主に)スライディング確認ウィンドウを使用するため、SeqNoとAckNoは、整数のオーバーフローのためにラップアラウンドするまで、単調に増加するフィールドになります。

また、トラフィックの1つの方向からのSeqNoは、トラフィックの他の方向のAckNoに対応し、確認できる別の不変条件を提供します。

複雑な要因の1つは、中間者攻撃の可能性を減らすために、SeqNoが最初はランダムに選択されていることです。そのため、他の点では同じパラメータを持つ新しいセッションでは、以前に表示されていたシーケンス番号よりも大きい初期シーケンス番号が選択され、アルゴリズムが混乱する可能性があります。

于 2011-11-20T05:20:27.707 に答える