Сортировка списка 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.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"]
Или результат на основе предложенного ответа:

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

ips = [("10.135.0.80", "10.135.0.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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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