, Полное руководство работы с сетями на Python

Полное руководство работы с сетями на Python

Эрик Чоу

 

Первая публикация на английском языке: Июнь 2017

Ссылка на продукт:

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

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

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

Опубликовано Packt Publishing Ltd.

Livery Place

35 Livery Street

Birmingham B3 2PB, UK

ISBN-13 978-1784397005

www.packtpub.com

2017-07-02

 Состав исполнителей

Авторы
Эрик Чоу
Рецензент
Редактор выпуска
Прачи Бишт
Редактор разработки содержания
Труша Шриян
Технический редактор
Варша Шивхэйр
Литературный редактор
Safis Editing
Координатор проекта
Кинджал Бейри
Корректор
Safis Editing
Составитель указателя
Прейтик Широдкар
Координатор производства
Найлиш Мохайт
Графика
Кирк Д'Пенья

 Об авторах

Эрик Чоу

 Рецензент

Сринивас Макам .

 www.PacktPub.com

 Содержание

Предисловие
Что охватывает эта книга
Что вам нужно для этой книги
Для кого эта книга
Соглашения
Обратная связь с читателями
Поддержка пользователей
Загрузка кодов примеров
Опечатки
Незаконное тиражирование
Вопросы
Глава 1. Обзор комплекта протокола TCP/IP и языка Python
Обзор Интернета
Серверы, хосты и сетевые компоненты
Появление центров обработки данных
Корпоративные центры обработки данных
Облачные центры обработки данных
Граничные центры обработки данных
Модель OSI
Модели клиент- сервер
Комплекты сетевого протокола
TCP
Функции и характеристики TCP
Сообщения TCP и обмен данными
UDP
IP
NAT IP и безопасность
Понятия маршрутизации IP
Обзор языка Python
Версии Python
Операционная система
Исполнение программ Python
Встроенные типы Python
Тип None
Числа
Последовательности
Соответствия
Множества
Операторы Python
Инструменты управления потоком Python
Функции Python
Классы Python
Модули и пакеты Python
Выводы
Глава 2. Взаимодействие с сетевым устройством на нижнем уровне
Вызовы CLI
Построение виртуальной лаборатории
Cisco VIRL
Уловки VIRL
Cisco DevNet и dCloud
GNS3
Библиотека Python Pexpect
Установка
Обзор Pexpect
Наша первая программа ожидания
Дополнительная функциональность Pexpect
Pexpect и SSH
СОбираем всё воедино для Pexpect
Библиотека Python Paramiko
Установка Paramiko
Обзор Paramiko
Наша первая программа Paramiko
Дополнительная функциональность Paramiko
Paramiko для серверов
Собираем всё воедино для Paramiko
Заглядывая вперёд
Недостатки Pexpect и Paramiko в сравнении с прочими инструментами
Идемпотентное взаимодействие сетевых устройств
Плохая автоматизация ускоряет плохие вещи
Выводы
Глава 3. Работа с сетями через API и движимое намерениями проектирование сетей
Инфраструктура как код Python
Сопоставление анализа терминальных данных и структурированного вывода API
Моделирование данных для инфраструктуры как код
API и ACI Cisco
Cisco NX-API
Установка лабораторного ПО и подготовка устройства
Примеры NX-API
Cisco и модель YANG
Cisco ACI
API Python для сетевых сред Juniper
Juniper и NETCONF
Подготовка устройства
Примеры Juniper NETCONF
Juniper PyEZ для разработчиков
Установка и подготовка
Примеры PyEZ
API Python Arista
Управление eAPI Arista
Подготовка eAPI
Примеры eAPI
Библиотека Arista Pyeapi
Установка Pyeapi
Примеры PyEZ
Нейтральные к производителю библиотеки
Выводы
Глава 4. Инфраструктура автоматизации Python - основы Ansible
Быстрый пример Ansible
Установка управляющего узла
Ваш первый плейбук Ansible
Авторизация общедоступного ключа
Файл учёта ресурсов
Наш первый плейбук
Преимущества Ansible
Отсутствие агента
Идемпотентность
Простота и расширяемость
Поддержка производителями
Архитектура Ansible
YAML
Учёт ресурсов
Переменные
Шаблоны Jinja2
Сетевые модули Ansible
Локальные соединения и факты
Параметры provider
Пример Cisco Ansible
Пример Juniper Ansible
Пример Arista Ansible
Выводы
Глава 5. Инфраструктура автоматизации Python - дополнительные вопросы Ansible
Условные зависимости Ansible
Оператор when
Условные зависимости сетевого модуля
Циклы Ansible
Стандартные циклы
Циклы по словарям
Шаблоны
Шаблоны Jinja2
Циклы Jinja2
Условные зависимости Jinja2
Группы и переменные хостов
Переменные групп
Переменные хостов
Кладовая Ansible
Включения и роли Ansible
Оператор включения
Роли Ansible
Написание вашего собственного пользовательского модуля
Самый первый пользовательский модуль
Второй пользовательский модуль
Выводы
Глава 6. Сетевая безопасность с помощью Python
Установка лаборатории
Python Scapy
Установка Scapy
Примеры взаимодействия
Снифинг
Сканирование порта TCP
Сборка ping
Обычные атаки
Ресурсы Scapy
Списки доступа
Реализация списков доступа при помощи Ansible
Списки доступа MAC
Поиск в системных журналах
Поиск при помощи регулярных выражений
Прочие инструменты
Частные VLAN
UFW через Python
Выводы
Глава 7. Мониторинг сетей при помощи Python - Часть 1
Установка лаборатории
SNMP
Установка
PySNMP
Визуализация Python
Matplotlib
Установка
Первый пример Matplotlib
Результаты Matplotlib для SNMP
Дополнительные ресурсы Matplotlib
Pygal
Установка
Первый пример Pygal
Результаты Pygal для SNMP
Дополнительные ресурсы Pygal
Python для Cacti
Установка
Сценарий Python как источник входных данных
Выводы
Глава 8. Мониторинг сетей при помощи Python - Часть 2
Graphviz
Установка лаборатории
Установка
Примеры Graphviz
Python в примерах Graphviz
Отображение LLDP соседей
Получение информации
Сценарий Python синтаксического анализа
Окончательный плейбук
Основанный на потоках мониторинг
Синтаксический анализ NetFlow при помощи Python
Сокет и структура Python
Мониторинг обмена ntop
Расширение Python для ntop
sFlow
SFlowtool и sFlow-RT с применением Python
Elasticsearch (стек ELK)
Установка хостинга службы ELK
Формат logstash
Вспомогательный сценарий Python для форматирования logstash
Выводы
Глава 9. Построение сетевых веб служб с применением Python
Сравнение веб инфраструктур Python
Flask и установка лаборатории
Введение в Flask
Клиент HTTPie
Маршрутизация URL
Переменные URL
Генерация URL
Возврат jsonify
API статического содержимого
Flask-SQLAlchemy
API содержимого сети
API устройств
API идентификаторов устройств
Возврат jsonify
API динамического содержимого
Асинхронные операции
Безопасность
Дополнительные ресурсы
Выводы
Глава 10. Основы OpenFlow
Установка лаборатории
Введение в OpenFlow
Основные операции
Сопоставление OpenFlow 1.0 и 1.3
Mininet
Контроллер Ryu при помощи Python
Команды Open vSwitch
Приложение межсетевого экрана Ryu
Коммутатор OpenFlow 2 уровня
Планирование вашего приложения
Компоненты приложения
Контроллер POX
Выводы
Глава 11. Дополнительные темы OpenFlow
Установка
Работа с OpenFlow при помощи Riu
Изучение пакета
Статический маршрутизатор
Топология Mininet
Код контроллера Riu
Установка потока Riu
Создание пакета Riu
Конечный результат
Маршрутизатор с API
Kонтроллер Riu с API
Примеры использования API
Маршрутизатор BGP при помощи OpenFlow
Установка исследуемого маршрутизатора
Python с библиотекой диктора BGP
Приложение Ryu BGP
Межсетевой экран при помощи OpenFlow
Выводы
Глава 12. OpenStack, OpenDaylight и NFV
OpenStack
Обзор OpenStack
Сетевая среда OpenStack
Попробуйте OpenStack
OpenDaylight
Обзор программирования OpenDaylight
Пример OpenDaylight
Попробуйте OpenStack
Выводы
Глава 13. Гибридные SDN
Подготовка сетевой среды
Ваше знакомство с имеющимися инфраструктурами и инструментами
Стандартизация сетевой среды
Создание минимально жизнеспособных продуктов
Непреклонное экспериментирование
Развёртывание Grenfield
Резервный контроллер
Пример со множественным контроллером
Пример миграции BGP
Сегментация миграции
Установка VIRL и Mininet
Настройка устройства Cisco
Диктор Ryu BGP
Mininet и маршрутизатор REST
Результат и проверка
Ещё пример BGP
Опрос JSONRPC поверх WebSocket
Интеграция мониторинга
Безопасное соединение TLS
Выбор физического коммутатора
Лаборатория коммутаторов OpenFlow
Имеющиеся на рынке коммутаторы
Коммутаторы Whitebox
Выводы
Указатель

 Предисловие

