metodika.site

ЕГЭ-13 IP-адреса и маски

ТЕОРИЯ

Модуль ipaddress

В Python 3.3 появился модуль ipaddress. С помощью него можно решать № 13 ЕГЭ.

Для решения № 13 нам потребуются функции ip_address() и ip_network().

Создание IP-адреса

С помощью функции ip_address() можно создать объект – IP-адрес. В качестве аргумента функции мы указываем строку, в которой записано значение IP-адреса.

from ipaddress import *

ip = ip_address('192.168.0.1')
print(ip)

Программа выводит

192.168.0.1

Обратите внимание, что функция ip_address() возвращает не просто строку, а объект ipaddress.IPv4Address.

Получение двоичной записи IP-адреса

В задачах ЕГЭ нам нужно получать двоичную запись IP-адреса. Есть два способа сделать это.

Способ № 1

Сначала переведём IP-адрес в десятичное число, а затем с помощью функции bin() получим его двоичную запись.

1. Импортируем все функции из модуля ipaddress и в переменной ip создаём IP-адрес

from ipaddress import *

ip = ip_address('57.179.208.27')

2. С помощью функции int() переводим IP-адрес в обычное десятичное число

from ipaddress import *

ip = ip_address('57.179.208.27')
ip_int = int(ip) # 968085531

3. Переводим полученное десятичное число в двоичную систему счисления с помощью функции bin()

from ipaddress import *

ip = ip_address('57.179.208.27')
ip_int = int(ip)
ip_2 = bin(ip_int)[2:] # '111001101100111101000000011011'

Не забываем с помощью среза удалить префикс 0b, который приписывает функция bin().

4. Добавляем незначащие нули с помощью zfill(), чтобы IP-адресс состоял из 32 двоичных цифр

from ipaddress import *

ip = ip_address('57.179.208.27')
ip_int = int(ip)
ip_2 = bin(ip_int)[2:] # '111001101100111101000000011011'
ip_2 = ip_2.zfill(32)  # '00111001101100111101000000011011'

Таким образом мы получили двоичную запись IP-адреса, записанную в строку.

😎 Код можно записать в одну строку

from ipaddress import *

ip_2 = bin(int(ip_address('57.179.208.27')))[2:].zfill(32)

Способ № 2

❗ Данный способ работает только начиная с версии Python 3.9. Если вы не уверены на 100%, что нужная версия Python будет установлена у вас на ЕГЭ, то используйте первый способ.

1. Импортируем все функции из модуля ipaddress и в переменной ip создаём IP-адрес

from ipaddress import *

ip = ip_address('192.168.0.1')

2. С помощью f-строк получаем двоичную запись IP-адреса

from ipaddress import *

ip = ip_address('192.168.0.1')
ip_2 = f'{ip:b}' # 11000000101010000000000000000001

Обратите внимание, что в данном случае у нас не возникает префикса 0b, поэтому его не надо удалять.

В данном способе дописывать незначащие нули с помощью zfill() не нужно, так как они автоматически допишутся.

😎 Код можно записать в одну строку

from ipaddress import *

ip_2 = f'{ip_address("192.168.0.1"):b}'

Внешние и внутренние скобки должны отличаться!

Примечание

Перевод IP-адреса в число

У вас наверняка возник вопрос, как именно из IP-адреса получается обычное десятичное число.

from ipaddress import *

ip = ip_address('192.168.0.1')
ip_int = int(ip) # 3232235521

Переводим каждый байт IP-адреса 192.168.0.1 в двоичную запись: 11000000.10101000.00000000.00000001.

И представляем это всё как одно двоичное число: 110000001010100000000000000000012.

И переводим данное двоичное число в десятичную систему счисления: 11000000101010000000000000000001= 323223552110.

Ответ

224

Ответ

18

Ответ

14

Ответ

3

Ответ

510

Отве21

Ответ

224

Ответ

64

Ответ

6

Ответ

5

Ответ

13

Ответ

3003

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Мы используем файлы cookie для анализа событий на нашем сайте. Продолжая просмотр сайта, вы принимаете условия использования