, Книга рецептов сетевого программирования Python, 2е изд.

Книга рецептов сетевого программирования Python, 2е изд.

Прейдибэн Катхирейвелу

др. М.О. Фарук Саркер

 

Первая публикация на английском языке: Март 2014

Второе издание на английском языке: Август 2017

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

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

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

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

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

Livery Place

35 Livery Street

Birmingham B3 2PB, UK

ISBN-13 978-1-78646-399-9

www.packtpub.com

2017-08-14

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

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

 Об авторах

Прейдибэн Катхирейвелу

др. М.О. Фарук Саркер

 Рецензенты

др. С. Гоуришанкар .

Майкл Брайт .

 www.PacktPub.com

 Содержание

Предисловие
Что охватывает эта книга
Что вам нужно для этой книги
Для кого эта книга
Соглашения
Обратная связь с читателями
Поддержка пользователей
Загрузка кодов примеров
Опечатки
Незаконное тиражирование
Вопросы
Глава 1. Сокеты, IPv4 и примеры программирования клиент/ сервер
Введение
Вывод названия вашей машины и её IPv4 адреса
Приготовление
Как это сделать
Как это работает
Получение IP адреса удалённой машины
Как это сделать
Как это работает
Преобразование IP адреса в различные форматы
Как это сделать
Как это работает
Поиск названия службы, приданных ей порта и протокола
Приготовление
Как это сделать
Как это работает
Преобразование целых в- и из- сетевого порядка передачи байт хоста
Как это сделать
Как это работает
Установка и получение значения таймаута сокета по умолчанию
Как это сделать
Как это работает
Надлежащая обработка ошибок сокета
Как это сделать
Как это работает
Изменение размеров буферов приёма/ отправки сокета
Как это сделать
Как это работает
Изменение режима сокета в блокируемое/ неблокируемое состояние
Как это сделать
Как это работает
Повторное использование адресов сокета
Как это сделать
Как это работает
Вывод текущего времени из сервера времени Интернет
Приготовление
Как это сделать
Как это работает
Написание клиента SNTP
Как это сделать
Как это работает
Написание простого приложения клиент/ сервер echo TCP
Как это сделать
Как это работает
Написание простого приложения клиент/ сервер echo UDP
Как это сделать
Как это работает
Глава 2. Ввод/ вывод мультиплексированных для улучшения производительности сокетов
Введение
Применение ForkingMixIn в ваших приложениях сервера сокета
Как это сделать
Как это работает
Применение ThreadingMixIn в ваших приложениях сервера сокета
Приготовление
Как это сделать
Как это работает
Написание сервера чата с помощью select.select
Как это сделать
Как это работает
Мультиплексирование веб сервера с помощью select.epoll
Как это сделать
Как это работает
Мультиплексирование сервера echo с помощью библиотеки Diesel concurrent
Приготовление
Как это сделать
Как это работает
Глава 3. IPv6, сокеты домена Unix и сетевые интерфейсы
Введение
Проброс некоторого локального порта в удалённый хост
Как это сделать
Как это работает
Ping хостов в сетевой среде при помощи ICMP
Приготовление
Как это сделать
Как это работает
Ожидание удалённой сетевой службы
Как это сделать
Как это работает
Нумерация интерфейсов в вашей машине
Приготовление
Как это сделать
Как это работает
Поиск IP адреса для определённого интерфейса в вашей машине
Приготовление
Как это сделать
Как это работает
Определение того, поднят ли интерфейс в вашей машине
Приготовление
Как это сделать
Как это работает
Определение бездействующих машин в вашей сети
Приготовление
Как это сделать
Как это работает
Осуществление базового IPC при помощи соединённых сокетов (socketpair)
Приготовление
Как это сделать
Как это работает
Выполнение IPC при помощи сокетов домена Unix
Как это сделать
Как это работает
Определение того, поддерживает ли ваш Python сокеты IPv6
Как это сделать
Как это работает
Выделение префикса IPv6 из адреса IPv6
Как это сделать
Как это работает
Написание клиент/ сервер echo IPv6
Как это сделать
Как это работает
Глава 4. Программирование HTTP для всемирного Интернета
Введение
Выгрузка данных с сервера HTTP
Как это сделать
Как это работает
Выделение информации cookie после посещения вебсайта
Как это сделать
Как это работает
Подстановка веб форм
Приготовление
Как это сделать
Как это работает
Отправка веб запросов через сервер proxy
Приготовление
Как это сделать
Как это работает
Проверка наличия веб страницы с помощью запроса HEAD
Как это сделать
Как это работает
Дезинформирование Mozilla Firefoxв вашем коде клиента
Как это сделать
Как это работает
Сбережение полосы пропускания в веб запросах с помощью сжатия HTTP
Как это сделать
Как это работает
Написание отказоустойчивого клиента HTTP с повторами и частичной выгрузкой
Как это сделать
Как это работает
Написание простого кода сервера HTTPS с применением Python и OpenSSL
Приготовление
Как это сделать
Как это работает
Построение асинхронных сетевых приложений при помощи Twisted
Приготовление
Как это сделать
Как это работает
Построение асинхронных сетевых приложений при помощи Tornado
Приготовление
Как это сделать
Как это работает
Построение параллельных приложений при помощи Tornado Future
Приготовление
Как это сделать
Как это работает
Глава 5. Протоколы электронной почты, FTP и CGI программирование
Введение
Ожидание файлов в удалённом сервере FTP
Приготовление
Как это сделать
Как это работает
Распространённые ошибки
Загрузка локального файла на удалённый сервер FTP
Приготовление
Как это сделать
Как это работает
Отправка электронной почтой вашего текущего рабочего каталога в виде сжатого файла ZIP
Приготовление
Как это сделать
Как это работает
Выгрузка вашей электронной почты Google с применением POP3
Приготовление
Как это сделать
Как это работает
Проверка вашей удалённой электронной почты с помощью IMAP
Приготовление
Как это сделать
Как это работает
Отправка некоторого электронного почтового сообшения с прикреплением через сервер SMTP Gmail
Приготовление
Как это сделать
Как это работает
Написание книги посещений для вашего (на основе Python) веб сервера с применением CGI
Как это сделать
Как это работает
Отыскание почтового сервера по адресу электронной почты
Приготовление
Как это сделать
Как это работает
Написание примера сервера SMTP
Приготовление
Как это сделать
Как это работает
Написание безопасного клиента SMTP при помощи TLS
Приготовление
Как это сделать
Как это работает
Написание клиента электронной почты при помощи POP3
Приготовление
Как это сделать
Как это работает
Глава 6. Программирование за границами машины
Введение
Выполнение удалённых команд оболочки с помощью telnet
Приготовление
Как это сделать
Как это работает
Копирование файла на удалённую машину с помощью SFTP
Приготовление
Как это сделать
Как это работает
Вывод информации ЦПУ удалённой машины
Приготовление
Как это сделать
Как это работает
Удалённая установка пакета Python
Приготовление
Как это сделать
Как это работает
Удалённое исполнение команд MySQL
Приготовление
Как это сделать
Как это работает
Передача файлов на удалённую машину поверх SSH
Приготовление
Как это сделать
Как это работает
Удалённое настройка Apache для размещения вебсайта
Приготовление
Как это сделать
Как это работает
Глава 7. Работа с веб службами - XML-RPC, SOAP и REST
Введение
Запросы к локальному серверу XML-RPC
Приготовление
Как это сделать
Как это работает
Исполнение сервера XML-RPC с базовой аутентификацией HTTP
Как это сделать
Как это работает
Сбор некоторой фото информации из Flickr с применением REST
Как это сделать
Как это работает
Поиск методов SOAP в веб службе Amazon S3
Приготовление
Как это сделать
Как это работает
Создание веб приложения RESTful с помощью Flask
Как это сделать
Как это работает
Глава 8. Мониторинг сети и безопасность
Введение
Сниффинг пакетов в вашей сетевой среде
Приготовление
Как это сделать
Как это работает
Сохранение пакетов в формате pcap с применением дампера pcap
Как это сделать
Как это работает
Добавление дополнительного заголовка в пакеты HTTP
Как это сделать
Как это работает
Сканирование портов удалённого хоста
Как это сделать
Как это работает
Персонализация IP адреса пакета
Как это сделать
Как это работает
Воспроизведение обмена считыванием сохранённого файла pcap
Как это сделать
Как это работает
Широковещательное сканирование пакетов
Как это сделать
Как это работает
Глава 9. Моделирование сетевой среды
Введение
Эмуляция сетевой среды с помощью ns-3
Приготовление
Как это сделать
Как это работает
Эмуляция сетевой среды с помощью Mininet
Приготовление
Как это сделать
Как это работает
Распределённая сетевая эмуляция посредством MaxiNet
Приготовление
Как это сделать
Как это работает
Эмуляция беспроводныз сетей при помощи Mininet-WiFi
Приготовление
Как это сделать
Как это работает
Расширение Mininet для эмуляции контейнеров
Приготовление
Как это сделать
Как это работает
Глава 10. Начинаем работу с SDN
Введение
Эмуляция SDN посредством Mininet
Приготовление
Как это сделать
Как это работает
Разработка Программно определяемых сетей с помощью контроллера OpenDaylight
Приготовление
Как это сделать
Как это работает
Разработка Программно определяемых сетей с помощью контроллера ONOS
Приготовление
Как это сделать
Как это работает
Разработка Программно определяемых сетей с помощью контроллера Floodlight
Приготовление
Как это сделать
Как это работает
Разработка Программно определяемых сетей с помощью контроллера Ryu
Приготовление
Как это сделать
Как это работает
Разработка Программно определяемых сетей с помощью контроллера POX
Приготовление
Как это сделать
Как это работает
Визуальная разработка Программно определяемых сетей с помощью MiniEdit
Приготовление
Как это сделать
Как это работает
Глава 11. Аутентификация, авторизация и акаунтинг (ААА)
Введение
Определение DNS имён сетевой среды
Приготовление
Как это сделать
Как это работает
Определение информации DNS хоста
Приготовление
Как это сделать
Как это работает
Определение записей ресурса DNS
Приготовление
Как это сделать
Как это работает
Создание зоны обмена DNS
Приготовление
Как это сделать
Как это работает
Опрос серверов NTP
Приготовление
Как это сделать
Как это работает
Соединение с сервером LDAP
Приготовление
Как это сделать
Как это работает
Выполнение привязки к LDAP
Приготовление
Как это сделать
Как это работает
Считывание LDAP и запись в него
Приготовление
Как это сделать
Как это работает
REST API аутентификация при помощи Eve
Приготовление
Как это сделать
Как это работает
Дросселирование запросов посредством RequestsThrottler
Приготовление
Как это сделать
Как это работает
Глава 12. Открытые и частные сетевые решения
Введение
Настройка Red PNDA
Приготовление
Как это сделать
Как это работает
Настройка VMware NSX для vSphere 6.3.2
Приготовление
Как это сделать
Как это работает
Настройка диспетчера сервера Juniper Contrail
Приготовление
Как это сделать
Как это работает
Настройка контроллера OpenContrail
Приготовление
Как это сделать
Как это работает
Настройка кластера OpenContrail
Как это сделать
Как это работает
Взаимодействие с устройствами под управлением Cisco IOS XR
Приготовление
Как это сделать
Как это работает
Сотрудничество с Cisco Spark API
Приготовление
Как это сделать
Как это работает
Глава 13. NFV и координация - большие экосистемы
Введение
Построение VNFs с помощью OPNFV
Приготовление
Как это сделать
Как это работает
Обработка пакетов посредством DPDK
Приготовление
Как это сделать
Как это работает
Синтаксический анализ сообщений BMP при помощи SNAS.io
Приготовление
Как это сделать
Как это работает
Управление дронами через беспроводные сети
Приготовление
Как это сделать
Как это работает
Создание кластеров PNDA
Приготовление
Как это сделать
Как это работает
Глава 14. Программирование Интернета
Введение
Проверка состояния вебсайта
Приготовление
Как это сделать
Как это работает
Эталонное тестирование реализации BGP с помощью bgperf
Приготовление
Как это сделать
Как это работает
BGP с ExaBGP
Как это сделать
Как это работает
Просмотр реализации glass при помощи Python
Приготовление
Как это сделать
Как это работает
Понимание экосистемы Интернета посредством Python
Приготовление
Как это сделать
Как это работает
Установка соединений BGP через yabgp
Приготовление
Как это сделать
Как это работает
Указатель

 Предисловие

