通过编程访问“ip route show”

通过编程访问“ip route show”

有没有办法获取

ip route show

通过一些特殊文件(或其他方法)命令,输出的方式与

route -n

可以从 /proc/net/route 读取吗?我知道我可以解析输出,但我正在寻找更适合机器阅读的格式。

答案1

较新版本的 iproute2 支持-j将输出格式化为 JSON 的参数。这样您就可以使用该jq工具而不是 sed 或 awk 来提取相关数据。

$ ip route show dev eno1
default via 192.168.1.1 proto dhcp src 192.168.1.5 metric 1002
192.168.1.0/24 proto dhcp scope link src 192.168.1.5 metric 1002

$ ip -j route show dev eno1 | jq -r '.[].dst'
default
192.168.1.0/24

如果您需要它比这更具机器可读性(例如,没有default,没有可选键,单独的网络掩码和目的地),您也可以/proc/net/route像其他人建议的那样直接读取。

答案2

strace 显示 ip route show 创建了一个 NETLINK_ROUTE 套接字来获取:http://man7.org/linux/man-pages/man7/netlink.7.html

答案3

“/proc/net/route” 上也有相同的信息。您可以检查该文件,而不是从“netstat -n”命令捕获标准输出信息。

答案4

您想获取什么具体信息?

这是使用 cut 或 awk 从中提取所需的特定字段的完美方法。

例子:

ip route show |  awk '{print $1 " " $9 }' 

返回网络子网和源 IP。

相关内容