Linux
同一個介面上的兩個IP地址,找出哪個在使用
我有一個嵌入式 Linux 系統,它設置為對 eth0 使用 DHCP,但也有一個連結本地 IP 地址配置為備用 (eth0:1),以防萬一沒有從 DHCP 獲得 IP 地址。
有沒有一種簡單的方法可以從 shell 腳本檢查正在使用的 IP 地址?
我得到的最接近的是:
$ ip route get 1 1.0.0.0 via 192.168.0.100 dev eth0 src 192.168.0.133 cache $ ifconfig eth0 0.0.0.0 # Simulate no IP obtained from DHCP $ ip route get 1 1.0.0.0 via 192.168.0.100 dev eth0 src 169.254.197.131 cache
這可以正確辨識正在使用的 IP 地址(‘src’ 欄位)。但是,這僅在配置了預設網關時才有效,如果由於某種原因 DHCP 不可用,則不會出現這種情況。
即使沒有配置預設網關,我如何才能找出正在使用的 IP 地址?
即使沒有配置預設網關,該命令
ip route get ADDRESS
*也能正常工作。*例如,如果在 eth0: 上配置了以下地址10.0.7.139/24
,169.254.1.2/16
並且刪除了預設路由,則$ ip route get 10.0.7.222 10.0.7.222 dev eth0 src 10.0.7.139 cache $ ip route get 169.254.55 169.254.55.0 dev eth0 src 169.254.1.2 cache $ ip route get 1 RTNETLINK answers: Network is unreachable
最後一個答案是正確的:如果不存在到地址為 1.xxx 的任何主機,則無法到達該主機。不是
ip route get
命令不起作用,而是網路配置錯誤。請注意,“連結本地”僅表示僅在連接到的乙太網連結 eth0 上使用的地址。它不應該用於“傳出”連接。
編輯:澄清下面添加的評論。
路由表,並且只有路由表,決定了數據包如何開始到達目的地的旅程。發送 IP 數據包時總是會涉及到路由,即使目的地在本地鏈路上,甚至是本地主機上。路由表項還包含一個源地址,匹配路由的這個地址被選為傳輸數據包的源IP地址。
可能有多個 IP 地址分配給同一個介面,即使來自同一個地址範圍,但只有其中一個(主地址)列在匹配的路由表條目中。
因此
ip route get
(或間接ip route
)為您的問題提供了明確的答案。從ip-route
手冊頁:“此命令獲取到目的地的單一路由,並完全按照核心看到的方式列印其內容。”