0

自分のマシンとリモート マシンで "同時に" tcpdump を取得するスクリプトを作成する必要があります。つまり、キャプチャの開始 (0 秒目) は同時である必要があるため、分析で 2 つの tcpdump を比較できます。

これを達成する方法はありますか?

4

2 に答える 2

1

おおよその時間が必要な場合 (たとえば、200 ミリ秒の範囲の誤差がある場合)、両方のマシンの時刻が同じであることを確認し (たとえばNTP経由)、たとえばcronを使用して両方のコマンドを同時に実行します。 .

これをもっと頻繁に行いたい場合は、の代わりにat コマンドcronを使用することをお勧めします。簡単な日付計算を行うことができます。たとえば、次を参照してください。

または指定された時間までスリープします。

両方のスクリプト (つまり、ローカルとリモート) で、ローカル コマンドを実行し、ssh.

Python などを使用しても問題ない場合は、datetimeモジュールを使用できます。たとえば、次を参照してください。

アイデアはほとんどこれです:

  • 現在時刻を取得
  • 目標タイムの計算 - クッション秒数 (例: 10 秒) を追加します。
  • その時間をパラメーターとして両方のスクリプトを実行します (1 つはローカルで、もう 1 つはリモートでssh) 。
  • 両方のスクリプトでその時間までスリープします-10秒以内に実行できない場合、sshまたはローカルスクリプトの実行に10秒以上かかる場合はさらに深刻な問題があります:)
  • 両方のスクリプトで実行tcpdumpします - それらはほぼ同期しているはずです (ある程度の許容範囲はありますが、最近のシステムでは 50 ミリ秒を超えることはないと思います)。

お役に立てれば。

于 2012-02-14T00:49:30.750 に答える
0

複数のテストクライアントを同期するために、私が今書いたものを次に示します。

#!/usr/bin/python
import time
import sys

now = time.time()
mod = float(sys.argv[1])
until = now - now % mod + mod
print "sleeping until", until

while True:
    delta = until - time.time()
    if delta <= 0:
        print "done sleeping ", time.time()
        break
    time.sleep(delta / 2)

このスクリプトは、次の「丸め」または「シャープ」時間までスリープします。

簡単な使用例は./sleep.py 10; ./test_client1.py、ある端末と./sleep.py 10; ./test_client2.py別の端末で実行することです。

マシンのクロックが同期していることを確認したいと考えています。

または、tcpdump でこれらのオプションのいずれかを使用して、完全なタイムスタンプを取得できるものを使用します。

-t
Don't print a timestamp on each dump line.
-tt
Print an unformatted timestamp on each dump line.
-ttt
Print a delta (micro-second resolution) between current and previous line on each dump line.
-tttt
Print a timestamp in default format proceeded by date on each dump line.
-ttttt
Print a delta (micro-second resolution) between current and first line on each dump line.

最後に、execnetのようなものを実行して、(ほぼ) 同時に複数のマシンでコマンドを開始することができます。

于 2013-06-13T12:37:45.363 に答える