Начнём с рассмотрения задач 13 типа ЕГЭ по Информатике (Работа с сетью), они затрагивает организацию компьютерных сетей, адресацию, протоколы передачи данных.
Но для начала немного теории.
IP-адрес - это уникальный идентификатор, который назначается каждому устройству, подключенному к сети интернет. Он позволяет устройствам взаимодействовать друг с другом и обмениваться данными.
Существуют два основных типа IP-адресов:
• IPv4: Используется в большинстве современных сетей. Представляет собой 32-битное число, которое записывается в виде четырех чисел от 0 до 255, разделенных точками, каждое из которых весит по 8 бит (например, 192.168.1.1). (Используется на ЕГЭ)
• IPv6: Новая версия IP-адреса, использующая 128-битное число, записанное в шестнадцатеричном виде (например, 2001:0:200:3:0:0:0:1).
Адрес сети - это начальный IP-адрес диапазона IP-адресов, которые относятся к одной сети. Он используется для идентификации этой сети и является частью объекта сети, который также включает в себя маску подсети.
Маска - это 32-битное число, которое определяет, какая часть IP-адреса используется для идентификации сети, а какая - для идентификации конкретного устройства в сети.
По IP и маске можно найти адрес сети.
Например, IP - 192.168.1.10 Маска - 255.255.255.0
Нужно перевести в двоичное представление и выполнить побитовую операцию AND
IP-адрес: 11000000 10101000 00000001 00001010
Маска подсети: 11111111 11111111 11111111 00000000
Результат побитовой операции AND: 11000000 10101000 00000001 00000000 = 192.168.1.0 в десятеричном представлении. Это адрес сети
Дальше в процессе решения задач разберёмся подробнее, будем использовать модуль ipaddress
Но для начала немного теории.
IP-адрес - это уникальный идентификатор, который назначается каждому устройству, подключенному к сети интернет. Он позволяет устройствам взаимодействовать друг с другом и обмениваться данными.
Существуют два основных типа IP-адресов:
• IPv4: Используется в большинстве современных сетей. Представляет собой 32-битное число, которое записывается в виде четырех чисел от 0 до 255, разделенных точками, каждое из которых весит по 8 бит (например, 192.168.1.1). (Используется на ЕГЭ)
• IPv6: Новая версия IP-адреса, использующая 128-битное число, записанное в шестнадцатеричном виде (например, 2001:0:200:3:0:0:0:1).
Адрес сети - это начальный IP-адрес диапазона IP-адресов, которые относятся к одной сети. Он используется для идентификации этой сети и является частью объекта сети, который также включает в себя маску подсети.
Маска - это 32-битное число, которое определяет, какая часть IP-адреса используется для идентификации сети, а какая - для идентификации конкретного устройства в сети.
По IP и маске можно найти адрес сети.
Например, IP - 192.168.1.10 Маска - 255.255.255.0
Нужно перевести в двоичное представление и выполнить побитовую операцию AND
IP-адрес: 11000000 10101000 00000001 00001010
Маска подсети: 11111111 11111111 11111111 00000000
Результат побитовой операции AND: 11000000 10101000 00000001 00000000 = 192.168.1.0 в десятеричном представлении. Это адрес сети
Дальше в процессе решения задач разберёмся подробнее, будем использовать модуль ipaddress
👍1
Решаем при помощи модуля ipaddress
Фукнция ip_network() возвращает нам объект сети (IPv4Network), в формате строки: 145.92.128.0/20. Слешом разделены искомый IP адрес сети и число 20 (маска, может задаваться в таком формате) показывает, сколько бит IP-адреса используется для идентификации сети, а сколько - для идентификации устройства внутри сети. Простыми словами это значит, что маска содержит 20 единиц в двоичном представлении, это нам пригодится для решения других задач такого типа.
Из полученного результата (145.92.128.0) следует, что ответ BHEA
Примечание: параметр strict False, чтобы функция не проверяла маску на соответствие стандартам.
from ipaddress import *
ip="145.92.137.88"
mask = "255.255.240.0"
network = ip_network(f"{ip}/{mask}", strict=False)
print(network) #145.92.128.0/20
Фукнция ip_network() возвращает нам объект сети (IPv4Network), в формате строки: 145.92.128.0/20. Слешом разделены искомый IP адрес сети и число 20 (маска, может задаваться в таком формате) показывает, сколько бит IP-адреса используется для идентификации сети, а сколько - для идентификации устройства внутри сети. Простыми словами это значит, что маска содержит 20 единиц в двоичном представлении, это нам пригодится для решения других задач такого типа.
Из полученного результата (145.92.128.0) следует, что ответ BHEA
Примечание: параметр strict False, чтобы функция не проверяла маску на соответствие стандартам.
👍1
ip = "218.159.208.24"
address = "218.159.192.0"
for mask in range(33):
network = ip_network(f"{ip}/{mask}", False)
if address in str(network):
print(network.netmask)
Перебираем все возможные варианты масок, то есть 0 от 32 (потому что максимум 32 единицы, а минимум ни одной в двоичном представлении)
При помощи функции ip_network() находим адрес сети, выводим в консоль подходящие маски для этого адреса.
Получаем
255.255.192.0
255.255.224.0
Каждое число представляет отдельный байт, видим что самый наибольший третий байт равен 224
👍2
from ipaddress import *
mask = "255.255.255.192"
net = ip_network(f"0.0.0.0/{mask}")
print(net.num_addresses - 2)
Для получения сети мы используем фиктивный IP-адрес, который используется для определения сети, так как адрес сети будет выведен правильно с учетом маски.
Обращаемся к свойству num_addresses, получим количество возможных iP-адресов в данной сети и отнимем 2 (по условию задачи) и получим 62
❤2
from ipaddress import *
mask = "255.255.240.0"
ip = "232.126.150.18"
net = ip_network(f"{ip}/{mask}", False)
ip = ip_address(ip)
net_ip = ip_address(str(net).split("/")[0])
print(int(ip)-int(net_ip))
Номер компьютера сети равен разнице IP-адреса компьютера и адреса сети. Находим адрес сети по маске и IP. Дальше при помощи функции ip_address получаем объекты IP-адресов в правильном виде. В адресе сети избавляемся от маски. Далее отнимаем от IP-адреса компьютера адрес сети, предварительно конвертировав оба значения в десятичное целочисленное число (int) для удобства и получаем ответ: 1554
🔥5❤1😎1
Python и веб-разработка: Быстрый старт с FastAPI
FastAPI — современный веб-фреймворк для создания API на Python с поддержкой асинхронного программирования. Он позволяет быстро и легко разрабатывать высокопроизводительные RESTful API, используя аннотации типов для валидации данных.
Запуск
FastAPI — современный веб-фреймворк для создания API на Python с поддержкой асинхронного программирования. Он позволяет быстро и легко разрабатывать высокопроизводительные RESTful API, используя аннотации типов для валидации данных.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello, World!"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}
Запуск
uvicorn main:app --reload
👍7