2014-09-28 73 views
1

我試圖獲取每個在網絡上轉儲的數據包的源MAC地址,排除了涉及主機的任何數據包。我期望爲了實現這個目標,我應該在混雜模式下使用主機的網絡接口從tcpdump獲取數據。從tcpdump獲取源MAC地址

請注意,我是而不是有興趣獲得完整的標題或甚至鏈接級別標題。 -e選項不是我想要的。我只是想要每個數據包的源MAC地址,而沒有其他。

這是我目前在做什麼現在:

sudo tcpdump -I -elt -i wlan0 not host 127.0.0.1 2>> /dev/null | sed 's/ .*//' 

127.0.0.1替換爲本地網絡接口的實際IP地址。

這在一些網絡中很有用,其中源MAC地址是tcpdump輸出的第一條信息。不幸的是,這並不總是我的經驗。看來,輸出到tcpdump is protocol-dependent等一些網絡,它有所不同。

我想,使其輸出相匹配的正則表達式的MAC地址的第一個項目,我可以重寫我的sed命令:

(?:[0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2} 

,但我不能確定,如果在該行的第一個MAC地址將永遠是源MAC地址。

如果沒有辦法讓tcpdump直接輸出源MAC地址,有什麼辦法可以讓它從鏈路層頭輸出原始位?從那裏我應該能夠拼湊源MAC地址。

+1

你有沒有考慮使用'tshark'? – Yoel 2014-09-28 09:15:25

回答

1

通過tshark的,你可以那樣做:

例如:

tshark -i eth0 -e eth.src -Tfields 
+0

嘿,這很不錯!在tshark 1.10.6中,我正在間斷地獲取行號,不僅僅是MAC地址 – 2015-10-14 14:05:13