我必须编写一个脚本,在其中“同时”在我的机器和远程机器上进行 tcpdump。那就是捕获的开始(第 0 秒)应该是同时的,这样我就可以在我的分析中比较两个 tcpdump。
有没有办法可以做到这一点?
我必须编写一个脚本,在其中“同时”在我的机器和远程机器上进行 tcpdump。那就是捕获的开始(第 0 秒)应该是同时的,这样我就可以在我的分析中比较两个 tcpdump。
有没有办法可以做到这一点?
如果您只需要近似时间(例如,误差范围为 200 毫秒),那么只需确保两台机器具有相同的时间(例如通过NTP),然后使用例如cron同时运行这两个命令.
如果您希望这种情况更频繁,您可能需要使用at 命令而不是cron
. 你可以做一些简单的日期算术,例如看这个:
或睡到指定时间:
在两个脚本(即本地和远程)中,然后运行本地命令并使用ssh
.
如果你可以使用例如 Python,你可以使用datetime
模块,例如看这个:
这个想法几乎是这样的:
ssh
)ssh
在 10 秒内或更糟,如果运行本地脚本需要超过 10 秒,你会遇到比这个更严重的问题 :)tcpdump
——它们应该几乎同步(有一定的容忍度,但我认为它在任何最近的系统上都不会超过 50 毫秒)希望这可以帮助。
这是我刚才写的同步多个测试客户端的东西:
#!/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 之类的东西来(几乎)同时在多台机器上启动命令。