Tagged: Сети

27
Авг
2021

🔄 Из метрологов в сетевые архитекторы: рассказ сисадмина-самоучки

Герой этой истории перепробовал множество профессий, но в итоге стал системным администратором, а менее чем через год занял должность старшего специалиста по кибербезопасности и возглавил бригаду архитекторов серверной и сетевой инфраструктуры. Хотите узнать, можно ли освоить IT-специальность с нуля? Читайте его автобиографический рассказ.

Сегодня я хочу поделиться личным опытом, связанным с сменой сферы деятельности. До недавнего времени я занимался метеорологическими испытаниями, но в какой то момент решил сменить сферу деятельности в корне – с метролога на системного администратора. Мой опыт в IT заключался в переустановке операционной системы Windows, драйверов и прикладных программ. О Linux я тогда ничего не слышал и был очень далек от UNIX-систем в целом. Однако давайте обо всем по порядку…

Моя карьера началась сразу после окончания мной средней школы. Устроился на работу охранником в мебельный магазин. Параллельно поступил на учебу в профессионально-техническое училище по направлению мастер по ремонту и обслуживанию компьютеров. В те далекие 2005-2006 годы нас обучали азам на устаревших еще на тот момент Pentium 1-го и 2-го поколений. Как вы уже успели догадаться, это не дало никакого эффекта. На лекциях была одна лишь история компьютеризации.

Первый компьютер я приобрел на кровно-заработанные деньги в середине 2008-го (на тот момент мне было 19 лет). На тот момент интернет (не смеяться) у нас был DIAL-UP соединением со скоростью передачи данных 5 кбит/с. Да, страна в которой я родился и вырос, далеко не передовая в плане IT-развития, но этого не я выбирал…


После приобретения первого компьютера (не помню уже точной комплектации, но процессор там был двухъядерным от AMD, 2 ГБ RAM, 521 ГБ HDD и VGA 512 МБ при 128-битной шине) увлекся игровой инфраструктурой. Сутками зависал перед монитором. Насытившись играми, увлекся прошивкой телефонов, а именно модели Sony Ericsson C902, которой на тот момент владел. Начал устанавливать кастомные прошивки, доступные на просторах интернета (и это с интернетом всего лишь на 5 кбит/с). После начал писать свою прошивку, пользуясь всего лишь Блокнот из Windows XP. Нас в школе на уроках информатики учили Pascal, как передовому на тот момент языку программирования.

Часть вторая

После карьера отдалила меня от новинок в мире IT-индустрии. Работал в ненормированном режиме в геологической экспедиции. В разъездах проводил 70% каждого месяца. Дальше работал в типографии дизайнером, после устроился метрологом в государственном надзорном органе. Тут и началась моя история в мире IT. Поскольку я немного разбирался в компьютерах, меня загрузили сразу серверным и сетевым оборудованием допотопной IT-инфраструктуры организации.

Я не стал бы делать неоплачиваемую работу, но тяга к IT взяла верх (на тот момент мне уже было 29 лет). Я начал как губка впитывать всю доступную на просторах интернета информацию, благо на тот момент у нас была уже приличная скорость интернет-соединения по выделенному каналу. Зависал на работе до полуночи, изучая новое для себя направление.

Часть третья

Изучив и пощупав администрирование серверов на Windows с технологиями виртуализации, я продолжил изучение кластеризации и отказоустойчивости. Благо в наше время на просторах интернета очень много информации по любому вопросу в сфере IT. Построил кластер на базе Vmware, организовал отказоустойчивость fault tolerance, организовал систему хранения на жестких дисках серверов кластера, используя технологии Vmware vSAN.


Освоившись с серверами на Windows, я начал изучать Linux и настроил корпоративную электронную почту на основе решений с открытым исходным кодом. Также построил систему мониторинга zabbix и сбор логов с последующим их анализом на базе ELK (Elasticsearch, Logstash и Kibana).

После мне предложили работу в IT-компании. Чуть менее года ушло, чтобы достичь должности старшего специалиста по кибербезопасности и возглавить бригаду архитекторов серверной и сетевой инфраструктуры.

На практике я сталкивался с огромным количеством проблем, решение которых находил на просторах интернета. Пройдя через все это, я понял, что в сфере информационных технологий нельзя достичь предела в знаниях. Нельзя переставать учиться новому, не стыдясь признать своей неосведомленности. Не зря говорят: «Век живи – век учись».

В планах заняться программированием. Достичь уровня full stack developer, после чего будет можно утвердиться в профессии инженера DevOps.

