一直在寻找和尝试不同的方式。 至于现在我的代码是这样的:
wget --no-check-certificate -qO- https://raw.githubusercontent.com/prbutler/EZProxy_IP_Blacklist/master/EZProxy_IP_Blacklist_RejectIP.txt | grep "RejectIP " | awk '{print $2}' >> EZProxyIP_ALL.txt
cat EZProxyIP_ALL.txt | grep "-" | sed -r 's/-/ /g' >> EZProxy_Range.txt
cat EZProxyIP_ALL.txt | grep -v "-" >> EZProxyIP.txt
rm EZProxyIP_ALL.txt
现在,这会创建两个文本文件,一个包含所有单个地址,另一个包含ip' s。 我使用sed,以便文本文件EZProxy_Range.txt如下所示:
5.8.44.0 5.8.46.255
现在我试图让脚本列出所有的ip地址:
5.8.44.0
5.8.44.1
And so on...
但是我无法弄明白,怎么样?
答案 0 :(得分:0)
使用Net::IP:
的perl对于此类(-
分隔范围的输入行,例如,您不需要sed -r 's/-/ /g'
10.10.10.1 - 10.10.10.5
10.11.11.250 - 10.11.12.4
使用
perl -MNet::IP -nlE '$i=Net::IP->new($_);while($i){say $i++->ip()}'
产生
10.10.10.1
10.10.10.2
10.10.10.3
10.10.10.4
10.10.10.5
10.11.11.250
10.11.11.251
10.11.11.252
10.11.11.253
10.11.11.254
10.11.11.255
10.11.12.0
10.11.12.1
10.11.12.2
10.11.12.3
10.11.12.4
更具可读性
perl -MNet::IP -nlE '
$i = Net::IP->new( $_ );
while( $i ) {
say $i++->ip()
}'
答案 1 :(得分:0)
您可以使用嵌套循环的脚本以纯粹的bash方式为您解决此问题。
gen_ip.sh
#!/bin/bash
START=$1
END=$2
IFS='.'
read -r -a SIP <<< "$START"
read -r -a EIP <<< "$END"
for (( a = ${SIP[0]} ; a <= ${EIP[0]} ; a++)); do
for (( b = ${SIP[1]} ; b <= ${EIP[1]} ; b++)); do
for (( c = ${SIP[2]} ; c <= ${EIP[2]} ; c++)); do
for (( d = ${SIP[3]} ; d <= ${EIP[3]} ; d++)); do
echo "$a:$b:$c:$d"
done
done
done
done
生成
% sh gen_ip.sh 5.8.44.0 5.8.46.255
5:8:44:0
5:8:44:1
5:8:44:2
...
...
5:8:46:253
5:8:46:254
5:8:46:255