2010-10-05 39 views
2

我有一個從bash腳本運行的tcpdump命令。看起來像這樣。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查找 - 但在anycase我需要它忽略未知的主機和繼續沿着過濾器文件。

任何想法?

預先感謝您。

回答

2

-n選項可防止將IP地址轉換爲名稱,但不能反過來。如果您提供主機名作爲參數,則必須查找它以獲取IP地址,因爲數據包只包含數字地址而不包含主機名。但是,應該有辦法忽略無效的主機名,但我找不到一個。也許你可以使用預處理你的過濾文件。

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地址的主機名的任何。

+0

我明白你的意思了,寫出來在運行過濾器之前檢查域名。 – Chasester 2010-10-05 20:41:24

+0

這裏有一些有趣的東西 - 我已經通過文件循環 - 挖掘,並寫出好的文件到一個新的文件。然後用它來tcpdump。它仍然有時彈出主機錯誤。 – Chasester 2010-10-11 23:46:21

+0

@Chasester:我將這歸因於網絡或系統錯誤,這些錯誤在互聯網通信期間有很多機會出現。你只需要在你的代碼中重試。 – 2010-10-12 01:03:10