.

 Что охватывает эта книга

Глава 1. Обзор комплекта протокола TCP/IP и языка Python

Глава 2. Взаимодействие с сетевым устройством на нижнем уровне

Глава 3. Работа с сетями через API и для достижения целей

Глава 4. Инфраструктура автоматизации Python - основы Ansible

Глава 5. Инфраструктура автоматизации Python - дополнительные вопросы Ansible

Глава 6. Сетевая безопасность посредством Python

Глава 7. Мониторинг сетей при помощи Python - Часть 1

Глава 8. Мониторинг сетей при помощи Python - Часть 2

Глава 9. Построение сетевых веб служб с применением Python

Глава 10. Основы OpenFlow

Глава 11. Дополнительные темы OpenFlow

Глава 12. OpenStack, OpenDaylight и NFV

Глава 13. Гибридные SDN

 Что вам нужно для этой книги

Чтобы следовать всем предоставляемым этой книгой примерам, вам понадобится доступ к вычислительной платформе, способной исполнять Ansible. В настоящее время Ansible может работать на любой машине с установленным на ней Python 2.6 или 2.7 (Windows не поддерживается в качестве управляющей машины). Это включает в себя Red Hat, Debian, CentOS, OS X, любые из BSD и тому подобное.

Данная книга применяет выпуск Ansible 2.2.x.x.

