Книга рецептов сетевого программирования Python, 2е изд.
Copyright © 2017 Packt Publishing
|
Данный документ предоставляется по лицензии Creative Commons Attribution 3.0 License, за исключением разделов со специальными оговорками. |
Первая публикация на английском языке: Март 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
2017-08-14
- Авторы
- Прейдибэн Катхирейвелу
- др. М.О. Фарук Саркер
- Рецензенты
- др. С. Гоуришанкар
- Майкл Брайт
- Редактор выпуска
- Катрикей Пандей
- Редактор комплектования
- Рахуль Наир
- Редактор разработки содержания
- Абхишек Джадхав
- Технический редактор
- Мохд Рийан Хан
- Литературные редакторы
- Safis Editing
- Джулиана Нейр
- Координатор проекта
- Джуди Джоуз
- Корректор
- Safis Editing
- Составитель указателя
- Аишвария Гангавейн
- Графика
- Кирк Д'Пенья
- Координатор производства
- Апарна Бхагат
Прейдибэн Катхирейвелу
др. М.О. Фарук Саркер
- Предисловие
- Глава 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
- Глава 8. Мониторинг сети и безопасность
- Введение
- Сниффинг пакетов в вашей сетевой среде
- Сохранение пакетов в формате pcap с применением дампера pcap
- Добавление дополнительного заголовка в пакеты HTTP
- Сканирование портов удалённого хоста
- Персонализация IP адреса пакета
- Воспроизведение обмена считыванием сохранённого файла pcap
- Широковещательное сканирование пакетов
- Глава 9. Моделирование сетевой среды
- Глава 10. Начинаем работу с SDN
- Введение
- Эмуляция SDN посредством Mininet
- Разработка Программно определяемых сетей с помощью контроллера OpenDaylight
- Разработка Программно определяемых сетей с помощью контроллера ONOS
- Разработка Программно определяемых сетей с помощью контроллера Floodlight
- Разработка Программно определяемых сетей с помощью контроллера Ryu
- Разработка Программно определяемых сетей с помощью контроллера POX
- Визуальная разработка Программно определяемых сетей с помощью MiniEdit
- Глава 11. Аутентификация, авторизация и акаунтинг (ААА)
- Введение
- Определение DNS имён сетевой среды
- Определение информации DNS хоста
- Определение записей ресурса DNS
- Создание зоны обмена DNS
- Опрос серверов NTP
- Соединение с сервером LDAP
- Выполнение привязки к LDAP
- Считывание LDAP и запись в него
- REST API аутентификация при помощи Eve
- Дросселирование запросов посредством RequestsThrottler
- Глава 12. Открытые и частные сетевые решения
- Глава 13. NFV и координация - большие экосистемы
- Глава 14. Программирование Интернета
- Указатель
.
Глава 1. Сокеты, IPv4 и примеры программирования клиент/ сервер
Глава 2. Ввод/ вывод мультиплексированных для улучшения производительности сокетов
Глава 3. IPv6, сокеты домена Unix и сетевые интерфейсы
Глава 4. Программирование HTTP для всемирного Интернета
Глава 5. Протоколы электронной почты, FTP и CGI программирование
Глава 6. Программирование за границами машины
Глава 7. Работа с веб службами - XML-RPC, SOAP и REST
Глава 8. Мониторинг сети и безопасность
Глава 9. Моделирование сетевой среды
Глава 10. Начинаем работу с SDN
Глава 11. Аутентификация, авторизация и акаунтинг (ААА)
Глава 12. Открытые и частные сетевые решения
Вам необходимо иметь некий работающий ПК или ноутбук, причём предпочтительно с современной операционной системой 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 выгрузки:
-
netifaces
: https://pypi.python.org/pypi/netifaces/ -
netaddr
: https://pypi.python.org/pypi/netaddr -
pyopenssl
: https://pypi.python.org/pypi/pyOpenSSL -
pygeocoder
: https://pypi.python.org/pypi/pygocoder -
requests
: https://pypi.python.org/pypi/requests -
feedparser
: https://pypi.python.org/pypi/feedparser -
paramiko
: https://pypi.python.org/pypi/paramiko/ -
supervisor
: https://pypi.python.org/pypi/supervisor -
xmlrpclib
: https://pypi.python.org/pypi/xmlrpclib -
bottlenose
: https://pypi.python.org/pypi/bottlenose -
construct
: https://pypi.python.org/pypi/construct/ -
libpcap
: https://pypi.python.org/pypi/pcap -
setup tools
: https://pypi.python.org/pypi/setuptools -
traixroute
: https://pypi.python.org/pypi/traixroute -
dronekit
: https://pypi.python.org/pypi/dronekit -
dronekit-sitl
: https://pypi.python.org/simple/dronekit-sitl/ -
twisted
: https://pypi.python.org/pypi/Twisted -
tornado
: https://pypi.python.org/pypi/tornado -
dnspython
: https://pypi.python.org/pypi/dnspython -
RequestsThrottler
: https://pypi.python.org/pypi/RequestsThrottler -
vmware-nsx
: https://pypi.python.org/pypi/vmware-nsx
Прочее необходимое программное обеспечение для выполнения некоторых рецептов таково:
-
postfix
: http://www.postfix.org/ -
openssh server
: http://www.openssh.com/ -
mysql server
: http://downloads.mysql.com/ -
virtualenv
: https://virtualenv.pypa.io/ -
filezilla
: https://filezilla-project.org/ -
telnetd
: telnetd.sourceforge.net/ -
curl
: https://curl.haxx.se/ -
Mininet
: mininet.org/ -
Ansible
: https://www.ansible.com/ -
Git
: https://git-scm.com/ -
aptitude
: https://www.openhub.net/p/aptitude -
Node-ws / wscat
: https://www.npmjs.com/package/wscat -
MaxiNet
: https://github.com/MaxiNet/MaxiNet/ -
Mininet-WiFi
: https://github.com/intrig-unicamp/mininet-wifi -
ContainerNet
: https://github.com/containernet/containernet.git -
Ant
: ant.apache.org/ -
Maven
: https://maven.apache.org/ -
OpenDaylight
: https://www.opendaylight.org/downloads -
Floodlight
: http://www.projectfloodlight.org/download/ -
libnl-3-dev
: https://packages.debian.org/sid/libnl-3-dev -
libnl-genl-3-dev
: https://packages.debian.org/sid/libnl-genl-3-dev -
libnl-route-3-dev
: https://packages.debian.org/sid/libnl-route-3-dev -
pkg-config
: https://www.freedesktop.org/wiki/Software/pkg-config/ -
python-tz
: pytz.sourceforge.net/ -
libpcap-dev
: https://packages.debian.org/libpcap-dev -
libcap2-dev
: https://packages.debian.org/jessie/libcap2-dev -
wireshark
: https://www.wireshark.org/ -
Juniper Contrail
: http://www.juniper.net/support/downloads/?p=contrail#sw -
OpenContrail Controller
: https://github.com/Juniper/contrail-controller -
Contrail Server Manager
: https://github.com/Juniper/contrail-server-manager.git -
VMWare NSX for vSphere 6.3.2
: https://my.vmware.com/group/vmware/details?downloadGroup=NSXV_632_OSS&productId=417 -
OPNFV Compass
: https://wiki.opnfv.org/display/compass4nfv/Compass4nfv -
OPNFV SDNVPN
: https://wiki.opnfv.org/display/sdnvpn/SDNVPN+project+main+page -
libpcap-dev
: https://packages.debian.org/libpcap-dev -
DPDK
: http://dpdk.org/download -
SNAS.io
: http://www.snas.io/ -
pnda.io
: http://pnda.io/ -
swig
: www.swig.org/ -
Virtualbox
: https://www.virtualbox.org/wiki/VirtualBox -
Vagrant
: https://www.vagrantup.com/ -
RED PNDA
: https://github.com/pndaproject/red-pnda -
Apache ZooKeeper
: https://zookeeper.apache.org/ -
Apache Cassandra
: http://cassandra.apache.org/ -
RabbitMQ
: https://www.rabbitmq.com/ -
pyIOSXR
: https://github.com/fooelisa/pyiosxr -
Cisco Spark API
: https://github.com/CiscoDevNet/ciscosparkapi
Если вы сетевой программист, системный/ сетевой администратор или разработчик веб приложений, эта книга идеальна для вас. Вам необходимо иметь основы знакомства с программным языком 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 и зарегистрироваться для получения этих файлов по электронной почте непосредственно на свой адрес.
Вы можете загрузить эти файлы с кодом выполнив следующие шаги:
-
Зарегистрируйтесь на нашем вебсайте при помощи своего адреса электронной почты и пароля.
-
Переместите указатель мыши на закладку SUPPORT в верхней части.
-
Кликните по Code Downloads & Errata.
-
Введите название книги в блок Search.
-
Выберите книгу для которой вы ищете для загрузки файлы исходного кода.
-
В ниспадающем меню выберите где вы приобрели эту книгу.
-
Кликните по Code Download.
Вы также можете загрузить фалы кодов кликнув по кнопке Code Files вебстраницы на вебсайте Packt Publishing. Доступ к данной странице может быть получен путём ввода названия книги в блоке Search. Отметим, что вы должны быть зарегистрированы со своеЙ учётной записью Packt.
После загрузки убедитесь, пожалуйста, что вы раззиповали или раскрыли эту папку при помощи самой последней версии:
-
WinRAR / 7-Zip для Windows
-
Zipeg / iZip / UnRarX для Mac
-
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 и мы предпримем все меры в отношении ваших проблем.