.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk) .\" and Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk .\" .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" References consulted: .\" Linux libc source code .\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991) .\" 386BSD man pages .\" libc.info (from glibc distribution) .\" Modified Sat Jul 24 19:12:00 1993 by Rik Faith .\" Modified Sun Sep 3 20:29:36 1995 by Jim Van Zandt .\" Changed network into host byte order (for inet_network), .\" Andreas Jaeger , 980130. .\" 2008-06-19, mtk .\" Describe the various address forms supported by inet_aton(). .\" Clarify discussion of inet_lnaof(), inet_netof(), and inet_makeaddr(). .\" Add discussion of Classful Addressing, noting that it is obsolete. .\" Added an EXAMPLE program. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH inet 3 "15 июня 2024 г." "Справочные страницы Linux 6.9.1" .SH НАИМЕНОВАНИЕ inet_aton, inet_addr, inet_network, inet_ntoa, inet_makeaddr, inet_lnaof, inet_netof \- функции для работы с адресами Интернет .SH БИБЛИОТЕКА Стандартная библиотека языка C (\fIlibc\fP, \fI\-lc\fP) .SH ОБЗОР .nf \fB#include \fP \fB#include \fP \fB#include \fP .P \fBint inet_aton(const char *\fP\fIcp\fP\fB, struct in_addr *\fP\fIinp\fP\fB);\fP .P \fBin_addr_t inet_addr(const char *\fP\fIcp\fP\fB);\fP \fBin_addr_t inet_network(const char *\fP\fIcp\fP\fB);\fP .P \fB[[deprecated]] char *inet_ntoa(struct in_addr \fP\fIin\fP\fB);\fP .P \fB[[deprecated]] struct in_addr inet_makeaddr(in_addr_t \fP\fInet\fP\fB,\fP \fB in_addr_t \fP\fIhost\fP\fB);\fP .P \fB[[deprecated]] in_addr_t inet_lnaof(struct in_addr \fP\fIin\fP\fB);\fP \fB[[deprecated]] in_addr_t inet_netof(struct in_addr \fP\fIin\fP\fB);\fP .fi .P .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .P \fBinet_aton\fP(), \fBinet_ntoa\fP(): .nf начиная с glibc 2.19: _DEFAULT_SOURCE в glibc до версии 2.19 включительно: _BSD_SOURCE || _BSD_SOURCE .fi .SH ОПИСАНИЕ \fBinet_aton\fP() преобразует адрес Интернет\-узла \fIcp\fP из числовой формы записи IPv4 с точками (IPv4 numbers\-and\-dots) в двоичную форму (с сетевым порядком байт) и сохраняет её в структуре, на которую ссылается \fIinp\fP. \fBinet_aton\fP() возвращает ненулевое значение, если адрес правильный, и ноль, если нет. Адрес, указанный в \fIcp\fP, может принимать одну из следующих форм: .TP 10 \fIa.b.c.d\fP Каждая из четырёх групп чисел представляет байт адреса; байты назначаются слева направо. .TP \fIa.b.c\fP Части \fIa\fP и \fIb\fP задают первые два байта двоичного адреса. Часть \fIc\fP расценивается как 16\-разрядное значение, определяющее два самых правых байта двоичного адреса. Такая запись совместима c сетевыми адресами (устаревшими) класса B. .TP \fIa.b\fP Часть \fIa\fP определяет первый байт двоичного адреса. Часть \fIb\fP расценивается как 24\-разрядное значение, определяющее три самых правых байта двоичного адреса. Данная форма записи совместима с сетевыми адресами (устаревшими) класса A. .TP \fIa\fP Значение \fIa\fP расценивается как 32\-разрядное значение, которое хранится в двоичном формате без какой либо перегруппировки байтов. .P Во всех вышеперечисленные формах записи адресов числа могут быть указаны в десятичной, восьмеричной (с префиксом \fI0\fP) или шестнадцатеричной (с префиксом \fI0X\fP) системе счисления. Адреса, записанные в любой из этих форм, называются \fIчисловой формой записи IPv4 с точками\fP. Форма записи, в которой используются только четыре десятичных числа, называется \fIдесятично\-точечной записью IPv4\fP (\fIIPv4 dotted\-decimal notation\fP) или иногда \fIIPv4 dotted\-quad notation\fP. .P Функция \fBinet_aton\fP() возвращает 1, если переданная строка была обработана успешно, или 0, если строка имеет некорректные данные (в \fBerrno\fP ошибка \fIне\fP записывается). .P Функция \fBinet_addr\fP() преобразует адрес Интернет\-узла \fIcp\fP из числовой формы записи IPv4 с точками в двоичную форму с сетевым порядком байт. Если адрес, подаваемый на вход, неверный, функция возвращает \fBINADDR_NONE\fP (обычно \-1). Использование этой функции проблематично, т.к. значение \-1 эквивалентно корректному адресу (255.255.255.255). Избегайте использования этой функции, вместо нее используйте \fBinet_aton\fP(), \fBinet_pton\fP(3) или \fBgetaddrinfo\fP(3), которые предоставляют более правильный способ указания на ошибку. .P Функция \fBinet_network\fP() преобразует строку \fIcp\fP, записанную в числовой форме записи IPv4 с точками, в число (порядок байт узла), пригодное для использования в качестве сетевого адреса интернета. В случае успешного выполнения возвращается преобразованный адрес. В случае указания некорректной строки, возвращается \-1. .P Функция \fBinet_ntoa\fP() преобразует адрес Интернет\-узла \fIin\fP, заданного в сетевом порядке байтов, в строку в числовой форме записи IPv4 с точками. Строка возвращается в статически выделяемом буфере, который перезаписывается при последующих вызовах. .P Функция \fBinet_lnaof\fP() возвращает номер узла из интернет\-адреса \fIin\fP. Возвращаемое значение имеет порядок байт узла. .P Функция \fBinet_netof\fP() возвращает номер сети из интернет\-адреса \fIin\fP. Возвращаемое значение имеет порядок байт узла. .P Функция \fBinet_makeaddr\fP() противоположна \fBinet_netof\fP() и \fBinet_lnaof\fP(). Она возвращает адрес Интернет\-узла в сетевом порядке байт, создавая его путём объединения номера сети \fInet\fP с номером узла \fIhost\fP (оба задаются в порядке байт узла). .P The structure \fIin_addr\fP as used in \fBinet_ntoa\fP(), \fBinet_makeaddr\fP(), \fBinet_lnaof\fP(), and \fBinet_netof\fP() is defined in \fI\fP as: .P .in +4n .EX typedef uint32_t in_addr_t; \& struct in_addr { in_addr_t s_addr; }; .EE .in .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ .na .nh \fBinet_aton\fP(), \fBinet_addr\fP(), \fBinet_network\fP(), \fBinet_ntoa\fP() T} Безвредность в нитях MT\-Safe locale T{ .na .nh \fBinet_makeaddr\fP(), \fBinet_lnaof\fP(), \fBinet_netof\fP() T} Безвредность в нитях MT\-Safe .TE .SH СТАНДАРТЫ .TP \fBinet_addr\fP() .TQ \fBinet_ntoa\fP() POSIX.1\-2008. .TP \fBinet_aton\fP() Отсутствуют. .SH СТАНДАРТЫ .TP \fBinet_addr\fP() .TQ \fBinet_ntoa\fP() POSIX.1\-2001, 4.3BSD. .P \fBinet_lnaof\fP(), \fBinet_netof\fP() и \fBinet_makeaddr\fP() является устаревшими функциями, которые предполагают, что используется \fIклассовая сетевая адресация\fP. При классовой адресации сетевой адрес IPv4 разделяется на узловой и сетевой компоненты по байтовой границе следующим образом: .TP 10 Класс A На данный тип адреса указывает 0 на месте старшего бита (сетевой порядок байтов) адреса. Сетевой адрес содержится в самом старшем байте, а адреса узлов занимают оставшиеся три байта. .TP Класс B На данный тип адреса указывает двоичное значение 10 на месте двух самых старших битов (сетевой порядок байтов) адреса. Сетевой адрес содержится в двух старших байтах, а адреса узлов занимают оставшиеся два байта. .TP Класс C На данный тип адреса указывает двоичное значение 110 на месте самых трех старших битов (сетевой порядок байтов) адреса. Сетевой адрес содержится в первых трёх старших байтах, а адреса узлов занимают оставшийся байт. .P Классовая адресация в настоящее время устарела и была заменена на бесклассовую адресацию (CIDR), при которой компоненты сети и узла в адресе могут занимать произвольное число битов (а не байтов). .SH ПРИМЕЧАНИЯ В архитектурах x86 порядок байтов узла таков, что младший байт является первым (little endian = от младшего к старшему), а в сетевом порядке байт, который используется в интернет, старший байт является первым (big endian = от старшего к младшему). .SH ПРИМЕРЫ Ниже приведён код примера использования \fBinet_aton\fP() и \fBinet_ntoa\fP(). Рассмотрим результат работы примера: .P .in +4n .EX $\fB ./a.out 226.000.000.037\fP # Последний байт в восьмеричной сс 226.0.0.31 $\fB ./a.out 0x7f.1 \fP # Первый байт в шестнадцатеричной сс 127.0.0.1 .EE .in .SS "Исходный код программы" .\" SRC BEGIN (inet.c) \& .EX #define _DEFAULT_SOURCE #include #include #include \& int main(int argc, char *argv[]) { struct in_addr addr; \& if (argc != 2) { fprintf(stderr, "%s \[rs]n", argv[0]); exit(EXIT_FAILURE); } \& if (inet_aton(argv[1], &addr) == 0) { fprintf(stderr, "Invalid address\[rs]n"); exit(EXIT_FAILURE); } \& printf("%s\[rs]n", inet_ntoa(addr)); exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "СМОТРИТЕ ТАКЖЕ" \fBbyteorder\fP(3), \fBgetaddrinfo\fP(3), \fBgethostbyname\fP(3), \fBgetnameinfo\fP(3), \fBgetnetent\fP(3), \fBinet_net_pton\fP(3), \fBinet_ntop\fP(3), \fBinet_pton\fP(3), \fBhosts\fP(5), \fBnetworks\fP(5) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Azamat Hackimov , Dmitriy S. Seregin , Yuri Kozlov , Иван Павлов и Kirill Rekhov . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .