2

我有一个从 bash 脚本运行的 tcpdump 命令。看起来像这样。

tcpdump -nttttAr /path/to/file -F /my/filter/file

过滤器文件具有 IP 地址和主机名的组合。即主机 111.111.111.111 或主机 112.112.112.112 而不是(主机 abc.com 或主机 def.com 或主机 zyx.com)。

它工作得很好——只要主机名都是有效的。我的问题是有时这些主机名无效,遇到一个 - tcpdump 吐出

tcpdump: Unknown Host

我认为使用 -n 选项它会跳过 dns 查找 - 但无论如何我需要它忽略未知主机并继续过滤文件。

有任何想法吗?

先感谢您。

4

1 回答 1

2

-n选项可防止将 IP 地址转换为名称,但不能反过来。如果您提供主机名作为参数,则必须查找它以获取 IP 地址,因为数据包仅包含数字地址而不包含主机名。但是,应该有一种方法可以忽略无效的主机名,但我找不到。也许您可以使用dig.

dig +short non-existent-domain.com    # returns null
dig +short google.com                 # returns multiple IP addresses

这可能会更好,但它应该在过滤器文件中显示无效的主机名:

grep -Po '(?<=host )[^ )]*' filterfile | grep -v '[0-9]$' | xargs -I % sh -c 'echo -n "% "; echo $(dig +short %)' | grep -v ' [0-9]'

它打印的任何主机名都没有返回的 IP 地址dig

于 2010-10-05T20:28:08.880 回答