В этой статье я рассказал о своем жизненном опыте, пытаясь объяснить читателям, что никогда не поздно выйти из зоны комфорта и начать заниматься чем-то новым. Ведь мозг – это как мышца, которую нужно тренировать.

***

Пройдя через все круги ада и неудач в начале карьеры, хочу дать небольшой совет: начните путь в профессию с изучения сетевых технологий. Сисадмин – только первая ступенька. Как развиваться дальше, решать вам. Можно, например, стать инженером по сетевым коммуникациям и начать проектировать корпоративные сети. Какое бы направление вы в итоге ни выбрали, эти знания пригодятся в любом случае.

Реклама
Стать квалифицированным сетевым инженером достаточно сложно. Работодатели все чаще ищут профессионалов с универсальными навыками, а крупные компании обычно требуют высшее образование в области компьютерных наук, информационных систем или компьютерной инженерии. Если у вас нет ученых степеней в этой области – не страшно! Теперь можно изучить все необходимое при помощи практикующих наставников-профессионалов факультета «Сетевой инженер» образовательной онлайн-платформы GeekBrains. Здесь вы освоите сетевые технологии с нуля, получите диплом о профессиональной подготовке и сможете начать карьеру на уровне настоящего боевого джуна. Получите необходимые знания по администрированию сетей, закрепите их на практике, а также пополните портфолио двумя самостоятельными проектами.

23
Июн
2021

🔄 Сетевой инженер или DevOps: в каком направлении развиваться сисадмину?

Развитие сферы ИТ приводит к тому, что некоторые специальности постепенно теряют актуальность. Есть мнение, что системный администратор – одна из умирающих профессий. Разбираемся правда ли это и в каком направлении стоит развиваться сисадмину.

Системный администратор – это специалист, который занимается настройкой, совершенствованием и поддержкой ИТ-инфраструктуры компании, включая оборудование, периферию, программное обеспечение и сетевые подключения.

Основные обязанности системного администратора:

  • Установка и настройка компьютеров и оргтехники;
  • Обслуживание локальной сети и АТС;
  • Обеспечение бесперебойной работы серверов;
  • Создание учетных записей пользователей;
  • Определение уровней доступа сотрудников;
  • Установка и обновление ПО;
  • Контроль безопасности данных и их резервное копирование;
  • Инвентаризация и закупка оборудования.
Получается, сисадмин – специалист широкого профиля, без которого трудно себе представить работу даже небольшого офиса. На портале hh.ru по запросу «Системный администратор» можно найти более пяти тысяч вакансий с зарплатной вилкой от 30 000 рублей для начинающего специалиста, до 100 000 рублей для опытного профессионала. Непохоже на вымирающую должность, но некоторые проблемы в этой сфере все-таки есть.

Дело в том, что системные администраторы нужны любому бизнесу, а не только связанному с ИТ. У хорошего сисадмина вся инфраструктура исправно работает, рутинные задачи автоматизированы, и создается иллюзия, будто он ничего не делает. Тут кроется главное недопонимание между работодателем и сотрудником.

Бизнесмены, запомните: хорошему сисадмину платят за то, что он не работает!

В малом и среднем бизнесе на плечи системного администратора зачастую ложится много дополнительной, несвойственной ему работы – от мытья полов в серверной и монтажа СКС до обязанностей офис-менеджера и личного помощника директора. На такой должности действительно можно выгореть, тем более деньгами на ней особо не балуют.

Выход здесь один: относиться к работе как к источнику опыта и менять ее при первой возможности.

Будущее системного администратора

Что касается продвижения по служебной лестнице, то для универсального сотрудника в государственной организации или малом бизнесе особых перспектив нет: ему придется годами решать одни и те же вопросы. Если же деятельность компании связана с оказанием услуг в сфере ИТ или у нее есть собственная развитая ИТ-инфраструктура с департаментом разработки, карьера вполне возможна.

Начав с младшей позиции, можно стать ведущим системным администратором или начальником отдела информационных технологий. Сейчас должность системного администратора еще актуальна, а потребность в таких специалистах достаточно высока, однако развитие облачных технологий и автоматическое развертывание инфраструктуры забирает значительную часть их работы. Растет спрос на специалистов более высокой квалификации (сетевых инженеров) и настоящих универсалов, разбирающихся еще и в разработке – инженеров DevOps. Для системного администратора оба этих направления – хорошие варианты движения вверх по карьерной лестнице.

Сетевой инженер


