Provided by: manpages-ja-dev_0.5.0.0.20140515+dfsg-2_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(int net, int 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(): _BSD_SOURCE || _SVID_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; };
準拠
4.3BSD. inet_addr(), inet_ntoa() は POSIX.1-2001 で規定されている。 inet_aton() は POSIX.1-2001 で規定されていないが、ほとんどのシステムで利用可能である。
注意
i386 ではホストバイトオーダは 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 プロジェクトのリリース 3.65 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。