Provided by: manpages-ru-dev_4.18.1-1_all bug

ИМЯ

       inet_aton,  inet_addr,  inet_network,  inet_ntoa,  inet_makeaddr, inet_lnaof, inet_netof -
       функции для работы с адресами Интернет

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <arpa/inet.h>

       int inet_aton(const char *cp, struct in_addr *inp);

       in_addr_t inet_addr(const char *cp);
       in_addr_t inet_network(const char *cp);

       [[deprecated]] char *inet_ntoa(struct in_addr in);

       struct in_addr inet_makeaddr(in_addr_t net, in_addr_t host);

       in_addr_t inet_lnaof(struct in_addr in);
       in_addr_t inet_netof(struct in_addr in);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       inet_aton(), inet_ntoa():
           начиная с glibc 2.19:
               _DEFAULT_SOURCE
           в glibc до версии 2.19 включительно:
               _BSD_SOURCE || _BSD_SOURCE

ОПИСАНИЕ

       inet_aton() преобразует адрес Интернет-узла cp из числовой формы  записи  IPv4  с  точками
       (IPv4  numbers-and-dots)  в  двоичную  форму  (с  сетевым  порядком байт) и сохраняет её в
       структуре, на которую ссылается inp. inet_aton() возвращает ненулевое значение, если адрес
       правильный,  и  ноль,  если  нет. Адрес, указанный в cp, может принимать одну из следующих
       форм:

       a.b.c.d   Каждая из четырёх групп чисел представляет байт адреса; байты назначаются  слева
                 направо.

       a.b.c     Части  a и b задают первые два байта двоичного адреса. Часть c расценивается как
                 16-разрядное значение, определяющее два самых  правых  байта  двоичного  адреса.
                 Такая запись совместима c сетевыми адресами (устаревшими) класса B.

       a.b       Часть  a  определяет  первый  байт  двоичного  адреса. Часть b расценивается как
                 24-разрядное значение, определяющее три самых  правых  байта  двоичного  адреса.
                 Данная форма записи совместима с сетевыми адресами (устаревшими) класса A.

       a         Значение  a расценивается как 32-разрядное значение, которое хранится в двоичном
                 формате без какой либо перегруппировки байтов.

       Во всех вышеперечисленные формах записи адресов числа могут  быть  указаны  в  десятичной,
       восьмеричной  (с  префиксом  0)  или шестнадцатеричной (с префиксом 0X) системе счисления.
       Адреса, записанные в любой из этих форм, называются числовой формой записи IPv4 с точками.
       Форма   записи,   в  которой  используются  только  четыре  десятичных  числа,  называется
       десятично-точечной записью IPv4 (IPv4 dotted-decimal notation) или иногда IPv4 dotted-quad
       notation.

       Функция  inet_aton()  возвращает 1, если переданная строка была обработана успешно, или 0,
       если строка имеет некорректные данные (в errno ошибка не записывается).

       Функция inet_addr() преобразует адрес Интернет-узла cp из числовой  формы  записи  IPv4  с
       точками  в  двоичную  форму  с  сетевым  порядком  байт.  Если  адрес, подаваемый на вход,
       неверный,  функция  возвращает  INADDR_NONE  (обычно  -1).  Использование   этой   функции
       проблематично,   т.к.  значение  -1  эквивалентно  корректному  адресу  (255.255.255.255).
       Избегайте использования этой функции, вместо нее используйте inet_aton(), inet_pton(3) или
       getaddrinfo(3), которые предоставляют более правильный способ указания на ошибку.

       Функция  inet_network()  преобразует  строку cp, записанную в числовой форме записи IPv4 с
       точками, в число (порядок байт узла), пригодное  для  использования  в  качестве  сетевого
       адреса  интернета.  В  случае  успешного  выполнения возвращается преобразованный адрес. В
       случае указания некорректной строки, возвращается -1.

       Функция inet_ntoa() преобразует  адрес  Интернет-узла  in,  заданного  в  сетевом  порядке
       байтов,  в строку в числовой форме записи IPv4 с точками. Строка возвращается в статически
       выделяемом буфере, который перезаписывается при последующих вызовах.

       Функция inet_lnaof() возвращает номер узла из интернет-адреса  in.  Возвращаемое  значение
       имеет порядок байт узла.

       Функция  inet_netof()  возвращает  номер сети из интернет-адреса in. Возвращаемое значение
       имеет порядок байт узла.

       Функция inet_makeaddr() противоположна inet_netof() и inet_lnaof(). Она  возвращает  адрес
       Интернет-узла  в  сетевом  порядке  байт, создавая его путём объединения номера сети net с
       номером узла host (оба задаются в порядке байт узла).

       The  structure  in_addr  as  used  in  inet_ntoa(),  inet_makeaddr(),  inet_lnaof(),   and
       inet_netof()  is defined in <netinet/in.h> as:

           typedef uint32_t in_addr_t;

           struct in_addr {
               in_addr_t s_addr;
           };

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).

       ┌─────────────────────────────────────────────────┬──────────────────────┬────────────────┐
       │ИнтерфейсАтрибутЗначение       │
       ├─────────────────────────────────────────────────┼──────────────────────┼────────────────┤
       │inet_aton(), inet_addr(), inet_network(),        │ Безвредность в нитях │ MT-Safe locale │
       │inet_ntoa()                                      │                      │                │
       ├─────────────────────────────────────────────────┼──────────────────────┼────────────────┤
       │inet_makeaddr(), inet_lnaof(), inet_netof()      │ Безвредность в нитях │ MT-Safe        │
       └─────────────────────────────────────────────────┴──────────────────────┴────────────────┘

