Networking

根據路由表檢查 IP 列表並顯示每個通過哪個 gw/dev 訪問

  • September 20, 2016

我的路由表中有一組很長(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

引用自:https://unix.stackexchange.com/questions/311080