Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       inet_aton, inet_addr, inet_network, inet_ntoa, inet_makeaddr, inet_lnaof, inet_netof - インターネットアド
       レス操作ルーチン

書式

       #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);

       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():
           Since glibc 2.19:
               _DEFAULT_SOURCE
           In glibc up to and including 2.19:
               _BSD_SOURCE || _BSD_SOURCE

説明

       inet_aton()  は、インターネットホストのアドレス cp を、 IPv4 の数値とドットによる表記から (ネットワークバ
       イトオーダの)  バイナリ値へ  変換し、変換結果を inp が指している構造体に格納する。 アドレスが有効な場合 0
       以外を返し、そうでない場合は 0 を返す。 cp で渡すアドレスとして、以下の形式を用いることができる。

       a.b.c.d   4 つの数字のそれぞれはアドレスの各バイトを示す。 これらのバイトは左から右の順序でバイナリアドレ
                 スに割り当てられる。

       a.b.c     ab はバイナリアドレスの最初の 2 バイトを示す。 c は 16 ビット値と解釈され、バイナリアドレス
                 の右側の 2 バイトを表す。 この表記は、(過去のものとなった) クラス B ネットワークアドレスを 指定
                 するのに適している。

       a.b       a はバイナリアドレスの最初のバイトを示す。 b は 24 ビット値と解釈され、バイナリアドレスの右側の
                 3 バイトを表す。 この表記は、(過去のものとなった) クラス A ネットワークアドレスを  指定するのに
                 適している。

       aa は 32 ビット値と解釈され、バイトの再配置は行われず、 そのままバイナリアドレスとして格納さ
                 れる。

       上記の全ての形式で、ドット区切りのアドレスの各要素は、10 進数、 8 進数 (先頭に 0 を付ける)、 16 進数  (先
       頭に  0X  を付ける)  で指定できる。  これらの形式のアドレスをまとめて IPv4 の数値とドットによる表記 (IPv4
       numbers-and-dots notation) と呼ぶ。 また、10 進数 4 つだけを使った形式を IPv4 のドット区切りの 10  進数表
         (IPv4  dotted-decimal notation) と呼ぶ (IPv4 のドット区切り 4 分割表記 (IPv4 dotted-decimal 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()  関数は、 IPv4 の数値とドットによる表記の文字列 cp を、 インターネットアドレスとしての使用
       に適した ホストバイトオーダの数値に変換する。  成功すると、変換されたアドレスを返す。  入力が不正な場合は
       -1 を返す。

       inet_ntoa()  関数は、ネットワークバイトオーダで渡されたインターネットホストアドレス in を、 IPv4 のドット
       区切りの 10  進数表記の文字列に変換する。  文字列は静的に割当てられたバッファーに格納されて返されるので、
       この後でこの関数を再度呼び出すと文字列は上書きされる。

       inet_lnaof()  関数は、インターネットアドレス in のローカルネットワーク部分を返す。 この返り値はホストバイ
       トオーダである。

       inet_netof()  関数は、インターネットアドレス in のネットワーク部分を返す。 この返り値はホストバイトオーダ
       である。

       inet_makeaddr()  関数は inet_netof()  と inet_lnaof()  の逆の機能を持つ。 ネットワーク番号 net と、ローカ
       ルアドレス host を 組み合わせて生成した、インターネットホストアドレスを  ネットワークバイトオーダで返す。
       host, net はともにホストバイトオーダである。

       inet_ntoa(),  inet_makeaddr(), inet_lnaof(), inet_netof() で使用する構造体 in_addr<netinet/in.h> で次
       のように定義されている:

           typedef uint32_t in_addr_t;

           struct in_addr {
               in_addr_t s_addr;
           };

属性

       この節で使用されている用語の説明は attributes(7) を参照のこと。

       ┌───────────────────────────────┬───────────────┬────────────────┐
       │InterfaceAttributeValue          │
       ├───────────────────────────────┼───────────────┼────────────────┤
       │inet_aton(), inet_addr(),      │ Thread safety │ MT-Safe locale │
       │inet_network(), inet_ntoa()    │               │                │
       ├───────────────────────────────┼───────────────┼────────────────┤
       │inet_makeaddr(), inet_lnaof(), │ Thread safety │ MT-Safe        │
       │inet_netof()                   │               │                │
       └───────────────────────────────┴───────────────┴────────────────┘

準拠

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

       inet_aton()  is not specified in POSIX.1, but is available on most systems.

注意

       x86 アーキテクチャーではホストバイトオーダは Least Significant Byte (LSB) first  (リトルエンディアン)  だ
       が、 インターネットで使われるネットワークバイトオーダは Most Significant Byte (MSB) first (ビッグエンディ
       アン) である点に注意すること。

       inet_lnaof(), inet_netof(), inet_makeaddr()  は過去の名残であり、渡されたアドレスが  クラスフルネットワー
       クアドレス  (classful  network  addresses)  であると仮定して処理を行う。 クラスフルネットワークアドレスで
       は、以下にあるように、 IPv4 ネットワークアドレスをバイト境界でネットワーク部とホスト部に分割する。

       Class A   (ネットワークバイトオーダの) アドレスの最上位ビットが 0 の場合、 このアドレス種別となる。このア
                 ドレス種別では、 最上位バイトがネットワークアドレスを表し、 残りの 3 バイトがホストアドレスを表
                 す。

       Class B   (ネットワークバイトオーダの) アドレスの上位側 2 ビットがバイナリ値で 10  の場合、このアドレス種
                 別となる。このアドレス種別では、  上位 2 バイトがネットワークアドレスを表し、 残りの 2 バイトが
                 ホストアドレスを表す。

       Class C   (ネットワークバイトオーダの) アドレスの上位側 3 ビットがバイナリ値で 110 の場合、このアドレス種
                 別となる。このアドレス種別では、  上位 3 バイトがネットワークアドレスを表し、 残りの 1 バイトが
                 ホストアドレスを表す。

       クラスフルネットワークアドレスは現在では廃止され、 クラスレスドメイン間ルーチン  (CIDR)  に取って代わられ
       た。 CIDR では、アドレスを任意のビット境界 (バイト境界ではない) で ネットワーク部とホスト部に分割する。

       以下は inet_aton()  と inet_ntoa()  の使用例である。このように実行する。

           $ ./a.out 226.000.000.037      # Last byte is in octal
           226.0.0.31
           $ ./a.out 0x7f.1               # First byte is in hex
           127.0.0.1

   プログラムのソース

       #define _BSD_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)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10  の一部である。プロジェクトの説明とバグ報告
       に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。