将IP地址转换为IP范围

时间:2016-03-16 02:03:48

标签: bash

我正在开发一个项目,我正在构建自己的网络监视器,我遇到了一些问题。我想知道如何将IP地址转换为IP地址范围。到目前为止,这就是我所拥有的:

# figure out the raspbery pi ip address so that can figure out ip range of network
pi_ip_addr=$(ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1 }')

# figure out ip address range based on pi ip address
ip_addr_trunk=$(echo $pi_ip_addr | cut -d . -f 1-3)

# append .{1..255} to provide a ip address based on current ip address of raspberry pi
ip_addr_range=$ip_addr_trunk".{1..255}"

所以我认为这会奏效。但是,当我将此ip_addr_range变量传递给另一个bash脚本时,该脚本将ping该范围内的所有IP地址失败。它在命令行中产生的错误是:

ping: unknown host 192.168.2.{1..255}

我猜这里的问题是我追加的时候。{1..255}以某种方式将变量转换为字符串。因此,循环不能单独ping每个IP地址。任何人都可以告诉我如何成功地将所需范围附加到IP地址的第一部分。

1 个答案:

答案 0 :(得分:3)

您需要一个数组,而不是常规参数。

ip_addr_range=( "$ip_addr_trunk".{1..255} )

for ip_addr in "${ip_addr_range[@]}"; do
    ping "$ip_addr"
done