Сетевой инженер – это специалист, который отвечает за создание, обслуживание и настройку внутренних компьютерных сетей компании. В его компетенцию также входит обеспечение взаимодействия ИТ-инфраструктуры организации с внешними сетями. Такие специалисты должны обладать хорошим уровнем знаний в сфере дизайна, безопасности и поддержки сетей, причем их работа также включает элементы программирования и серверного администрирования.

Главное отличие от сисадмина в том, что сисадмины чаще обслуживают готовую инфраструктуру (если не считать небольших организаций, где айтишники «от скуки на все руки»), а сетевой инженер должен уметь построить и задокументировать корпоративную сеть с нуля. Также его работа предполагает взаимодействие с активным сетевым оборудованием таких вендоров, как Cisco, Mikrotik, Juniper и т.д.

Что касается железа, сетевой инженер не всегда работает с ним напрямую. Благодаря виртуализации и современному софту можно превращать конечные устройства в маршрутизаторы и строить более масштабируемые и отказоустойчивые сети. Большой разницы для инженера при работе с физическим или виртуальным оборудованием нет: логика принятия решений и протоколы у них одинаковые.

Чтобы стать сетевым инженером вы должны знать:

  • Компьютерные сети на уровне не ниже CCNA/CCNP;
  • Основы безопасности сетей;
  • Основы дизайна сетей;
  • Активное сетевое оборудование (маршрутизаторы, коммутаторы, межсетевые экраны);
  • Технологии виртуализации;
  • ОС Linux и Windows Server;
  • Скриптовые языки программирования (bash, python).
Темпы карьерного роста зависят в основном от усердия и желания учиться. Если регулярно тратить на саморазвитие час-полтора в день, можно менее чем за два года вырасти с джуна до синьора. Ключевое различие между ними в том, что джуны обычно выполняют простые рутинные задачи, а синьоры занимаются более комплексными и сложными проектами, а также архитектурой сети и глобальными преобразованиями в ней. Чтобы расти, стоит начать собирать схемы в виртуальной лаборатории и изучить работу протоколов.

Инженер DevOps


Если же кроме системного администрирования вас притягивает и разработка, стоит задуматься о стоящей на стыке этих областей профессии.

В ситуации с DevOps важно не путать термины. DevOps – это не какое-то конкретное направление деятельности, а профессиональная философия. Это набор методик, которые помогают программистам, тестировщикам и системным администраторам работать быстрее и эффективнее за счет автоматизации и непрерывной интеграции.

Инженер DevOps – специалист, который внедряет эти методики в рабочий процесс.

Когда разработчики проекта начинают писать программу, они советуются с devops-ами о том, в каком окружении будет работать код. Инженеры DevOps предоставляют эту информацию и корректируют моменты, которые связаны с конкретной спецификой окружения. После того, как программисты закончили работу с кодом, инженер DevOps должен довести его до клиента: организовать компиляцию, сборку, тестирование, развертывание на тестовых окружениях. На этой стадии специалист вникает в процессы ручного и автоматизированного тестирования.

Инженер DevOps участвует во всех жизненных циклах проекта, а потому его знания гораздо шире, чем у остальных участников команды, пусть и не столь глубоки.

Также в задачи специалиста входит написание большого количества кода на скриптовых языках: Python, GoLang или Bash.

Чтобы стать инженером DevOps вы должны знать:

  • Основы компьютерных сетей;
  • Администрирование Linux;
  • Скриптовые языки программирования;
  • Технологии виртуализации;
  • Облачные сервисы;
  • Инструменты DevOps:
  • Системы мониторинга и тестирования.

Если вы только начинаете свой путь в ИТ, будет нелегко, поскольку багаж знаний в этой сфере требуется солидный. Большинство переходят в DevOps, имея опыт разработки или администрирования: в этом случае останется освоить примерно половину требуемого материала.

Другой материал по теме: как освоить профессию инженера DevOps.

Сетевой инженер и инженер DevOps – востребованные профессии. Опытные специалисты могут рассчитывать на оклад более 200 000 в месяц, даже работая удаленно. При этом обучение не должно забрать у вас много сил и времени, если вы уже имеете опыт работы системным администратором.

***

Если вы не стоите на месте и хотите развиваться, обратите внимание на факультет «Сетевой инженер» образовательной онлайн-платформы GeekBrains. За одиннадцать месяцев вы изучите основы сетевых технологий, коммутацию и маршрутизацию, безопасность, масштабирование сетей и автоматизацию сетевой инфраструктуры, сделаете 2 проекта для портфолио, а также получите диплом о переподготовке и помощь в трудоустройстве.

19
Июн
2021

🔄 Как стать сетевым инженером в 2021 году?

