有没有办法获取
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。