справочник по Python. мм isbn 9785932861578 9 785932 861578
Скачать 4.21 Mb.
|
getnameinfo(address, flags) Преобразует адрес address сокета в кортеж (host, port), с учетом значения ар- гумента flags. В аргументе address передается кортеж, определяющий адрес, например: (‘www.python.org’,80). В аргументе flags передается битная маска, составленная из следующих флагов с помощью битовой операции ИЛИ: Константа Описание NI_NOFQDN Не использовать полностью квалифицированное имя для локального хоста. NI_NUMERICHOST Вернуть адрес в числовой форме. NI_NAMEREQD Требуется имя хоста. Возвращает признак ошибки, если для адреса address отсутствует запись DNS. NI_NUMERICSERV В поле port возвращается строка с номером порта. NI_DGRAM Указывает, что следует вернуть номер порта службы, поддер- живающей протокол UDP, а не TCP (по умолчанию). Основное назначение этой функции состоит в том, чтобы предоставить воз- можность получения дополнительной информации об адресе. Например: >>> getnameinfo((‘194.109.137.226’,80),0) (‘fang.python.org’, ‘http’) >>> getnameinfo((‘194.109.137.226’,80),NI_NUMERICSERV) (‘fang.python.org’,’80’) getprotobyname(protocolname) Преобразует имя протокола (такое как ‘icmp’) в номер протокола (такой как значение IPPROTO_ICMP), который можно будет передать функции socket() в третьем аргументе. Возбуждает исключение socket.error, если имя про- токола не удается опознать. Обычно эта функция используется только для простых (raw) сокетов. Модуль socket 593 getservbyname(servicename [, protocolname]) Преобразует имя сетевой службы и имя протокола в номер порта этой службы. Например, вызов getservbyname(‘ftp’, ‘tcp’) вернет число 21. В не- обязательном аргументе protocolname допускается передавать либо значение ‘tcp’ , либо ‘udp’. Возбуждает исключение socket.error, если имя servicename не соответствует ни одной известной службе. getservbyport(port [, protocolname]) Выполняет операцию, обратную функции getservbyname(). По номеру порта в аргументе port эта функция возвращает строку с именем службы, если таковая определена. Например, вызов getservbyport(21, ‘tcp’) вернет стро- вернет стро- стро- стро- ку ‘ftp’. В необязательном аргументе protocolname допускается передавать либо значение ‘tcp’, либо ‘udp’. Возбуждает исключение socket.error, если для указанного номера порта нет определенного имени службы. has_ipv6 Логическая константа, которая принимает значение True, если система поддерживает протокол IPv6. htonl(x) Преобразует 32-битные целые числа с аппаратным порядком следования байтов в 32-битные целые числа с сетевым порядком следования байтов (прямой порядок, или big-endian). htons(x) Преобразует 16-битные целые числа с аппаратным порядком следования байтов в 16-битные целые числа с сетевым порядком следования байтов (прямой порядок, или big-endian). inet_aton(ip_string) Преобразует адреса IPv4, представленные в виде строки (например, ‘135.128.11.209’ ), в 32-битный упакованный двоичный формат для последую- щего использования в качестве 32-битового двоичного адреса. Возвращает строку из четырех двоичных байтов. Может использоваться для передачи адресов функциям, написанным на языке C, или когда требуется упако- C, или когда требуется упако- , или когда требуется упако- вать данные в структуру для последующей передачи другим программам. Не поддерживает адреса IPv6. inet_ntoa(packedip) Преобразует адрес IPv4 в двоичном упакованном формате в строку, с иcпользованием привычной точечной нотации (например, ‘135.128.11.209’). В аргументе packedip передается строка из четырех байтов, содержащая 32-битный двоичный IP-адрес. Эта функция может использоваться, когда адрес возвращается функцией, написанной на языке C, или при распако- C, или при распако- , или при распако- вывании структур с данными. Не поддерживает адреса IPv6. inet_ntop(address_family, packed_ip) Преобразует IP-адрес packed_ip в двоичном упакованном формате в стро- ку, такую как ‘123.45.67.89’. Аргумент address_family определяет семейство адресов и обычно в нем передается значение AF_INET или AF_INET6. Может 594 Глава 21. Работа с сетью и сокеты использоваться для получения строки с сетевым адресом из последователь- ности двоичных байтов (например, из содержимого низкоуровневого сете- вого пакета). inet_pton(address_family, ip_string) Преобразует IP-адреса, такие как ‘123.45.67.89’, в строку упакованных байтов. Аргумент address_family определяет семейство адресов, и обычно в нем пере- дается значение AF_INET или AF_INET6. Эта функция может использоваться для вставки сетевых адресов в двоичном формате в двоичные пакеты данных. ntohl(x) Преобразует 32-битные целые числа с сетевым порядком следования бай- тов (прямой порядок, или big-endian) в 32-битные целые числа с аппарат- big-endian) в 32-битные целые числа с аппарат- -endian) в 32-битные целые числа с аппарат- endian) в 32-битные целые числа с аппарат- ) в 32-битные целые числа с аппарат- ным порядком следования байтов. ntohs(x) Преобразует 16-битные целые числа с сетевым порядком следования бай- тов (прямой порядок, или big-endian) в 16-битные целые числа с аппарат- big-endian) в 16-битные целые числа с аппарат- -endian) в 16-битные целые числа с аппарат- endian) в 16-битные целые числа с аппарат- ) в 16-битные целые числа с аппарат- ным порядком следования байтов. setdefaulttimeout(timeout) Устанавливает предельное время ожидания для вновь создаваемых объ- ектов сокетов. В аргументе timeout передается число с плавающей точкой, определяющее интервал времени в секундах. Может передаваться значе- ние None, чтобы указать на отсутствие предельного времени ожидания (по умолчанию). socket(family, type [, proto]) По заданным значениям семейства адресов, типа сокета и номера прото- заданным значениям семейства адресов, типа сокета и номера прото- заданным значениям семейства адресов, типа сокета и номера прото- значениям семейства адресов, типа сокета и номера прото- значениям семейства адресов, типа сокета и номера прото- семейства адресов, типа сокета и номера прото- семейства адресов, типа сокета и номера прото- адресов, типа сокета и номера прото- адресов, типа сокета и номера прото- , типа сокета и номера прото- типа сокета и номера прото- сокета и номера прото- сокета и номера прото- и номера прото- и номера прото- номера прото- номера прото- прото- прото- кола создает новый сокет. Аргумент family определяет семейство адресов, а аргумент type – тип сокета, как обсуждалось в первой части этого раз- дела. Для открытия соединения по протоколу TCP можно использовать вызов socket(AF_INET, SOCK_STREAM). Для открытия соединения по протоколу UDP можно использовать вызов socket(AF_INET, SOCK_DGRAM). Возвращает эк- земпляр класса SocketType (описывается ниже). Аргумент с номером протокола, как правило, не передается (и по умолча- нию принимается значение 0). Обычно он используется только при созда- нии простых сокетов (SOCK_RAW) и может принимать значение, зависящее от используемого семейства адресов. Ниже приводится список всех номе- ров протоколов, которые в языке Python могут использоваться совместно с семействами адресов AF_INET и AF_INET6, в зависимости от наличия их под- держки в системе: Константа Описание IPPROTO_AH Заголовок аутентификации в IPv6 IPPROTO_BIP Протокол Banyan VINES (Banyan Virtual Network System, систе- Banyan VINES (Banyan Virtual Network System, систе- VINES (Banyan Virtual Network System, систе- VINES (Banyan Virtual Network System, систе- (Banyan Virtual Network System, систе- Banyan Virtual Network System, систе- Virtual Network System, систе- Virtual Network System, систе- Network System, систе- Network System, систе- System, систе- System, систе- , систе- ма распределенной сети) IPPROTO_DSTOPTS Параметры получателя IPv6 Модуль socket 595 Константа Описание IPPROTO_EGP Протокол внешней маршрутизации (EGP) IPPROTO_EON ISO CNLP (Connectionless Network Protocol, сетевой протокол без создания соединения) IPPROTO_ESP Протокол шифрования данных в IPv6 IPPROTO_ FRAGMENT Заголовок фрагмента в IPv6 IPPROTO_GGP Протокол межсетевого сопряжения (RFC 823) IPPROTO_GRE Общая инкапсуляция маршрутов (RFC 1701) IPPROTO_HELLO Протокол HELLO компании FuzzBall IPPROTO_HOPOPTS Параметры транзитных узлов в IPv6 IPPROTO_ICMP IPv4 ICMP (Internet Control Message Protocol, протокол управляющих сообщений) IPPROTO_ICMPV6 IPv6 ICMP IPPROTO_IDP XNS IDP (Xerox Network Services – Internet Datagram Protocol, сетевые службы Xerox – протокол дейтаграмм Интернета) IPPROTO_IGMP Протокол управления группами IPPROTO_IP IPv4 IPPROTO_IPCOMP Протокол сжатия данных IP IPPROTO_IPIP Туннелирование IP через IP IPPROTO_IPV4 Заголовок IPv4 IPPROTO_IPV6 Заголовок IPv6 IPPROTO_MOBILE Мобильный протокол IP IPPROTO_ND Протокол Netdisk IPPROTO_NONE IPv6, заголовок «нет следующего пакета» (последний пакет в по- 6, заголовок «нет следующего пакета» (последний пакет в по- следовательности) IPPROTO_PIM Протокол независимой групповой передачи IPPROTO_PUP Универсальный протокол передачи пакетов компании Xerox (PARC Universal Packet, PUP) IPPROTO_RAW Низкоуровневый протокол IP IPPROTO_ROUTING Заголовок маршрутизации IPv6 IPPROTO_RSVP Резервирование ресурса IPPROTO_TCP Протокол TCP IPPROTO_TP Транспортный протокол OSI (TP-4) IPPROTO_UDP Протокол UDP IPPROTO_VRRP Протокол резервирования виртуального маршрутизатора IPPROTO_XTP Протокол скоростной передачи 596 Глава 21. Работа с сетью и сокеты Н иже перечислены номера протоколов, используемых совместно с семей- ством адресов AF_BLUETOOTH: Константа Описание BTPROTO_L2CAP Протокол управления логическим каналом с самонастройкой BTPROTO_HCI Интерфейс хост-контроллера BTPROTO_RFCOMM Протокол замены кабеля BTPROTO_SCO Протокол синхронного канала с созданием логического соеди- нения socketpair([family [, type [, proto ]]]) Создает пару объектов сокетов, использующих указанное семейство адре- сов family, тип type и протокол proto. Аргументы имеют тот же смысл, что и в функции socket(). Эта функция может использоваться только для соз- дания сокетов домена UNIX (family=AF_UNIX). Аргумент type может прини- мать только значение SOCK_DGRAM или SOCK_STREAM. Если в аргументе type передается значение SOCK_STREAM, создается объект, известный как канал потока . В аргументе proto обычно передается значение 0 (по умолчанию). В основном эта функция используется для организации канала взаимодей- ствия с процессами, которые создаются функцией os.fork(). Например, ро- дительский процесс может с помощью функции socketpair() создать пару сокетов и вызвать функцию os.fork(). После этого родительский и дочер- ний процесс получают возможность взаимодействовать друг с другом, ис- пользуя эти сокеты. Сокеты в программе представлены экземплярами класса SocketType. Сокет s обладает следующими методами: s.accept() Принимает соединение и возвращает кортеж (conn, address), где в поле conn возвращается новый объект сокета, который может использоваться для приема и передачи данных через соединение, а в поле address возвращается адрес сокета с другой стороны соединения. s.bind(address) Присваивает сокету указанный адрес address. Формат представления адре- са зависит от семейства адресов. В большинстве случаев это кортеж вида ( hostname, port). Для IP-адресов пустая строка представляет INADDR_ANY (лю- бой адрес), а строка ‘ INADDR_BROADCAST . Значение INADDR_ANY (пустая строка) в поле hostname ис- пользуется, чтобы показать, что сервер может принимать соединения на любом сетевом интерфейсе. Это значение часто используется, когда сервер имеет несколько сетевых интерфейсов. Значение INADDR_BROADCAST (‘ ) в поле hostname применяется, когда сокет предполагается использо- вать для рассылки широковещательных сообщений. s.close() Закрывает сокет. Этот метод вызывается также, когда объект сокета ути- сокет. Этот метод вызывается также, когда объект сокета ути- сокет. Этот метод вызывается также, когда объект сокета ути- . Этот метод вызывается также, когда объект сокета ути- Этот метод вызывается также, когда объект сокета ути- лизируется сборщиком мусора. Модуль socket 597 s.connect(address) У станавливает соединение с удаленным узлом, имеющим адрес address. Формат адреса address зависит от семейства, к которому он относится, но обычно в этом аргументе передается кортеж (hostname, port). В случае ошибки возбуждает исключение socket.error. При подключении к серверу, выполняющемуся на том же компьютере, в поле hostname можно передавать имя хоста ‘localhost’. s.connect_ex(address) Устанавливает соединение, как и функция connect(address), но в случае успеха возвращает 0, а в случае ошибки – значение errno. s.fileno() Возвращает файловый дескриптор сокета. s.getpeername() Возвращает адрес удаленного узла, с которым установлено соединение. Обычно возвращает кортеж (ipaddr, port), но вообще формат возвращаемо- го значения зависит от используемого семейства адресов. Этот метод под- держивается не во всех системах. s.getsockname() Возвращает собственный адрес сокета. Обычно возвращаемым значением является кортеж (ipaddr, port). s.getsockopt(level, optname [, buflen]) Возвращает значение параметра сокета. Аргумент level – уровень параме- уровень параме- параме- параме- тра. Для получения параметров уровня сокета в нем передается значение SOL_SOCKET , а для получения параметров уровня протокола – номер прото- кола, такой как IPPROTO_IP. Аргумент optname определяет имя параметра. Если аргумент buflen отсутствует, предполагается, что параметр имеет целочисленное значение, которое и возвращается методом. Если аргумент buflen указан, он определяет максимальный размер буфера, куда долж- но быть записано значение параметра. Этот буфер возвращается методом в виде строки байтов. Интерпретация содержимого буфера с помощью мо- дуля struct или других инструментов целиком возлагается на вызываю- щую программу. В следующей таблице перечислены параметры сокета, поддерживаемые в языке Python. Большая часть этих параметров относится к расширен- Python. Большая часть этих параметров относится к расширен- . Большая часть этих параметров относится к расширен- ному API сокетов и содержит низкоуровневую информацию о сети. Более подробное описание параметров можно найти в документации и в специ- ализированной литературе. Имена типов, встречающиеся в столбце «Зна- чение», соответствуют стандартным типам языка C, ассоциированным со значением и используемым в стандартном программном интерфейсе соке- тов. Не все параметры поддерживаются в каждой из систем. Ниже перечислены наиболее часто используемые имена параметров уров- ня SOL_SOCKET: 598 Глава 21. Работа с сетью и сокеты Имя параметра Значение Описание SO_ACCEPTCONN 0, 1 Разрешает или запрещает прием соединения. SO_BROADCAST 0, 1 Разрешает или запрещает передачу широкове- щательных сообщений. SO_DEBUG 0, 1 Разрешает или запрещает запись отладочной информации. SO_DONTROUTE 0, 1 Разрешает или запрещает передавать сообще- ния в обход таблицы маршрутизации. SO_ERROR int Возвращает признак ошибки. SO_EXCLUSIVEADDRUSE 0, 1 Разрешает или запрещает возможность при- сваивания того же адреса и порта другому со- кету. Этот параметр отключает действие пара- параметр отключает действие пара- параметр отключает действие пара- отключает действие пара- отключает действие пара- действие пара- действие пара- пара- пара- метра SO_REUSEADDR. SO_KEEPALIVE 0, 1 Разрешает или запрещает периодическую передачу служебных сообщений другой сторо- не, для поддержания соединения в активном состоянии. SO_LINGER linger Откладывает вызов метода close(), если в бу- если в бу- в бу- в бу- бу- бу- фере передачи имеются данные. Значение типа linger представляет собой упакованную двоич- ную строку, содержащую два 32-битных целых числа ( onoff , seconds ) SO_OOBINLINE 0, 1 Разрешает или запрещает добавление внеоче- редных сообщений во входной поток. SO_RCVBUF int Размер приемного буфера (в байтах). SO_RCVLOWAT int Определяет минимальное количество байтов, которые должны быть прочитаны, прежде чем функция select() будет интерпретировать со- кет, как доступный для чтения. SO_RCVTIMEO timeval Максимальное время ожидания в секундах при приеме данных. Значение timeval пред- ставляет собой упакованную двоичную строку, содержащую два 32-битных целых числа без знака (seconds, microseconds) SO_REUSEADDR 0, 1 Разрешает или запрещает повторное использо- вание локальных адресов. SO_REUSEPORT 0, 1 Разрешает или запрещает нескольким процес- сам присваивать сокетам один и тот же адрес, при условии, что этот параметр установлен в значение 1 во всех процессах. SO_SNDBUF int Размер передающего буфера (в байтах). SO_SNDLOWAT int Определяет, какое количество байтов должно остаться в передающем буфере, прежде чем функция select() будет интерпретировать со- кет, как доступный для записи. |