假設您有一些帶有乙太網路的嵌入式板插入筆記型電腦上的乙太網路連接埠。您(目前)對它的網路配置一無所知。你知道它可以啟動,但它是無頭的並且只有一個乙太網路連接埠。它還沒有 IP 位址。
如何發現設備的 MAC 位址?
我看過 arp、arping、arp-scan、arpwatch。我唯一發現的是使用 tshark 並手動梳理噴湧物。
答案1
簡單運行tshark
或tcpdump
產生混亂的輸出,因為來自您電腦的所有流量也會被記錄。
嘗試
tcpdump -i eth0 -lenq 'ether src not <your_mac>'
-e
也捕捉乙太網路幀-l
立即刷新標準輸出緩衝區。-n
不解析主機名-q
安靜點。- 替換
<your_mac>
為您的本機介面的 MAC 位址,例如使用 找到的ip addr show
。 - 顯然替換
eth0
為正確的介面。如果您使用的是 Windows,請使用tshark -D
列出所有介面。 - (編輯)在 Linux 上,您可以使用
tcpdump
而不是安裝tshark
,這需要安裝整個wireshark
軟體包。tcpdump
應該預先安裝在 Ubuntu 上(它位於元包中ubuntu-standard
)。
選擇:如果您只想將來源 MAC 位址作為輸出,請執行(受到下面 OP 評論的啟發和無恥改編)
ETH=eth0;MAC=$(cat /sys/class/net/$ETH/address); tcpdump -lenq -i $ETH "ether src not $MAC" | awk '{print $2}'
最好在沒有連結的情況下開始捕獲,然後插入電纜。
我認為沒有辦法繞過嗅探流量。 ARP 失敗的原因是設備沒有 IP 位址且不會回應 ARP 請求。
另一個可能的解決方案是將裝置連接到託管交換器並讀取 MAC 位址表,但我覺得這不適合您。
無論如何,為了能夠被偵測到,設備需要發送一些某種乙太網路流量。如果你幸運的話,它會發送一個你可以嗅探的 DHCP/Bootp 發現。
(編輯)為什麼主機不像交換器那樣保存MAC表?嗯,它不需要,因為它不是一個開關。與交換器不同的是,哪個介面發出乙太網路訊框是根據路由表預先決定的。 ARP 查找後,IP 資料包被包裝在適當的訊框中。
當然,您可以將您的機器變成合適的 L2 交換器。您可以在多個實體介面之間建立橋接。我稍微擺弄了一下,結果發現這樣你可以得到一個漂亮的 MAC 表!
bridge-utils
從存儲庫安裝。在中創建一個新的乙太網路橋
/etc/network/interfaces
auto br0 iface br0 inet static # dhcp goes as well address ... network ... bridge_ports eth0 up /sbin/brctl setageing br0 300 up /sbin/brctl stp br0 0
這定義了一個沒有生成樹的「橋」(實際上沒有橋 - 只有一個介面)stp br0 off
。地址將在 300 秒後過期。根據您的喜好設定此值,但不要太低。
把橋拉起來:
ifup br0
檢查是否正常
brctl show
並查看MAC表:brctl showmacs br0
利潤 (?)
答案2
您可以使用wireshark捕獲所有流量並透過bootp對其進行過濾,或使用-e
選項透過tcpdump列印連結層資訊和bootp過濾器:
http://www.tcpdump.org/tcpdump_man.html
sudo tcpdump -i any port bootps -e