2016-03-16 213 views
-1

我正在开发一个项目,在该项目中构建自己的网络监视器,并且遇到了一些问题。我想知道如何将IP地址转换为IP地址范围。到目前为止,这是我有:将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地址的第一部分。

+0

Shell变量几乎是* all *字符串。 (当它们不是整数或数组而不是“IP地址”时)。你的问题是括号扩展不会在引号/变量中发生。 –

+0

你不应该假设1-255。并非所有网络都是/ 24个子网。检查网络掩码!这也忽略了IPv6网络。 –

+0

@EmilVikström在我的情况下,网络掩码是255.255.255.0,所以1-255将工作。关于我可以阅读的任何建议,使我的解决方案更多地包含不是所有网络都是/ 24子网和IPv6网络? – NSaid

回答

3

你想要一个数组,而不是一个常规的参数。

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

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