Bir dizi IPv4 adresini bash kullanarak ağ maskelerine dönüştürme


10

IPv4 adresleri olan bir girdi dosyası var:

94.228.16.0 - 94.228.25.255
94.241.136.0/24
94.241.136.0 - 94.241.136.255
94.29.128.0/17
94.29.128.0 - 94.29.191.0
94.29.192.0 - 94.29.255.0
94.74.181.0/24
94.74.181.0 - 94.74.181.31
94.74.181.128 - 94.74.181.255

Adres aralıklarını ağ maskelerine nasıl dönüştürebilirim? Sonuç şöyle olmalıdır:

94.228.16.0/21
94.241.136.0/24
94.241.136.0/24
94.29.128.0/17
94.29.128.0/19
94.29.192.0/19
94.74.181.0/24
94.74.181.0/27
94.74.181.128/25

3
İstediğiniz sonuçların birçoğu yanlış olduğundan, geçerli bir bash betiği bunları üretmez. Örneğin, ilk aralık bir ağ maskesi kullanılarak ifade edilemez: 94.228.16.0/21, 94.228.16.0 - 94.228.23.255 ve bir sonraki daha geniş 94.228.16.0/20, 94.228.16.0 - 94.228.31.255 verir. Ayrıca, .0 ile biten aralıklar herhangi bir ağ maskesi tarafından üretilemez.
zwets

@Zanna hile yapıyorsun, poster bash kullanarak sordu . Benim bash'ım ipcalcyerleşik değil. ;-)
zwets

@zwets ah anladım! Ama haklısın,
merminin

Yanıtlar:


14

Öncelikle dönüşümü yapmak için bir paket yüklemeniz gerekecek

sudo apt install ipcalc

Şimdi bunu bu küçük komut dosyasıyla yapabilirsiniz (değişkeni teklif ederseniz işe yaramadığını lütfen unutmayın):

$ while read line; do if [[ $line = *-* ]]; then (ipcalc $line | sed '2!d'); else echo $line; fi; done < file
94.228.16.0/21
94.241.136.0/24
94.241.136.0/24
94.29.128.0/17
94.29.128.0/19
94.29.192.0/19
94.74.181.0/24
94.74.181.0/27
94.74.181.128/25

veya daha okunabilir

while read line; do
   if [[ $line = *-* ]]; then 
     (ipcalc $line | sed '2!d')
   else echo $line
   fi
done < file

@Oleksii hep bir zevk :)
Zanna

3

Belki de şaşırtıcı değil, bunun için bir CPAN perl modülü Net :: CIDR var .

Yani mesela:

$ perl -MNet::CIDR=range2cidr -lne 'print for range2cidr $_' yourfile
94.228.16.0/21
94.228.24.0/23
94.241.136.0/24
94.241.136.0/24
94.29.128.0/17
94.29.191.0/32
94.29.128.0/19
94.29.160.0/20
94.29.176.0/21
94.29.184.0/22
94.29.188.0/23
94.29.190.0/24
94.29.255.0/32
94.29.192.0/19
94.29.224.0/20
94.29.240.0/21
94.29.248.0/22
94.29.252.0/23
94.29.254.0/24
94.74.181.0/24
94.74.181.0/27
94.74.181.128/25

Modül, libnet-cidr-perlpaketi yükleyerek Ubuntu'da kullanılabilir .

NB I gelmiş değil girişinizi veya sonuçları valide.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.