Код: Выделить всё
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"]
Код: Выделить всё
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