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/ に書かれている。