.

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

Вам необходимо иметь некий работающий ПК или ноутбук, причём предпочтительно с современной операционной системой Linux. Все инструкции по установке написаны и проверены в Ubuntu 16.04 LTS и должны работать во всех современных операционных системах но основе Debian без каких бы то ни было изменений. Мы разрабатывали под Python 3. Однако мы сопровождали обратную совместимость с Python 2 в своих рецептах, насколько это было возможно. С другой стороны, некоторые проекты с открытым исходным кодом, применяемые в данной книге ещё пока не поддерживают Python 3. Поэтому, в идеале, вам необходим и Python 2, и Python 3 для проверки всех рецептов данной книги.

Большая часть приведённых в данной книге рецептов будет работать и на прочих платформах, таких как Windows и Mac OS с некоторыми изменениями в приводимых шагах настройки. Некоторые из приводимых рецептов требуют двух или более компьютеров в некотором кластере для проверки распределённых систем. Вы можете применять веб службы Amazon (AWS, Amazon Web Services) для инициализации некоторого кластера внутри отдельной группы размещения для проверки таких рецептов.

Вам также требуется работающее соединение с Интернет для установки сторонних программных библиотек, упоминаемых в соответствующих рецептах. Если у вас нет устойчивого или непрерывного соединения Интернет, что делает данную задачу настройки минимальной и более интересной, тогда придётся выгрузить кучу программного обеспечения в пакете. Более того, проверка определённого приложения в каком- то кластере AWS непременно потребует связи с Интернетом.