В небольшом обзоре мы выясним, кто такой сетевой инженер и что необходимо для освоения этой популярной профессии.

Крупные международные компании ежедневно вкладывают огромные средства в современные сетевые технологии и модернизацию существующей сети. Неудивительно, что значительно возросла потребность в управляющих ИТ-инфраструктурой специалистах.

Кто такой сетевой инженер?
Сетевой инженер – это ИТ-специалист, обеспечивающий поддержку компьютерной и коммуникационной сети организации. Представители этой профессии тестируют безопасность и производительность системы, разрабатывают проекты новых сетей и планы аварийного восстановления в случае сбоя. Они работают с сетевым программным обеспечением, всеми типами серверов, межсетевыми экранами, маршрутизаторами, шлюзами, коммутаторами и т.п. Сетевые инженеры создают кабельные и беспроводные сети, устраняют неполадки, исследуют и интегрируют новые технологии.

Что нужно знать и уметь?


Давайте разберем базовые навыки, необходимые начинающему инженеру сетей для входа в профессию:

  • Клиенты и серверы: как клиенты и сервисы соединяются с помощью сетей.
  • Стек протоколов TCP/IP: модель OSI, протоколы различных уровней, IPv4 и IPv6, подсети и основы статической и динамической маршрутизации.
  • Структурированная кабельная система.
  • Активное сетевое оборудование: концентраторы, коммутаторы, маршрутизаторы и т.д.
  • Сетевая безопасность: концепция защищенного периметра, межсетевые экраны и тому подобные решения.
  • Операционные системы (Windows Server, Linux).
Для анализа сетевых структур необходимо знать как их аппаратные, так и программные характеристики. Также необходимо понимание облачных вычислений, управление доменами и устройства корпоративных сетей.

Нужна ли формальная сертификация?


Начинающему сетевому инженеру стоит задуматься о получении сертификата от одного или нескольких производителей оборудования (вендоров). Наиболее популярным из них является CCNA (Cisco Certified Network Associate – начальный уровень в системе сертификации компании Cisco).

Тест CCNA включает проверку знаний по теории компьютерных сетей, стеку TCP/IP, модели OSI и по фактическому выполнению распространенных практических задач, которые должен решать сетевой инженер. Сертификат не является доказательством высокого уровня знаний: он скорее говорит о наличии базового понимания работы с сетевым оборудованием. Для новичков наличие официальной бумаги станет хорошим подспорьем в поиске работы.

Cisco – не единственный вариант получения сертификата, их много. Одним из перспективных вариантов является другой производитель сетевого оборудования – Juniper Networks. Его доля на рынке растет, поэтому эксперты Juniper пользуются большим спросом у работодателей.

Тенденции сертификации меняются со временем, поэтому обратите внимание на запросы кадровых агентств и сайты вакансий, чтобы ваше резюме было актуальным. Многие работодатели перечисляют требования к сертификатам в объявлениях, что позволяет довольно легко следить за тенденциями найма.

Где получить недостающие знания?

Прохождение вендорского курса даст вам определенные знания, однако максимальный результат можно получить только на практике, имея теоретическую базу. Тщательно изучите профессиональную литературу по сетевой тематике. Вот несколько хороших ресурсов:

  • Проект статей на habr.com «Сети для самых маленьких». Отличная серия публикаций по системному администрированию для новичков. Авторы проделали превосходную работу и создали хорошо структурированный онлайн-учебник.
  • Книга «Компьютерные сети» Виктора и Натальи Олифер предназначена для студентов технических ВУЗов. В ней разъясняются базовые принципы построения компьютерных сетей и способы управления ими, а также особенности традиционных сетевых технологий.
  • Книги Рене Мулинара (Rene Molenaar «How to master CCNP route»). Лучшая литература для подготовки к сертификации Cisco по треку R&S любого уровня. Единственный недостаток: издания платные и на английском языке.
  • Классика жанра – книга «Компьютерные сети» Э. Таненбаума и Д .Уэзэрол. В ней изложены основные понятия, определяющие современные тенденции развития компьютерных сетей.
Теория важна, но в первую очередь работодатели ищут в резюме кандидата практический опыт. Для общего понимания специфики хорошим началом станет стажировка в службе поддержки сети. Это отличный способ развить реальные навыки, необходимые будущему сетевому инженеру для решения повседневных задач. Также не стоит забывать про soft skills. Общение, работа в команде и творческий подход к решению проблем зачастую важнее академических результатов.

