2012-02-14 7 views
0

私は自分のマシンとリモートマシン上で同時に "tcpdump"を実行するスクリプトを書く必要があります。キャプチャの開始点(0秒目)は同時でなければならないので、分析で2つのtcpdumpsを比較することができます。同期付きシェルスクリプト

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

答えて

1

(たとえば、誤差範囲が200msの場合など)おおよその時間が必要な場合は、両方のマシンが同じ時間(たとえば、NTP経由)であることを確認してから、たとえばを使用してください。 cronを使用すると、両方のコマンドを同時に実行できます。

もっと頻繁に使用したい場合は、cronの代わりにat commandを使用します。いくつかの簡単な日付演算を行うことができます。これを参照してください。

や睡眠を指定した時間まで(つまり、ローカルおよびリモートの)両方のスクリプトで

を、ローカルの実行コマンドを実行し、sshを使用してリモートマシン上でコマンドを実行します。

Pythonでは、datetimeモジュールを使用することができます。これを参照してください。

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

  • すると、現在の時間
  • 計算対象時間ましょう - いくつかのクッション秒を追加します(例:10秒)
  • その時刻の両方のスクリプトをパラメータとして実行します(ローカルに1つ、リモートで1つはssh
  • 両方のスクリプトでは、その時点までのスリープ - それはローカルのスクリプトを実行するために10秒以上かかる場合、あなたはこの1よりも多くの深刻な問題を抱えているあなたがすることができませんssh 10秒またはさらに悪い場合:)
  • 実行tcpdumpの両方でスクリプト - かなり同期されるべきです(いくつかの許容範囲がありますが、最近のシステムでは50msを超えるとは思われません)。

希望します。

#!/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) 

このスクリプトは、次の「丸い」または「シャープ」の時間までスリープ:

+0

200 MSはおそらくあなたが得る限り近くにあります。可能であれば、tcpdumpでMSレベルのタイムスタンプを含む形式を使用してください(私はtcmpdumpを使用しません。おそらくデフォルトではそこにあります)。がんばろう。 – shellter

0

は、ここで私は、複数のテストクライアントを同期させるために今書いた何か。

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

マシンの時計が同期されていることを確認する必要があります。

また、tcpdumpでこれらのオプションのいずれかを使用して、完全なタイムスタンプを与えるものを使用してください。

​​

最後に、あなたは(ほぼ)同時に複数のマシン上でコマンドを起動するexecnetようなものを実行することができます。

関連する問題