Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
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 a と b はバイナリアドレスの最初の 2 バイトを示す。 c は 16 ビット値と解釈さ れ、バイナリアドレスの右側の 2 バイトを表す。 この表記は、(過去のものとなった) クラス B ネットワークアドレスを 指定するのに適している。 a.b a はバイナリアドレスの最初のバイトを示す。 b は 24 ビット値と解釈され、バイナリ アドレスの右側の 3 バイトを表す。 この表記は、(過去のものとなった) クラス A ネッ トワークアドレスを 指定するのに適している。 a 値 a は 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) を参照のこと。 ┌───────────────────────────────┬───────────────┬────────────────┐ │Interface │ Attribute │ Value │ ├───────────────────────────────┼───────────────┼────────────────┤ │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/ に書かれている。