Закончив с базовыми концепциями, создайте свою практическую лабораторию, настройте компьютер и ознакомьтесь с необходимыми для работы сетевыми инструментами, некоторые из которых перечислены ниже:

  • CISCO Packet Tracer. Мощная программа моделирования сетей
  • VIRL. Виртуальная лаборатория маршрутизации в Интернете
  • Boson NetSim. Имитатор сетевых коммутаторов и маршрутизаторов
  • EVE-NG (Emulated Virtual Environment). Эмулированная виртуальная лаборатория с сетевым оборудованием и программным обеспечением.
  • GNS3. Интерфейс для эмуляции и виртуализации сети

Где работают сетевые инженеры и сколько им платят?


Квалифицированные кандидаты могут найти работу по проектированию сетей практически в любом секторе. Телекоммуникационные компании и предприятия со сложными компьютерными системами регулярно нанимают специалистов, обладающих навыками создания и настройки сети. В небольших фирмах подобная работа обычно отдана на аутсорсинг специализированным организациям.

Среди ведущих зарубежных работодателей можно найти таких гигантов, как Cisco Systems, AT&T и Amazon. Согласно исследованиям крупнейшего статистического сайта Salary.com, средняя заработная плата инженера сетей в США варьируется от 70 000 до 130 000 долларов в год в зависимости от уровня (Levels IV).

Российская площадка по поиску работы neuvoo.ru проанализировала зарплатную статистику по профессии «Сетевой Инженер»: в нашей стране молодой специалист получает от 385 000 рублей в год, а заработок самых опытных достигает 1 080 000 рублей в год.

Специфика работы: мнения специалистов о профессии


Если молодому инженеру поставить задачу – починить оборудование, первое, что он делает – идет в Google, даже не заглянув в инструкцию или спецификацию. Он найдет ответ на вопрос. И, если повезет, то ничего не сломает. В нашей профессии можно ошибаться – мы не лечим людей и не запускаем ракеты. Но даже при этом «чисто экспериментальный» подход неразумен и часто неэффективен. Специалисту для уверенного выполнения своих задач нужна база знаний. В нашем случае – понимание принципов, по которым работает сеть. Потом человек начинает расти. Подтягивает знания по операционным системам и аппаратному обеспечению. Шлифует это все знаниями по безопасности. В итоге мы получаем серьезного профессионала.
Александр Городецкий, заведующий кафедрой «Сетевые технологии и системное администрирование» компьютерной академии Шаг. Источник: blog.trud.com
Карьеру в ИТ сегодня чаще всего ассоциируют с задачами в области разработки софта. Программист, тестировщик, системный архитектор, тим-лид и подобные позиции у всех «на слуху». Между тем, ничуть не менее важная область современных цифровых решений представлена сетями, где свой вклад в создание и работу самых современных digital-продуктов делают сетевые инженеры.
Аркадий Марисенков, инженер IP-сетей компании Linxdatacenter. Источник: tproger.ru
Сетевые инженеры обычно работают в крупных компаниях, часто – в телекоммуникационных провайдерах. Такие организации обладают масштабной инфраструктурой, работать с которой интересно. Среди других технологических компаний, сравнимыми возможностями обладают разве что гиганты, вроде Google и Facebook. Поэтому сетевики не заинтересованы в рассмотрении предложений о переходе. На рынке не так уж много инженеров, обладающих опытом автоматизации и написания продакшн-кода (например, опыта работы с SDN). Поэтому в данном направлении – всегда нехватка специалистов.
Энрико Хейдельберг, HR manager, компания Riot Games. Источник: amazinghiring.ru
***

Стать квалифицированным сетевым инженером достаточно сложно. Работодатели все чаще ищут профессионалов с универсальными навыками, а крупные компании обычно требуют высшее образование в области компьютерных наук, информационных систем или компьютерной инженерии. Если у вас нет ученых степеней в этой области – не страшно! Теперь можно изучить все необходимое при помощи практикующих наставников-профессионалов факультета «Сетевой инженер» образовательной онлайн-платформы GeekBrains. Здесь вы освоите сетевые технологии с нуля, получите диплом о профессиональной подготовке и сможете начать карьеру на уровне настоящего боевого джуна. Получите необходимые знания по администрированию сетей, закрепите их на практике, а также пополните портфолио двумя самостоятельными проектами. Не упустите свой шанс. Удачи!

26
Мар
2021

🕸 gRPC и все-все-все: Часть I. Введение

Для лучшего понимания gRPC стоит разобраться и с другими протоколами. В первой части цикла мы поговорим о REST, RPC и затронем одну из его реализаций – SOAP.

Все сущее дв…

22
Мар
2021

🕸 Что такое HTTP и HTTPS?