Ниже приводится некий перечень сторонних библиотек Python и их URL выгрузки:

Прочее необходимое программное обеспечение для выполнения некоторых рецептов таково:

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

Если вы сетевой программист, системный/ сетевой администратор или разработчик веб приложений, эта книга идеальна для вас. Вам необходимо иметь основы знакомства с программным языком Python и сетевыми понятиями TCP/IP. Однако, если вы новичок, вы будете разрабатывть и понимать приводимые понятия по мере продвижения по данной книге. Эта книга Эта послужит дополнительным материалом для разработки практических навыков в любом учебном курсе по сетевому программированию.

 Соглашения

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

Кодовые слова в тексте, имена таблиц базы данных, имена папок, имена файлов, расширения файлов, имена путей, модели URL-адресов, ввод пользователя, и регулировки Twitter представлены следующим образом: "Если вам необходимо знать определённый IP адрес какой- то удалённой машины, вы можете воспользоваться имеющейся встроенной функцией gethostbyname().

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


def test_socket_timeout():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print "Default socket timeout: %s" %s.gettimeout()
    s.settimeout(100)
    print "Current socket timeout: %s" %s.gettimeout()
	   

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


$ python 2_5_echo_server_with_diesel.py --port=8800
[2013/04/08 11:48:32] {diesel} WARNING:Starting diesel <hand-rolledselect.epoll>
       

Новые термины и важные слова отображаются жирным шрифтом.

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

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

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

.

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

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

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

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

Для отправки обычного отклика просто пошлите электронное письмо на адрес 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/Python-Network-Programming-Cookbook-Second-Edition. У нас также имеются прочие наборы из нашего богатого каталога книг и видео доступные на https://github.com/PacktPublishing/. Следите за ними!

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

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