如何使用bash创建所有可能的IP组合



这将是输出:

0.0.0.0
0.0.0.1
0.0.0.2
.
.
.
.
255.255.255.253
255.255.255.254
255.255.255.255

也许我需要把它保存到一个文件中,但我可以用>操作符很容易地做到这一点

好吧,如果bash能够处理它,那么这个表达式就可以了:

echo {0..255}.{0..255}.{0..255}.{0..255} | tr ' ' \n

但上面的表达式被bash扩展,由此产生的40亿IP炸毁了外壳。相反,您可以编写这样的嵌套循环:

for octet1 in {0..255}
do
for octet2 in {0..255}
do
for octet3 in {0..255}
do
for octet4 in {0..255}
do
echo $octet1.$octet2.$octet3.$octet4
done
done
done
done

你也可以这样缩短:

for octet12 in {0..255}.{0..255}
do
for octet34 in {0..255}.{0..255}
do
echo $octet12.$octet34
done
done

通常,bash语言具有足够的能力来操作IP地址。我有一小组用于IP数学的函数,我可以与您分享这些函数,用于更通用的IPv4工作。下面是一些使用我的IP函数库的代码。TBH:我称它为"我的库",但我确信我几年前从另一个开发人员那里获得了它,但我已经失去了归属。

代码如下:

ip_range "0.0.0.0" "255.255.255.255" 1

下面是一组函数:

#!/usr/bin/env bash
function ip2value() { 
local ip=$1 # IP address to convert to decimal
local sum=0
IFS='.' read -ra ADDR <<< "$ip"
for i in "${ADDR[@]}"; do
sum=$(( sum * 256 + i )) 
done
echo $sum
}
function value2ip() { 
local value=$1
local ip=""
local divisor=$(( 256 ** 3 )) 
for x in 0 1 2  
do
ip="$ip.$(( value / divisor ))"
value=$(( value % divisor ))
divisor=$(( divisor / 256 )) 
done
ip=${ip#.}
ip=$ip.$value
echo $ip
}

# Usage:  addIP <ip> [<count>]
# Increase <ip> by <count> ( default 1)
function nextIP() {
local IP=$1
local COUNT=$2
: ${COUNT:=1}
value2ip $(( $COUNT + $( ip2value $1 ) )) 
}
function addIPs() {
local IP1=$1
local IP2=$2
value2ip $(( $( ip2value $IP1 ) + $( ip2value $IP2 ) ))
}
function isIP() {
local IP=$1
local VALUE=$( ip2value $IP )
local VIP=$( value2ip $VALUE ) 
[ "$IP" == "$VIP" ] 
}
function ip_range() { 
local FIRST=$1
local LAST=$2
local STEP=$3
: ${STEP:=1}
local ip=$(ip2value $FIRST)
local last=$(ip2value $LAST)
while 
[ $ip -le $last ] 
do
echo $( value2ip $ip )
ip=$(( ip + 1 ))
done
}

最新更新