Рассказываем о популярных протоколах, на которых построена всемирная паутина, а также отвечаем на вопросы новичков. Без понимания основ перейти к изучению более сложных тем не получится, а значит самое время восполнить пробелы в знаниях.

21
Авг
2020

Объясняем простым языком, что собой представляют прокси-серверы, какие они бывают и в чем разница между прокси и VPN.

Что такое прокси-сервер

07
Авг
2020

Рассказываем, как работать с IP-адресами классического протокола IPv4 в теории и на практике – в коде Python. Показываем, как проверить связь между группой IP-адресов и их соответствие подсетям и диапазонам частных IP-адресов.

Вводные сведения об IP-адресах

В самом грубом представлении IP-адрес – это просто число. В случае протокола IPv4 IP-адрес– это 32-разрядное целое число, используемое для представления
хоста в сети. То есть существует 232
возможных IPv4 адреса – от 0 до 4 294 967 295. IPv4-адреса записывают в виде четырех октетов – целых чисел, разделенных точками:

        220.14.9.37
    

Каждый октет – это один байт, число от 0 до 255. То есть максимальный адрес равен
255.255.255.255, а минимальный – 0.0.0.0.

Далее мы рассмотрим, как
модуль ipaddress выполняет преобразования адреса так, что нам не приходится отвлекаться на строение адреса.

Примечание
Модуль ipaddress добавлен в стандартную библиотеку в версии Python 3.3, примеры туториала проверены на примере Python 3.8. Пользователь matyushkin любезно адаптировал программный код статьи в виде конспективного Jupyter-блокнота. За счёт этого с кодом можно поиграть в среде Colab.

Модуль ipaddress

Получим внешний IP-адрес нашего
компьютера для работы с ним в командной строке. В Linux это делается так:

        $ curl -sS ifconfig.me/ip
220.14.9.37
    

Этот запрос узнает наш
IP-шник на сайте ifconfig.me. Сайт также выдает множество другой полезной информации о вашем сетевом подключении.

Примечания
Возможно, запрос вернет не лично ваш внешний (реальный) адрес. Если соединение находится за NAT-ом, то этот адрес используют и другие абоненты, находящиеся в вашем сегменте сети. Точную информацию о том, как реализована сеть, можно узнать у ее провайдера.

Теперь откроем интерпретатор Python. Чтобы создать объект Python с инкапсулированным адресом, создадим класс IPv4Address:

        >>> from ipaddress import IPv4Address
>>> addr = IPv4Address("220.14.9.37")
>>> addr
IPv4Address('220.14.9.37')
    

Передача строки "220.14.9.37"
в конструктор IPv4Address – наиболее распространенный подход, но класс может
принимать и другие типы:

        >>> IPv4Address(3691907365)   # Из целого числа
IPv4Address('220.14.9.37')

>>> IPv4Address(b"\xdc\x0e\t%")  # Из байтовой строки
IPv4Address('220.14.9.37')
    

Адрес можно распаковать в требуемую форму:

        >>> int(addr)
3691907365
>>> addr.packed
b'\xdc\x0e\t%'
    

Экземпляры IPv4Address являются хэшируемыми и могут использоваться в качестве
ключей словаря:

        >>> hash(IPv4Address("220.14.9.37"))
4035855712965130587

>>> num_connections = {
...     IPv4Address("220.14.9.37"): 2,
...     IPv4Address("100.201.0.4"): 16,
...     IPv4Address("8.240.12.2"): 4,
... }
    

Класс IPv4Address также реализует
методы, позволяющие проводить сравнения:

        >>> IPv4Address("220.14.9.37") > IPv4Address("8.240.12.2")
True

>>> addrs = (
...     IPv4Address("220.14.9.37"),
...     IPv4Address("8.240.12.2"),
...     IPv4Address("100.201.0.4"),
... )
>>> for a in sorted(addrs):
...     print(a)
...
8.240.12.2
100.201.0.4
220.14.9.37
    

Можно использовать
любой стандартный оператор сравнения целочисленных значений
адресных объектов.

IP-сети и интерфейсы

Сеть – это набор
IP-адресов. Сети описываются и отображаются как непрерывные диапазоны адресов.
Например, сеть может соответствовать диапазону 192.4.2.0192.4.2.255, т. е.
включать 256 адресов. Если нужно это отобразить в краткой форме, используется нотация CIDR.

В CIDR сеть
определяется с помощью сетевого адреса и префикса
<network_address>/<prefix>:

        >>> from ipaddress import IPv4Network
>>> net = IPv4Network("192.4.2.0/24")
>>> net.num_addresses
256

