我有一个从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查找 - 但无论如何我需要它来忽略未知主机并继续沿着过滤器文件。
有什么想法吗?
提前谢谢。
答案 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地址。