サンプル
10.1.1.1-10.1.1.3
10.100.100.11-10.100.100.15
このIPを次の形式に拡張するためにLinuxで使用できるトリックはありますか?
10.1.1.1
10.1.1.2
10.1.1.3
10.100.100.11
10.100.100.12
10.100.100.13
10.100.100.14
10.100.100.15
次のオンラインツールがあることを知っています。https://techzoom.net/lab/ip-address-calculator/しかし、オンラインツールを使用する代わりに、このスクリプトを作成したいと思います。
解決策があれば教えてください(どのツール、bash、Pythonなど)。
答え1
perl
sNet::IP
モジュール(libnet-ip-perl
Debianベースのシステムのパッケージ)の使用:
perl -MNet::IP -lne '
print $an_empty_line unless $. == 1;
my $ip = Net::IP->new($_);
do {print $ip->ip} while (++$ip)' < file-with-ip-ranges
答え2
残念ながら、nmapはこの形式をサポートしていません10.1.1.1-10.1.1.3
。
$ nmap -sL 10.1.1.1-10.1.1.3
Starting Nmap
Failed to resolve "10.1.1.1-10.1.1.3".
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 0.04 seconds
$
しかし、2番目と3番目のオクテットを削除し、次の10.1.1.1-3
ように作成できる場合
$ nmap -sL 10.1.1.1-3 | egrep -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
10.1.1.1
10.1.1.2
10.1.1.3
$
答え3
複数の範囲の場合:
awk -F[.-] '
{for(i=$1;i<=$5;i++)
for(j=$2;j<=$6;j++)
for(k=$3;k<=$7;k++)
for(l=$4;l<=$8;l++)
printf("%d.%d.%d.%d\n", i,j,k,l)}
' file
または標準入力の場合:echo "range" | awk ...
例:
echo -n "10.0.1.10-10.1.2.12\n192.168.122.0-192.168.122.3" | awk ...
10.0.1.10
10.0.1.11
10.0.1.12
10.0.2.10
10.0.2.11
10.0.2.12
10.1.1.10
10.1.1.11
10.1.1.12
10.1.2.10
10.1.2.11
10.1.2.12
192.168.122.0
192.168.122.1
192.168.122.2
192.168.122.3