# Вывести префикс можно с помощью свойства prefixlen:
>>> net.prefixlen
24
    

В данном случае префикс равен 24. Префикс – это количество ведущих битов, соответствующих входящим в сеть адресам. Ведущие биты отсчитываются слева направо.

Пример: входит ли
адрес 192.4.2.12 в сеть 192.4.2.0/24?

Ответ: да, так как ведущие 24 бита адреса 192.4.2.12 – это первые три октета: 192.4.2. Последний октет соответствует последним 8 битам 32-битного IP-адреса.

Воспользуемся netmask для маскирования
битов
в сравниваемых
адресах.

Определение
Битовая маска – данные, которые используются для маскирования – выбора отдельных битов или полей из нескольких битов из двоичной строки или числа.

        >>> net.netmask
IPv4Address('255.255.255.0')
    

На рисунке ниже показано, как сравниваются ведущие
биты, чтобы определить, является ли адрес частью сети.

Побитовое сравнение
Побитовое сравнение

Последние 8 бит в
192.4.2.12 маскируются нулем и игнорируются при сравнении.

        >>> IPv4Address("192.4.2.12") in net
True
>>> IPv4Address("192.4.20.2") in net
False
    

Рассмотрим еще один
важный тип адреса – широковещательный.

Определение
Широковещательный адрес – условный (не присвоенный никакому устройству в сети) адрес, который используется для передачи широковещательных пакетов в компьютерных сетях.

Это единственный адрес, который может использоваться
для связи со всеми хостами сети:

        >>> net.network_address
IPv4Address('192.4.2.0')
    

Чаще всего вы будете сталкиваться
с длиной префикса кратной 8.

Распространенные подсети
Распространенные подсети

Любое целое число от 0
до 32 является допустимым, но такой вариант встречается реже:

        >>> net = IPv4Network("100.64.0.0/10")
>>> net.num_addresses
4194304
>>> net.netmask
IPv4Address('255.192.0.0')
    

Перебор IP-адресов в цикле

Класс IPv4Network позволяет
перебирать отдельные адреса в цикле for:

        >>> net = IPv4Network("192.4.2.0/28")
>>> for addr in net:
...     print(addr)
...
192.4.2.0
192.4.2.1
192.4.2.2
...
192.4.2.13
192.4.2.14
192.4.2.15
    

Инструмент
net.hosts() возвращает генератор, выдающий адреса, исключая сетевые и
широковещательные:

        >>> h = net.hosts()
>>> type(h)
<class 'generator'>
>>> next(h)
IPv4Address('192.4.2.1')
>>> next(h)
IPv4Address('192.4.2.2')
    

Подсети IP-адресов

Подсеть – это часть IP-сети:

        >>> small_net = IPv4Network("192.0.2.0/28")
>>> big_net = IPv4Network("192.0.0.0/16")
>>> small_net.subnet_of(big_net)
True
>>> big_net.supernet_of(small_net)
True
    

В коде выше small_net
содержит 16 адресов, а big_net – 65 536.

Распространенный способ
разбиения на подсети – это увеличение длины префикса на 1:

Разбиение сети
Разбиение сети

К счастью, IPv4Network расчеты подсетей поддерживаются встроенным методом subnets():

        >>> for sn in net.subnets():
...     print(sn)
...
200.100.10.0/25
200.100.10.128/25
    

В передаваемом subnets() аргументе можно задать, каким должен быть новый префикс:

        >>> for sn in net.subnets(new_prefix=28):
...     print(sn)
...
200.100.10.0/28
200.100.10.16/28
200.100.10.32/28
...
200.100.10.208/28
200.100.10.224/28
200.100.10.240/28
    

Специальные диапазоны IP-адресов

Администрация адресного пространства Интернет (Internet Assigned
Numbers Authority
, IANA) совместно с Инженерном советом Интернета (Internet
Engineering Task Force
, IETF) осуществляют
надзор за распределением диапазонов адресов. Реестр подобных адресов –
важная таблица, которая описывает, для каких целей зарезервированы диапазоны IPv4-адресов.

К примеру, это частные IP-адреса, используемые для внутренней связи между
устройствами в сети, не требующей подключения к интернету:

Зарезервированные диапазоны
Зарезервированные диапазоны

Случайным образом выберем
адрес – 10.243.156.214. Относится ли этот адрес к приватным? Для этого проверим, попадает ли он в диапазон cети 10.0.0.0/8:

        >>> IPv4Address("10.243.156.214") in IPv4Network("10.0.0.0/8")
True
    

