Сортировка списка IP-адресов по уникальному сетевому адресу с диапазонами адресов хостов ⇐ Python

Программы на Python
Anonymous
Сортировка списка IP-адресов по уникальному сетевому адресу с диапазонами адресов хостов

Сообщение Anonymous »

У меня есть список IP-адресов из вызова API:

Код: Выделить всё

ips = ["10.135.0.80","10.135.0.81","10.135.0.83","10.135.1.200","10.135.1.220","10.160.150.2","10.160.150.7","10.255.255.2"]
Мне нужен список IP-адресов следующего вида:

Код: Выделить всё

ips = ["10.135.0.80-10.135.0.80.83","10.135.1.200-10.135.1.220","10.160.150.2-10.160.150.7","10.255.255.2-10.255.255.2"]
Если сетевой адрес равен, присоедините наименьший к наибольшему адресу хоста.
Если на каждый сетевой адрес приходится один адрес хоста, создайте диапазон из указанного адреса хоста.
Если сетевой адрес другой, начните новый элемент и повторите.
Я читал ряд других сообщений, в которых говорится, что нужно использовать модуль сокета и побитовые операторы для сортировки IP-адресов, которые так сортируется исходный список IP:

Код: Выделить всё

sortedAddresses = sorted(
ips, key=lambda ip: struct.unpack("!L", inet_aton(ip))[0]
)
Сети, которые я могу легко объединить с помощью регулярного выражения и сделать их уникальными:

Код: Выделить всё

net = []
host = []
for ip in sortedAddresses:
l = re.split("(.*)\\.(.*)\\.(.*)\\.(.*)", ip)
net.append(l[1:-2])
host.append(l[4:-1])
networks = []
for l in net:
if l not in networks:
networks.append(l)
hosts = []
for l in host:
for e in l:
hosts.append(e)
print(networks)
print(hosts)
Сети печати:

Код: Выделить всё

[['10', '135', '0'], ['10', '135', '1'], ['10', '160', '150'], ['10', '255', '255']]
Хосты печати:

Код: Выделить всё

['80', '81', '83', '200', '220', '2', '7', '2']
Я думаю, что ответ Джорана с модулем сокета - это самое близкое к моему решению решение, которое я нашел. Я просто не могу понять, как мне отсортировать список хостов, чтобы определить начало и конец моего исходного списка или списка хостов.
Предложенный ответ, который я получил перед публикацией, закрыт а также, за исключением того, что это создаст множество диапазонов. Я хочу, чтобы сетевые адреса были уникальными в каждом диапазоне.

Подробнее здесь: https://stackoverflow.com/questions/790 ... nges-of-ho

Вернуться в «Python»