根据路由表检查 IP 列表并显示每个通过哪个 gw/dev 进行访问

根据路由表检查 IP 列表并显示每个通过哪个 gw/dev 进行访问

我的路由表中有一组很长的规则,以及一个 IP 地址列表。我希望最终得到类似 CSV 数据的输出,第一列是原始列表中的 IP 地址,第二列是用于根据路由表中当前规则连接到该 IP 的网关,第三列是将用于连接的设备。

我确实简单地考虑过编写一个脚本来获取路由数据route -n并执行此操作,但在思考一个函数来进行子网数学计算的过程中,我不禁想到这个特殊的轮子可能已经被发明出来并且已经存在了某处。

有谁知道什么命令可以完成我想要的事情?

答案1

您可以使用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

相关内容