Multithreading 具有同步的shell脚本
我必须编写一个脚本,在我的机器上和远程机器上同时执行tcpdump。这就是捕获的开始(第0秒)应该是同步的,这样我可以在分析中比较两个tcpdumpMultithreading 具有同步的shell脚本,multithreading,bash,networking,tcpdump,Multithreading,Bash,Networking,Tcpdump,我必须编写一个脚本,在我的机器上和远程机器上同时执行tcpdump。这就是捕获的开始(第0秒)应该是同步的,这样我可以在分析中比较两个tcpdump 有什么方法可以做到这一点吗?如果您只需要大致的时间(例如误差范围为200ms),那么只需确保两台机器具有相同的时间(例如via),然后使用(例如)同时运行两个命令 如果您希望更频繁地使用它,您可能希望使用而不是cron。您可以做一些简单的日期算术,例如,请参见: 或睡眠到指定的时间: 在两个脚本(即本地和远程)中,然后运行本地命令,并使
有什么方法可以做到这一点吗?如果您只需要大致的时间(例如误差范围为200ms),那么只需确保两台机器具有相同的时间(例如via),然后使用(例如)同时运行两个命令 如果您希望更频繁地使用它,您可能希望使用而不是
cron
。您可以做一些简单的日期算术,例如,请参见:
ssh
在远程计算机上运行该命令
如果您可以使用Python,则可以使用datetime
模块,例如,请参见以下内容:
- 用现在的时间
- 计算目标时间-添加一些缓冲秒(例如10秒)
- 以该时间为参数运行两个脚本(一个本地运行,一个远程运行
)ssh
- 在这两个脚本中都要一直睡到这个时间-如果您不能在10秒内
,或者如果运行本地脚本需要10秒以上甚至更糟,那么您会遇到比此脚本更严重的问题:)ssh
- 在两个脚本中运行
——它们应该非常同步(有一定的容差,但我认为在最近的任何系统上都不会超过50ms)tcpdump
希望这能有所帮助。我刚才写了一些东西来同步多个测试客户端:
#!/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)
最后,您可以在(几乎)同一时间在多台机器上运行类似于启动命令的操作。200毫秒可能是您所能达到的最接近的时间。另外,如果可能的话,在tcpdump中使用包含MS级别时间戳的格式(我不使用tcmpdump,默认情况下可能在那里)。祝你好运
-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.