【问题标题】:Get Subnet mask in Linux using bash使用 bash 在 Linux 中获取子网掩码
【发布时间】:2016-01-14 00:11:45
【问题描述】:

我正在使用 bash 通过该脚本获取我的机器的 IP 地址:

_MyGW="$( ip route get 8.8.8.8 | awk 'N=3 {print $N}' )"

现在我正在尝试获取这种类型的子网掩码:

192.168.1.0/24 

但我不知道该怎么做。

【问题讨论】:

  • 8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.5(IP 不是真实的 - 仅作为示例)
  • 所以/24 不在您的ip 命令输出中,但您想在最终输出中得到它?
  • 可以,但不一定要和ip 命令一起使用。
  • 这个命令只是打印我的ip,最后加上/24ip route' output is: 192.168.1.0/24 `` is 0`之前的最后一个数字。
  • 换句话说,ip route get 没有提供打印正确子网信息所需的信息。

标签: linux bash networking iproute


【解决方案1】:

有几种方法可以实现这一点:

首先:以 255.255.255.0 格式打印掩码,您可以使用:

/sbin/ifconfig wlan0 | awk '/Mask:/{ print $4;} '

第二个:我们可以使用ip命令获取格式为192.168.1.1/24的掩码

ip -o -f inet addr show | awk '/scope global/ {print $4}'

【讨论】:

  • Vishal,这行得通。谢谢你。但我有一个问题。在我的情况下,我将wlan0 更改为eth0,但是当我开始回答的第一行时,我没有任何输入。实际上应该怎么做?
  • 首先使用 ifconfig 命令确保你有 eth0 连接,如果你有那么它应该打印,它在我的情况下工作。 :)
  • 是的,我有连接。但我明白应该做什么。实际上我不需要这个输出。
  • 准确地说,您可以从第二个命令中检查,只需添加 $2: ip -o -f inet addr show | awk '/scope global/ {print $2,$4}'
  • 是的,这对我很有帮助,因为我有不止一个界面。实际上我正在尝试使用ip route 命令制作一个删除此网络的脚本。
【解决方案2】:

更好的方法是:

 ifconfig eth0 | awk '/netmask/{split($4,a,":"); print a[1]}'

你可以用你想要的任何其他接口替换 eth0

【讨论】:

  • 这个命令对我不起作用。没有输出。我正在使用 ubuntu 18
  • 修复了它。你能试试吗?
  • 这给出了网络掩码而不是子网
【解决方案3】:

对我来说一个简单的方法是:

IP=$(ifconfig eth0 | grep -w inet | cut -d" " -f10) # device IP, e.g. 11.1.1.43
IP_RANGE=$(echo $IP | cut -d"." -f1-3).0/24 # subnet 11.1.1.0/24

当然用ifconfig显示的正确界面替换eth0

【讨论】:

    【解决方案4】:

    这就是我使用 bash/awk 获取 IP 和子网掩码的方式:

    IFCONFIG=$(ifconfig eth0)
    IPETH=$(echo "$IFCONFIG" | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
    MASK=$(echo "$IFCONFIG" | awk '/Mask/{split($4,a,":"); split(a[2],m,"."); h=m[1]*16777216+m[2]*65536+m[3]*256+m[4]; s=0; for(i=0; i < 32; i++) { s+=and(h,1); h/=2 } print s; }')
    echo ${IPETH}/${MASK}
    

    根据您的ifconfig 版本,您必须使用/Mask//netmask/ 来获取子网掩码。我需要这个有点摆弄,因为我的系统上没有ip

    这给了我例如

    172.29.11.12/24
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 2012-12-03
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      相关资源
      最近更新 更多