Другой специальный тип
адреса – это локальный адрес связи, состоящий из блока 169.254.0.0/16. Примером
может служить
Amazon Time Sync Service, доступный для инстансов AWS EC2 по адресу
169.254.169.123. Данный пул также использует
Windows для
выдачи адресов сетевым адаптерам при отсутствии интернета от провайдера.

        >>> timesync_addr = IPv4Address("169.254.169.123")
>>> timesync_addr.is_link_local
True
    

Модуль ipaddress
предоставляет
набор свойств
для проверки того, относится ли адрес к специальным:

        >>> IPv4Address("10.243.156.214").is_private
True
>>> IPv4Address("127.0.0.1").is_loopback
True

>>> [i for i in dir(IPv4Address) if i.startswith("is_")]
['is_global',
 'is_link_local',
 'is_loopback',
 'is_multicast',
 'is_private',
 'is_reserved',
 'is_unspecified']
    

Вот еще несколько
зарезервированных сетей:

Что происходит внутри ipaddress

В дополнение к хорошо документированному
API, исходный
код CPython
и класс
IPv4Address
показывают некоторые отличные идеи, как улучшить собственный код.

Компоновщик

Модуль ipaddress
использует преимущества шаблона проектирования «Компоновщик». Класс IPv4Address представляет собой компоновщик, который оборачивает обычное целое число.

Каждый экземпляр
IPv4Address имеет атрибут _ip, число типа int. Многие свойства и методы класса определяются
значением этого атрибута:

        >>> addr = IPv4Address("220.14.9.37")
>>> addr._ip
3691907365
    

Атрибут _ip отвечает
за создание int(addr). Цепочка вызовов выглядит следующим образом:

Цепочка вызовов в компоновщике
Цепочка вызовов в компоновщике

Продемонстрируем силу ._ip путем расширения класса IPv4Address:

        from ipaddress import IPv4Address

class MyIPv4(IPv4Address):
    def __and__(self, other: IPv4Address):
        if not isinstance(other, (int, IPv4Address)):
            raise NotImplementedError
        return self.__class__(int(self) & int(other))
    

Добавление .__and__()
позволяет использовать бинарный оператор &, чтобы применять маску к
IP-адресу:

        >>> addr = MyIPv4("100.127.40.32")
>>> mask = MyIPv4("255.192.0.0")  # Соответствует префиксу /10

>>> addr & mask
MyIPv4('100.64.0.0')

>>> addr & 0xffc00000  # hex-литерал для 255.192.0.0
MyIPv4('100.64.0.0')
    

Метод __and__()
позволяет использовать либо другой IPv4Address, либо непосредственно
int в
качестве маски. Поскольку MyIPv4 является подклассом IPv4Address, проверка
isinstance() в данном случае вернет
True.

Помимо перегрузки
оператора, есть возможность добавить новые свойства:

        import re
from ipaddress import IPv4Address

class MyIPv4(IPv4Address):
    @property
    def binary_repr(self, sep=".") -> str:
        """Представляет IPv4 в виде 4 блоков по 8 бит."""
        return sep.join(f"{i:08b}" for i in self.packed)  # 8 строка

    @classmethod
    def from_binary_repr(cls, binary_repr: str):
        """Создает IPv4 из двоичного представления."""
        i = int(re.sub(r"[^01]", "", binary_repr), 2)  # 14 строка
        return cls(i)
    

В методе binary_repr (строка 8), используется .packed для преобразования IP-адреса в массив байтов, который
затем форматируется, как строковое представление бинарной формы.

В from_binary_repr, вызов int(re.sub(r"[^01]", "", binary_repr), 2) (строка 14) состоит
из двух частей:

  • удаление из входящей строки всего, кроме нулей и единиц;
  • анализ результата с помощью int(<string>, 2).

Методы binary_repr() и from_binary_repr() позволяют проводить двустороннюю конвертацию:

        >>> MyIPv4("220.14.9.37").binary_repr
'11011100.00001110.00001001.00100101'
>>> MyIPv4("255.255.0.0").binary_repr  # Маска для префикса /16 
'11111111.11111111.00000000.00000000'

>>> MyIPv4.from_binary_repr("11011100 00001110 00001001 00100101")
MyIPv4('220.14.9.37')
    

Таким образом, мы разобрали несколько способов
использования преимуществ шаблона IP-as-integer, который может помочь расширить
функциональность IPv4Address с небольшим количеством дополнительного кода.

Заключение

Если вам нравится язык Python и вы хотите детально овладеть стандартной библиотекой, у нас есть множество родственных публикаций: