我需要使用 shell 脚本确定设备(如果有)的 IPv4 广播地址。如果有多个,选择一个(例如第一个由 /sbin/ip 排序)。
我有一个解决方案,但我不喜欢它,因为它对 /sbin/ip 的输出格式做出了假设,而且我不知道该输出格式跨系统的稳定性如何。
DEV=eth0
BROADCAST=`ip address show $DEV | grep 'inet .* brd ' | head -1 | sed -e 's/^.* brd \([0-9\.]*\) .*$/\1/'`
echo $BROADCAST
Run Code Online (Sandbox Code Playgroud)
在 /proc/ 或 /sys/ 中不是有什么东西可以让我简单地捕捉吗?为什么不?
我需要该解决方案能够可靠地工作,至少在 Debian/Ubuntu Linux 家族中是如此。
编辑:这不是关于 sed/awk/grep 魔法的问题。问题是:
ip(ifconfig就此而言)跨架构和 Linux 风格具有相同的输出格式,以便我可以可靠地解析例如接口的 IPv4 广播地址?cat?我能否期望跨架构和 Linux 风格的 ip(就此而言是 ifconfig 的)具有相同的输出格式,以便我可以可靠地解析
我不会。尽管ifconfig 已经死了,所以不应该改变太多,但发行版已经应用了一些小的更改来使这个已弃用的工具保持一定的功能,因为许多人似乎不想学习如何进行切换。的输出ip对于解析 IMO 真的不是很好。
如果不是:是否有另一种方式以更可预测的方式输出接口的 IPv4 广播地址?
如果我是你,我可能会考虑安装和使用诸如facter 之类的工具来为你完成工作。我认为它不会直接为您提供广播地址,但是获取地址/网络掩码并执行数学运算以获取广播地址应该很简单。
为什么没有 /proc/sys/net/...
iproute2 通过NETLINK套接字连接到内核。Ifconfig 使用已弃用的ioctl 方法。如果您想在不抓取某些用户空间程序的输出或安装某些东西的情况下获得正确的信息,那么您需要使用这些 API 之一。
如果您愿意,您可以执行类似操作strace ip addr show或strace ifconfig查看这些工具为检索值所做的工作的输出。
我不知道原因的历史,但这不是本网站的问题。这就是它的方式。如果您想要“为什么”,请与内核开发人员交谈。
| 归档时间: |
|
| 查看次数: |
8864 次 |
| 最近记录: |