Инструкции по установке Ansible можно найти на http://docs.ansible.com/ansible/intro_installation.html.

Некоторые примеры использования Docker, инструкции по установке Docker версии 1.12.6 могут быть найдены на http://www.docker.com/community-edition.

 Для кого эта книга

Эта книга предназначена разработчикам и операторам Ansible, которые имеют представление об основных элементах и приложениях, но в настоящее время в поиске расширения своих познаний относительно применения автоматизации с помощью Ansible.

 Соглашения

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

Кодовые слова в тексте, имена таблиц базы данных, имена папок, имена файлов, расширения файлов, имена путей, модели URL-адресов, ввод пользователя, и регулировки Twitter представлены следующим образом: "Мы применим это в некотором операторе failed_when.

Блок кода записываются следующим образом:


- name: query sessions
  command: /sbin/iscsiadm –m session
  register: sessions
  failed_when: sessions.rc not in (0, 21) 	   

Когда мы хотим привлечь ваше внимание к некоторой определённой части блока кода, соответствующие строки и элементы выделяются жирным шрифтом:

Любой ввод и вывод командной строки записываются так:


$ source ./hacking/env-setup
       

Новые термины и важные слова отображаются жирным шрифтом. Слова, которые вы видите на экране, например, в меню или блоках диалогов появляются в тексте следующим образом: "Переместитесь в Networking support | Networking options | 802.1d Ethernet Bridging и выберите либо Y для компиляции всей функциональности моста в данном ядре, либо M для компиляции его в виде отдельного модуля."

[Замечание]Замечание

Предостережения или важные замечания появляются в блоках подобных этому.

[Предостережение]Предостережение

.

[Совет]Совет

Советы и ловкие приёмы возникают таким образом.

 Обратная связь с читателями

Обращения наших читателей всегда приветствуются. Дайте нам знать что вы думаете об этой книге - что вам нравится или не нравится. Обратная связь с читателями важна нам, так как помогает нам разрабатывать издания, от которых вы на самом деле получите максимальную пользу.

Для отправки обычного отклика просто пошлите электронное письмо на адрес feedback@packtpub.com с упоминанием заголовка книги в теме вашего сообщения.

Если у вас существует тема, в которой у вас имеется опыт и вы заинтересованы либо в написании, либо во вкладе в книгу, обратитесь к руководству по адресу www.packtpub.com/authors.

 Поддержка пользователей

