У меня есть адрес IP-1.2.3.4 с маской подсети 255.255.255.0как вы преобразовываете в cidr в python3?
Я хочу, чтобы преобразовать это в CIDR нотации 1.2.3.4/24
Как это сделать в Python3?
У меня есть адрес IP-1.2.3.4 с маской подсети 255.255.255.0как вы преобразовываете в cidr в python3?
Я хочу, чтобы преобразовать это в CIDR нотации 1.2.3.4/24
Как это сделать в Python3?
Используйте модуль ipaddress
в стандартной библиотеке.
Адрес плюс сетевая маска - это либо сеть, либо интерфейс, а не адрес. Учитывая, что у вас установлены некоторые из битов хоста (это 1.2.3.4, а не 1.2.3.0), либо у вас есть интерфейс, либо у вас есть неканоническое имя для сети; Я предполагаю, что это интерфейс, так что используйте ip_interface
:
>>> i = ipaddress.ip_interface('1.2.3.4/255.255.255.0')
Или, если вы хотите, чтобы убедиться, что он явно IPv4 не IPv6:
>>> i = ipaddress.IPv4Interface('1.2.3.4/255.255.255.0')
Или вы можете составить его из адреса и сети, а не из комбинированной строки. Это зависит от того, в каком формате у вас есть эта информация и что имеет смысл для вас.
Чтобы получить формат CIDR, используйте with_prefixlen
аксессор:
>>> i.with_prefixlen
'1.2.3.4/24'
Вы также можете сделать все виды других хитроумных вещей извлечет адрес (1.2.3.4
) в качестве i.address
, или (1.2.3.0/24
) в качестве i.network
или перечислить все адреса в сети путем обработки i.network
в качестве последовательности и т. д.
Для этого вы можете использовать библиотеку IPy. Если вы прокрутите страницу вниз до документации, вы можете увидеть конверсии строк, которые она может выполнить. Ключевым вопросом является strNormal(1)
IP("1.2.3.4/255.255.255.0").strNormal(1)
из командной строки. – mine
sum ([bin (int (x)). Count ('1') для x в '255.255.255.0'.split ('. ')]) – rfkortekaas
@PadraicCunningham: Какой формат входит? Я предполагаю, что у него всего две строки: «1.2.3.4» и «255.255.255.0». (Я полагаю, что это возможно, что у него есть, скажем, два 32-битных целых числа 16909060 и 4294967040, но я думаю, он бы упомянул об этом, если да.) – abarnert