Нужна помощь в преобразовании списка CIDR в диапазоны сети. SED/AWK или что-нибудь
Итак, я пытаюсь преобразовать список ip-данных в формате CIDR в netranges
192.168.1.0/24 Мне это нужно, преобразованный в 192.168.1.0-255
На самом деле целый список адресов. Как это.
101.192.0.0/14
101.202.0.0/16
101.203.128.0/19
101.248.0.0/15
101.252.0.0/15
103.16.76.0/24
103.194.8.0/22
103.197.8.0/22
103.205.84.0/22
103.207.160.0/22
103.210.12.0/22
103.215.80.0/22
103.229.36.0/22
103.229.40.0/22
103.230.144.0/22
103.232.136.0/22
103.232.172.0/22
103.236.32.0/22
Есть ли инструменты, которые легко доступны для этого? Я провел некоторые поиски, прежде чем опубликовать это, но никто другой, кажется, не собирается получить конкретный вывод, который я пытаюсь получить здесь.
3 ответа
Только что попробовал без внешних команд или библиотек.
perl -pe '
m#^(\d+)\.(\d+)\.(\d+)\.(\d+)/(\d+)#;
$_ = "$1.$2.$3.$4-" . join(".", map(hex, sprintf("%X", ($1 << 24) + ($2 << 16) + ($3 << 8) + $4 | (1 << (32 - $5)) - 1) =~ /.{2}/g)) . "\n";
' iplist.txt
Обновление (спасибо @TheAdminsHereAreFags за указание sipcalc
)
Если у вас есть sipcalc
пакет установлен
sipcalc - < iplist.txt | awk '/Network range/{print $4 $5 $6}'
Выход
101.192.0.0-101.195.255.255
101.202.0.0-101.202.255.255
101.203.128.0-101.203.159.255
101.248.0.0-101.249.255.255
101.252.0.0-101.253.255.255
103.16.76.0-103.16.76.255
103.194.8.0-103.194.11.255
103.197.8.0-103.197.11.255
103.205.84.0-103.205.87.255
103.207.160.0-103.207.163.255
103.210.12.0-103.210.15.255
103.215.80.0-103.215.83.255
103.229.36.0-103.229.39.255
103.229.40.0-103.229.43.255
103.230.144.0-103.230.147.255
103.232.136.0-103.232.139.255
103.232.172.0-103.232.175.255
103.236.32.0-103.236.35.255
Я предоставляю пример сценария с использованием ipaddress.(Спасибо за инструкции, @Jonathon Reinhart)
Обязательным условием является просто установка модуля ipaddress.
# pip install ipaddress
код скрипта: файл cidr.list включает вышеуказанный список cidr.
#!/usr/bin/env python
import ipaddress
file_path='/tmp/cidr.list'
with open(file_path,'r') as cidr_list:
for cidr in cidr_list:
tmp = ipaddress.ip_network(unicode(cidr[:-1]))
print "%s-%s" % (tmp[0],tmp[-1])
выход:
101.192.0.0-101.195.255.255
101.202.0.0-101.202.255.255
101.203.128.0-101.203.159.255
101.248.0.0-101.249.255.255
101.252.0.0-101.253.255.255
103.16.76.0-103.16.76.255
103.194.8.0-103.194.11.255
103.197.8.0-103.197.11.255
103.205.84.0-103.205.87.255
103.207.160.0-103.207.163.255
103.210.12.0-103.210.15.255
103.215.80.0-103.215.83.255
103.229.36.0-103.229.39.255
103.229.40.0-103.229.43.255
103.230.144.0-103.230.147.255
103.232.136.0-103.232.139.255
103.232.172.0-103.232.175.255
103.236.32.0-103.236.35.255
Я надеюсь, что это поможет вам.