Networking
根據路由表檢查 IP 列表並顯示每個通過哪個 gw/dev 訪問
我的路由表中有一組很長(ish)的規則,以及一個 IP 地址列表。我希望得到像 CSV 數據這樣的輸出,第一列是原始列表中的 IP 地址,第二列是根據目前路由表中的規則連接到該 IP 的網關,第三列是用於連接的設備。
我確實考慮過將一個腳本放在一起以從中獲取路由數據
route -n
並執行此操作,但是在考慮一個函式來進行子網數學運算的過程中,我不禁想到這個特定的輪子可能已經被發明並且已經存在某處。有誰知道什麼命令可以做我所追求的?
您可以使用
ip route get
來確定您的機器將如何路由到 IP。因此,如果您在文件中有一個 IP 列表,每行一個,您可以這樣做while read -r addr; do gw="$(ip route get "$addr" | awk '/via/ {print $3}')" if [[ -z $gw ]]; then printf 'No route for %s\n' "$addr" >&2 else printf '%s,%s\n' "$addr" "$gw" fi done < ip_list
糟糕,我忘了為你提供開發人員,所以這是一個解決方案
while read -r addr; do ip route get "$addr" | awk -va="$addr" '/via/ {print a "," $3 "," $5} $2 == "dev" {print a ",," $3}' done < ip_list