Теперь, когда вы являетесь гордым владельцем книги Packt, у нас есть целый ряд моментов для помощи вам в получении максимальной выгоды от вашей покупки.

 Загрузка примеров кода

Вы можете загрузить файлы примеров кода по адресу из своей учётной записи: http://www.packtpub.com. Если вы приобрели книгу где- либо ещё, вы можете посетить http://www.packtpub.com/support и зарегистрироваться для получения этих файлов по электронной почте непосредственно на свой адрес.

Вы можете загрузить эти файлы с кодом выполнив следующие шаги:

  1. Зарегистрируйтесь на нашем вебсайте при помощи своего адреса электронной почты и пароля.

  2. Переместите указатель мыши на закладку SUPPORT в верхней части.

  3. Кликните по Code Downloads & Errata.

  4. Введите название книги в блок Search.

  5. Выберите книгу для которой вы ищете для загрузки файлы исходного кода.

  6. В ниспадающем меню выберите где вы приобрели эту книгу.

  7. Кликните по Code Download.

Вы также можете загрузить фалы кодов кликнув по кнопке Code Files вебстраницы на вебсайте Packt Publishing. Доступ к данной странице может быть получен путём ввода названия книги в блоке Search. Отметим, что вы должны быть зарегистрированы со своеЙ учётной записью Packt.

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

  1. WinRAR / 7-Zip для Windows

  2. Zipeg / iZip / UnRarX для Mac

  3. 7-Zip / PeaZip для Linux

Пакет с кодом для данной книги также размещён на GitHub по адресу https://github.com/PacktPublishing/Mastering-Python-Networking. У нас также имеются прочие наборы из нашего богатого каталога книг и видео доступные на https://github.com/PacktPublishing/. Следите за ними!

 Загрузка цветных изображений данной книги

Также мы снабжаем вас неким PDF файлом, который имеет цветные изображения применяемых в данной книге снимков экрана/ схем. Эти цветные изображения помогут вам лучше понять все изменения в имеющемся выводе. Вы можете загрузить этот файл с https://www.packtpub.com/sites/default/files/downloads/MasteringPythonNetworking_ColorImages.pdf.

 Опечатки

Хотя мы и предприняли все меры чтобы обеспечить точность нашего содержимого, ошибки всё- таки возможны. Если вы обнаружили ошибку в нашей книге - возможно, ошибку в тексте или в коде - мы будем признательны если вы сообщите об этом нам. Сделав это, вы можете предостеречь остальных читателей от разочарования и помочь нам улучшить последующие версии данной книги. Если вы обнаружили ошибку, пожалуйста, сообщите о ней посетив www.packtpub.com/submit-errata, выбрав вашу книгу, кликнув на ссылку Errata Submission Form, и заполнив подробности найденной вами ошибки. Когда ваша ошибка будет проверена, вы получите уведомление и ошибка будет выложена на наш веб- сайт или добавлена в какой- нибудь перечень существующих ошибок с заголовком раздела Errata.

Для просмотра ранее выявленных ошибок посетите www.packtpub.com/books/content/support и введите название нужной книги в поле поиска. Необходимая информация появится в разделе Errata.

 Незаконное тиражирование

Пиратство, защищённых авторским правом материалов в Интернете является постоянной проблемой во всех средствах массовой информации. В Packt мы подходим к защите наших авторских прав и лицензий очень серьёзно. Если вы столкнётесь с какой-либо незаконной копией наших работ в любой форме в Интернете, пожалуйста, предоставьте нам сразу адрес местонахождения или имя веб-сайта, чтобы мы могли принять меры. {Прим. пер.: Согласно закону об авторском праве РФ, авторские права на перевод принадлежат авторам этого перевода. Данным переводом, по нашему мнению, мы служим популяризации основных стратегических направлений развития тем Packt. В случае наличия конструктивных предложений, готовы к тесному сотрудничеству.}

Пожалуйста, обратитесь по адресу copyright@packtpub.com со ссылкой на материалы содержащие признаки нарушения авторских прав.

Мы выражаем вам признательность в защите наших авторов и нашей возможности доносить до вас имеющего ценность содержимого.

 Вопросы

Если у вас есть проблемы по любым сторонам данной книги, вы можете контактировать с нами по адресу questions@packtpub.com и мы предпримем все меры в отношении ваших проблем.