Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 258

рая поддерживается Python. Передача сообщений — это одна из самых популярных идей в ра-

боте с сетями, и Python старается соответствовать другим языкам программирования. Проект

Apache, чей веб-сервер вы видели в пункте «Apache» раздела «Веб-сервер» главы 9, также

поддерживает проект ActiveMQ (https://activemq.apache.org/), включающий в себя несколько

интерфейсов Python, использующих простой текстовый протокол STOMP (http://stomp.github.io/

implementations.html). Популярна также библиотека RabbitMQ (http://www.rabbitmq.com/),

вы можете прочесть онлайн-руководство для нее (http://bit.ly/rabbitmq-tut).

Scapy

Иногда вам нужно погрузиться в поток данных, путешествующих по сети. Возмож-

но, вы хотите отладить API для веба или отследить какую-то проблему с безопас-

ностью. Библиотека Scapy — это отличный инструмент для того, чтобы исследовать

332

Глава 11. Конкуренция и сети

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

писанные на языке С. Библиотека является небольшим языком программирования

для создания и анализа пакетов.

Я планировал включить в эту книгу примеры исходного кода, но передумал по

двум причинам.

 Библиотека Scapy еще не была портирована на Python 3. Раньше это нас не оста-

навливало, мы использовали pip2 и python2, но…

 Инструкция по установке библиотеки Scapy (http://bit.ly/scapy-install), по моему

мнению, слишком устрашающая для книги, предназначенной начинающим.

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

ментацией (http://bit.ly/scapy-docs). Они могут вдохновить вас на установку этой

библиотеки.

Наконец, не путайте библиотеки Scapy и Scrapy, последняя была рассмотрена

в подразделе «Поиск и выборка данных» раздела «Веб-сервисы и автоматизация»

главы 9.

Интернет-службы

Python имеет широкий набор инструментов для работы с сетями. В следующих

разделах мы рассмотрим способы автоматизации наиболее популярных интернет-

служб. В сети доступна полная официальная документация (http://bit.ly/py-internet).

Доменная система имен

Компьютеры имеют числовые IP-адреса вроде 85.2.101.94, но имена мы запоминаем

лучше, чем числа. Доменная система имен (Domain Name System, DNS) — это кри-

тически важная интернет-служба, которая преобразует IP-адреса в имена и обратно

с помощью распределенной базы данных. Когда вы используете браузер и внезапно

видите сообщение вроде looking up host, вы, возможно, потеряли соединение с Интер-

нетом, и первым предположением должно стать то, что произошла ошибка DNS.

Некоторые функции DNS можно найти в низкоуровневом модуле socket. Функ-

ция gethostbuname() возвращает IP-адрес доменного имени, а ее расширенная версия

gethostbyname_ex() возвращает имя, список альтернативных имен и список адресов:

>>> import socket

>>> socket.gethostbyname('www.crappytaxidermy.com')

'66.6.44.4'

>>> socket.gethostbyname_ex('www.crappytaxidermy.com')

('crappytaxidermy.com', ['www.crappytaxidermy.com'], ['66.6.44.4'])

Метод getaddrinfo() ищет IP-адрес, но также возвращает достаточное количество

информации для того, чтобы создать сокет, который с ним соединится:

>>> socket.getaddrinfo('www.crappytaxidermy.com', 80)