Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 具有同步的shell脚本_Multithreading_Bash_Networking_Tcpdump - Fatal编程技术网

Multithreading 具有同步的shell脚本

Multithreading 具有同步的shell脚本,multithreading,bash,networking,tcpdump,Multithreading,Bash,Networking,Tcpdump,我必须编写一个脚本,在我的机器上和远程机器上同时执行tcpdump。这就是捕获的开始(第0秒)应该是同步的,这样我可以在分析中比较两个tcpdump 有什么方法可以做到这一点吗?如果您只需要大致的时间(例如误差范围为200ms),那么只需确保两台机器具有相同的时间(例如via),然后使用(例如)同时运行两个命令 如果您希望更频繁地使用它,您可能希望使用而不是cron。您可以做一些简单的日期算术,例如,请参见: 或睡眠到指定的时间: 在两个脚本(即本地和远程)中,然后运行本地命令,并使

我必须编写一个脚本,在我的机器上和远程机器上同时执行tcpdump。这就是捕获的开始(第0秒)应该是同步的,这样我可以在分析中比较两个tcpdump


有什么方法可以做到这一点吗?

如果您只需要大致的时间(例如误差范围为200ms),那么只需确保两台机器具有相同的时间(例如via),然后使用(例如)同时运行两个命令

如果您希望更频繁地使用它,您可能希望使用而不是
cron
。您可以做一些简单的日期算术,例如,请参见:

或睡眠到指定的时间:

在两个脚本(即本地和远程)中,然后运行本地命令,并使用
ssh
在远程计算机上运行该命令

如果您可以使用Python,则可以使用
datetime
模块,例如,请参见以下内容:

这个想法大致是这样的:

  • 用现在的时间
  • 计算目标时间-添加一些缓冲秒(例如10秒)
  • 以该时间为参数运行两个脚本(一个本地运行,一个远程运行
    ssh
  • 在这两个脚本中都要一直睡到这个时间-如果您不能在10秒内
    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)

最后,您可以在(几乎)同一时间在多台机器上运行类似于启动命令的操作。

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.