【问题标题】:How to make ipcal take list of ip address in cidr如何使ipcal获取cidr中的IP地址列表
【发布时间】:2015-02-03 08:37:27
【问题描述】:

我可以使用下面的代码让 ipcal 给我 NETMASK。我怎样才能让它以 cidr 表示法获取 IP 地址列表,如 41.80.0.0/17 并只给我 netmask.if 的 IP 地址我通过管道列出了一个 IP 地址列表(以 cidr 格式),它会起作用吗?谢谢

#!/bin/bash

echo -n "Enter IP address in CIDR notation: (eg. 192.168.0.0/24) "
read IP_ADDRESS

# Calculate network values
BROADCAST=$(ipcalc -b $IP_ADDRESS)
NETWORK=$(ipcalc -n $IP_ADDRESS)
NETMASK=$(ipcalc -m $IP_ADDRESS)

echo "Set up your ifcfg file with the following values:"
echo $BROADCAST
echo $NETWORK
echo $NETMASK

【问题讨论】:

  • 所以/24 应该给255.255.255.0/16255.255.0.0 等等?
  • 是的。确切地。我想知道是否有办法用 cidr 表示法用 ip 地址管道文本文件

标签: bash grep ip pipe netmask


【解决方案1】:

这是我从ipcalc -b 192.168.0.0/23 得到的信息

Address:   192.168.0.0
Netmask:   255.255.254.0 = 23
Wildcard:  0.0.1.255
=>
Network:   192.168.0.0/23
HostMin:   192.168.0.1
HostMax:   192.168.1.254
Broadcast: 192.168.1.255
Hosts/Net: 510                   Class C, Private Internet

所以要得到你需要改变的东西:

BROADCAST=$(ipcalc -b 192.168.0.0/23 | awk '/Broadcast/ {print $2}')
NETWORK=$(ipcalc -b 192.168.0.0/23 | awk '/Network/ {print $2}')
NETMASK=$(ipcalc -b 192.168.0.0/23 | awk '/Netmask/ {print $2}')

echo $BROADCAST
192.168.1.255

echo $NETWORK
192.168.0.0/23

echo $NETMASK
255.255.254.0

【讨论】:

    【解决方案2】:

    如果您在 Awk 中完成所有处理,您的脚本可以大大简化。

    #!/bin/bash
    
    read -p "Enter IP address in CIDR notation: (eg. 192.168.0.0/24) " IP_ADDRESS
    
    ipcalc -b "$IP_ADDRESS" |
    awk '/^Broadcast: / { b=$2 }
         /^Network: / { n=$2 }
         /^Netmask: / { m=$2 }
         END { print "Set up your ifcfg file with the following values:";
           print b; print n; print m; }'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 2016-01-07
      • 2012-09-17
      • 2012-09-04
      • 2011-12-02
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多