0

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

有没有办法可以做到这一点?

4

2 回答 2

1

如果您只需要近似时间(例如,误差范围为 200 毫秒),那么只需确保两台机器具有相同的时间(例如通过NTP),然后使用例如cron同时运行这两个命令.

如果您希望这种情况更频繁,您可能需要使用at 命令而不是cron. 你可以做一些简单的日期算术,例如看这个:

或睡到指定时间:

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

如果你可以使用例如 Python,你可以使用datetime模块,例如看这个:

这个想法几乎是这样的:

  • 取当前时间
  • 计算目标时间 - 添加一些缓冲秒数(例如 10 秒)
  • 以该时间作为参数运行两个脚本(一个本地,一个远程使用ssh
  • 在两个脚本中都睡到那个时间 - 如果你不能ssh在 10 秒内或更糟,如果运行本地脚本需要超过 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 回答