СТАНДАРТЫ

       inet_addr(), inet_ntoa(): POSIX.1-2001, POSIX.1-2008, 4.3BSD.

       Функция inet_aton() не определена в POSIX.1, однако доступна в большинстве систем.

ЗАМЕЧАНИЯ

       В архитектурах x86 порядок байтов узла таков, что младший  байт  является  первым  (little
       endian  =  от  младшего  к  старшему),  а  в  сетевом порядке байт, который используется в
       интернет, старший байт является первым (big endian = от старшего к младшему).

       inet_lnaof(), inet_netof()  и  inet_makeaddr()  является  устаревшими  функциями,  которые
       предполагают,  что  используется  классовая  сетевая  адресация.  При  классовой адресации
       сетевой адрес IPv4 разделяется  на  узловой  и  сетевой  компоненты  по  байтовой  границе
       следующим образом:

       Класс A   На данный тип адреса указывает 0 на месте старшего бита (сетевой порядок байтов)
                 адреса. Сетевой адрес содержится в самом старшем байте, а адреса узлов  занимают
                 оставшиеся три байта.

       Класс B   На  данный тип адреса указывает двоичное значение 10 на месте двух самых старших
                 битов (сетевой порядок байтов) адреса. Сетевой адрес содержится в  двух  старших
                 байтах, а адреса узлов занимают оставшиеся два байта.

       Класс C   На данный тип адреса указывает двоичное значение 110 на месте самых трех старших
                 битов (сетевой порядок байтов) адреса. Сетевой адрес содержится  в  первых  трёх
                 старших байтах, а адреса узлов занимают оставшийся байт.

       Классовая  адресация  в настоящее время устарела и была заменена на бесклассовую адресацию
       (CIDR), при которой компоненты сети и узла в  адресе  могут  занимать  произвольное  число
       битов (а не байтов).

ПРИМЕРЫ

       Ниже  приведён  код  примера использования inet_aton() и inet_ntoa(). Рассмотрим результат
       работы примера:

           $ ./a.out 226.000.000.037      # Последний байт в восьмеричной сс
           226.0.0.31
           $ ./a.out 0x7f.1               # Первый байт в шестнадцатеричной сс
           127.0.0.1

   Исходный код программы

       #define _DEFAULT_SOURCE
       #include <arpa/inet.h>
       #include <stdio.h>
       #include <stdlib.h>

       int
       main(int argc, char *argv[])
       {
           struct in_addr addr;

           if (argc != 2) {
               fprintf(stderr, "%s <dotted-address>\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           if (inet_aton(argv[1], &addr) == 0) {
               fprintf(stderr, "Invalid address\n");
               exit(EXIT_FAILURE);
           }

           printf("%s\n", inet_ntoa(addr));
           exit(EXIT_SUCCESS);
       }

СМ. ТАКЖЕ

       byteorder(3),    getaddrinfo(3),    gethostbyname(3),    getnameinfo(3),     getnetent(3),
       inet_net_pton(3), inet_ntop(3), inet_pton(3), hosts(5), networks(5)

ПЕРЕВОД

       Русский    перевод    этой    страницы    руководства    был    сделан   Azamat   Hackimov
       <azamat.hackimov@gmail.com>,   Dmitriy   S.   Seregin   <dseregin@59.ru>,   Yuri    Kozlov
       <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.