Нужна помощь в преобразовании списка 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

Я надеюсь, что это поможет вам.

Другие вопросы по тегам