tcpdump - 忽略未知主机错误

时间:2010-10-05 17:57:33

标签: bash tcpdump

我有一个从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查找 - 但无论如何我需要它来忽略未知主机并继续沿着过滤器文件。

有什么想法吗?

提前谢谢。

1 个答案:

答案 0 :(得分: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]'

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