我应该澄清一下,这里的代码适用于 Linux,(注意关于其他 Unices 的评论和帖子)。OP 要求提供 Linux 解决方案,但最好将问题更改为“如何获取网络掩码”,并让答案结合更多 Unix 风格的最佳方式。
#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'
Run Code Online (Sandbox Code Playgroud)
./脚本 eth0
与 netstat、arp、rarp 和 route 等其他传统网络命令一起,ifconfig 是net-tools包的一部分。Net-tools 已经很长时间没有被积极开发了,并且有人努力弃用它以支持更新的iproute2包。为简洁起见,如果您想了解有关此基本过渡的更多详细信息,请访问以下相关链接:
net-tools ifconfig 的手册页(参见 BUGS 部分)
/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '
Run Code Online (Sandbox Code Playgroud)
?
我想知道你是否真的只想要面具。也许你真的想要带掩码的网络(或 IP),在配置文件中使用nmap,或者其他任何东西。
在这种情况下,在 Linux 上,您还可以解析ip ...命令的输出。
要以 CIDR 表示法列出所有接口及其地址和掩码:
ip -o -f inet addr show | awk '/scope global/ {print $2, $4}'
Run Code Online (Sandbox Code Playgroud)
或者将其限制为默认界面:
default_if=$(ip route list | awk '/^default/ {print $5}')
ip -o -f inet addr show $default_if | awk '{print $4}'
Run Code Online (Sandbox Code Playgroud)
这在我的机器上给了我“192.168.1.61/24”。