2016-02-08 10 views
1

Say У меня есть два IP-адреса: startip = '63.223.64.0' и endip = '63.223.127.255'Python Наименьшее общее CIDR

Я понимаю, что в питоне netaddr.iprange_to_cidrs(startip, endip) даст вам список CIDR подсетей, которые соответствуют точно между границами. Тем не менее, я надеялся найти одну подсеть CIDR, которая охватывает все это, даже если она дает еще несколько IP-адресов.

Я предпочитаю функцию, которая делает это, но я бы также приветствовал любую математику/логику, чтобы вычислить ее и в конечном итоге превратить ее в код.

ответ

1

Похоже netaddr.spanning_cidr делает трюк:

In [5]: netaddr.spanning_cidr(['63.223.64.0', '63.223.127.255']) 
Out[5]: IPNetwork('63.223.64.0/18') 
+0

безупречный! Спасибо. – MoMoney

3

Вы пробовали модуль ipaddress? Он поставляется с Python 3, но устанавливаемая на Python 2.

import ipaddress 
startip = ipaddress.IPv4Address('63.223.64.0') 
endip = ipaddress.IPv4Address('63.223.127.255') 
# summarize_address_range produces a generator, so force the results 
networks = [n for n in ipaddress.summarize_address_range(startip, endip)] 
print(networks) 
# [IPv4Network('63.223.64.0/18')] 
+0

Проблема у меня есть питон 2.6.6 и не способ установки новых модулей. но я сделаю это. Благодарю. – MoMoney

 Смежные вопросы

  • Нет связанных вопросов^_^