Manpages

名 前

inet_net_pton, inet_net_ntop − イ ン タ ー ネ ッ ト の ネ ッ ト ワ ー ク 番 号 の 変 換

書 式

#include <arpa/inet.h>

int inet_net_pton(int af, const char *pres,
void *
netp, size_t nsize);

char *inet_net_ntop(int af, const void *netp, int bits,
char *
pres, size_t psize);

−lresolv で リ ン ク す る 。

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

inet_net_pton(), inet_net_ntop():

glibc 2.20 以 降 :

_DEFAULT_SOURCE

glibc 2.20 よ り 前 :

_BSD_SOURCE || _SVID_SOURCE

説 明

こ れ ら の 関 数 は (印 字 可 能 な ) 表 記 形 式 と ネ ッ ト ワ ー ク 形 式 (バ イ ナ リ ー 形 式 ) 間 の 変 換 を 行 う 。 ど ち ら の 関 数 で も af は 変 換 を 行 う ア ド レ ス フ ァ ミ リ ー を 指 定 す る 。 サ ポ ー ト さ れ て い る 値 は AF_INET だ け で あ る 。

inet_net_pton()
inet_net_pton
() 関 数 は 、 表 記 形 式 で イ ン タ ー ネ ッ ト ネ ッ ト ワ ー ク 番 号 を 格 納 し た NULL 終 端 さ れ た 文 字 列 で あ る pres を ネ ッ ト ワ ー ク 形 式 に 変 換 す る 。 ネ ッ ト ワ ー ク バ イ ト オ ー ダ ー の 変 換 結 果 は netp が 指 す バ ッ フ ァ ー に 格 納 さ れ る (netp 引 き 数 は 通 常 in_addr 構 造 体 を 指 し て い る )。 nsize 引 き 数 は netp で 利 用 可 能 な バ イ ト 数 を 示 す 。 成 功 す る と inet_net_pton() は netp に 格 納 し た 結 果 の ネ ッ ト ワ ー ク 番 号 フ ィ ー ル ド の ビ ッ ト 数 を 返 す 。 入 力 の 表 記 形 式 と 返 り 値 に 関 す る 議 論 は 「 注 意 」 の 節 を 参 照 。 注 意 : netp が 指 す バ ッ フ ァ ー は inet_net_pton() の 呼 び 出 し 前 に 0 で 埋 め る べ き で あ る 。 呼 び 出 し で は ネ ッ ト ワ ー ク 番 号 で 必 要 な バ イ ト だ け が 書 き 込 ま れ 、 そ の バ イ ト 数 は 完 全 な ネ ッ ト ワ ー ク ア ド レ ス の バ イ ト 数 よ り も 少 な い こ と も あ る 。

inet_net_ntop()
inet_net_ntop
() 関 数 は netp が 指 す バ ッ フ ァ ー の ネ ッ ト ワ ー ク 番 号 を 表 記 形 式 に 変 換 す る 。 *netp は ネ ッ ト ワ ー ク バ イ ト オ ー ダ ー で の 値 と し て 解 釈 さ れ る 。 bits 引 き 数 は *netp の ネ ッ ト ワ ー ク 番 号 の ビ ッ ト 数 を 指 定 す る 。

NULL 終 端 さ れ た 表 記 形 式 の 文 字 列 は pres が 指 す バ ッ フ ァ ー に 格 納 さ れ る 。 psize 引 き 数 は pres で 利 用 可 能 な バ イ ト 数 を 指 定 す る 。 表 記 形 式 は CIDR 形 式 、 つ ま り 、 ネ ッ ト ワ ー ク ア ド レ ス を 表 す ド ッ ト 区 切 り の 10 進 数 に 、 ス ラ ッ シ ュ と ネ ッ ト ワ ー ク 番 号 の ビ ッ ト サ イ ズ が 続 く 形 式 で あ る 。

返 り 値

成 功 す る と inet_net_pton() は ネ ッ ト ワ ー ク 番 号 の ビ ッ ト 数 を 返 す 。 エ ラ ー の 場 合 、 −1 を 返 し 、 errno に エ ラ ー を 示 す 値 を 設 定 す る 。 成 功 す る と inet_net_ntop() は pres を 返 す 。 エ ラ ー の 場 合 、 NULL を 返 し 、 errno に エ ラ ー を 示 す 値 が セ ッ ト さ れ る 。

エ ラ ー

EAFNOSUPPORT

afAF_INET 以 外 の 値 が 指 定 さ れ た 。

EMSGSIZE 出 力 バ ッ フ ァ ー の サ イ ズ が 十 分 で な か っ た 。

ENOENT

(inet_net_pton() の 場 合 ) pres が 正 し い 表 記 形 式 で は な か っ た 。

準 拠

関 数 inet_net_pton() と inet_net_ntop() は 非 標 準 だ が 、 多 く の シ ス テ ム で 利 用 可 能 で あ る 。

注 意

inet_net_pton() の 入 力 の 表 記 形 式 ネ ッ ト ワ ー ク 番 号 は 、 16 進 数 値 、 ま た は ド ッ ト 区 切 り の 10 進 数 表 記 で 指 定 で き る 。 先 頭 に "0x" か "0X" が あ る 場 合 16 進 数 値 と な る 。 16 進 数 は ネ ッ ト ワ ー ク バ イ ト オ ー ダ ー の 左 か ら 右 へ 半 オ ク テ ッ ト (4 ビ ッ ト ) ず つ 順 番 に 埋 め ら れ る 。 ド ッ ト 区 切 り の 10 進 数 表 記 で は 、 最 大 4 つ の オ ク テ ッ ト を ド ッ ト 区 切 り の 10 進 数 で 指 定 す る 。 し た が っ て 、 以 下 の 形 式 を 指 定 で き る 。

a.b.c.d
a.b.c
a.b
a 各 部 分 は 0 か ら 255 の 範 囲 の 数 字 で 、 ネ ッ ト ワ ー ク 番 号 の 各 バ イ ト に 左 か ら 右 に ネ ッ ト ワ ー ク バ イ ト オ ー ダ ー (ビ ッ グ エ ン デ ィ ア ン ) で 順 番 に 埋 め ら れ る 。 省 略 さ れ た 部 分 が あ れ ば 、 対 応 す る ネ ッ ト ワ ー ク 番 号 の バ イ ト は 0 と な る 。

16 進 数 と ド ッ ト 区 切 り の 10 進 数 形 式 の ど ち ら の 場 合 も 、 ネ ッ ト ワ ー ク 番 号 の 後 ろ に ス ラ ッ シ ュ と 0 か ら 32 の 範 囲 の 数 字 を オ プ シ ョ ン で 付 け る こ と が で き る 。 こ の 数 字 は ネ ッ ト ワ ー ク 番 号 の ビ ッ ト 単 位 の サ イ ズ を 示 す も の で あ る 。

inet_net_pton() の 返 り 値
inet_net_pton
() の 返 り 値 は ネ ッ ト ワ ー ク 番 号 フ ィ ー ル ド の ビ ッ ト 数 で あ る 。 入 力 の 表 記 形 式 の 文 字 列 が ス ラ ッ シ ュ と サ イ ズ の 明 示 的 な 値 で 終 わ っ て い る 場 合 、 指 定 さ れ た サ イ ズ が inet_net_pton() の 返 り 値 と な る 。 そ う で な い 場 合 は 、 返 り 値 bits が 以 下 の よ う に し て 推 測 さ れ る 。

* ネ ッ ト ワ ー ク 番 号 の 最 上 位 バ イ ト が

240 以 上 の 場 合 、 bits は 32 と な

る 。

* そ れ 以 外 で 、 ネ ッ ト ワ ー ク 番 号 の 最 上 位 バ イ ト が

224 以 上 の 場 合 、 bits

は 4 と な る 。

* そ れ 以 外 で 、 ネ ッ ト ワ ー ク 番 号 の 最 上 位 バ イ ト が

192 以 上 の 場 合 、 bits

は 24 と な る 。

* そ れ 以 外 で 、 ネ ッ ト ワ ー ク 番 号 の 最 上 位 バ イ ト が

128 以 上 の 場 合 、 bits

は 16 と な る 。

* そ れ 以 外 の 場 合 、

bits は 8 と な る 。

上 記 の 手 順 か ら 得 ら れ る bits の 値 が 8 以 上 だ が 、 ネ ッ ト ワ ー ク 番 号 で 指 定 さ れ た オ ク テ ッ ト 数 が bits/8 よ り 大 き い 場 合 、 bits に は 実 際 に 指 定 さ れ た オ ク テ ッ ト 数 を 8 倍 し た 値 が 設 定 さ れ る 。

以 下 の プ ロ グ ラ ム は inet_net_pton() と inet_net_ntop() の 使 用 例 を 示 す も の で あ る 。 inet_net_pton() を 使 っ て 、 コ マ ン ド ラ イ ン の 最 初 の 引 き 数 で 渡 さ れ た 表 記 形 式 の ネ ッ ト ワ ー ク ア ド レ ス を バ イ ナ リ ー 形 式 に 変 換 し 、 inet_net_pton() の 返 り 値 を 出 力 す る 。 そ れ か ら inet_net_ntop() を 使 っ て バ イ ナ リ ー 形 式 を 表 記 形 式 に 再 度 戻 し て 、 結 果 の 文 字 列 を 出 力 す る 。

inet_net_pton() が netp 引 き 数 の す べ て の バ イ ト に 書 き 込 む わ け で は な い こ と を 示 す た め 、 プ ロ グ ラ ム に は オ プ シ ョ ン で 2 番 目 の コ マ ン ド ラ イ ン 引 き 数 を 指 定 す る こ と が で き 、 そ の 引 き 数 の 数 字 を 使 っ て inet_net_pton() を 呼 び 出 す 前 に バ ッ フ ァ ー を 初 期 化 す る 。 出 力 の 最 終 行 と し て 、 ユ ー ザ ー が ど の バ イ ト が inet_net_pton() に よ っ て 変 更 さ れ な か っ た か を 確 認 で き る よ う に 、 プ ロ グ ラ ム は inet_net_pton() が 返 し た バ ッ フ ァ ー の 全 バ イ ト を 表 示 す る 。 こ の 実 行 例 で は 、 inet_net_pton() が 推 測 し た ネ ッ ト ワ ー ク 番 号 の ビ ッ ト 数 を 表 示 す る 。

$ ./a.out 193.168
inet_net_pton() returned: 24
inet_net_ntop() yielded: 193.168.0/24
Raw address: c1a80000

inet_net_pton() が 結 果 の バ ッ フ ァ ー の 未 使 用 バ イ ト を 0 埋 め し な い こ と を 確 認 す る 。

$ ./a.out 193.168 0xffffffff
inet_net_pton() returned: 24
inet_net_ntop() yielded: 193.168.0/24
Raw address: c1a800ff 表 記 形 式 の 文 字 列 で 渡 さ れ た バ イ ト 数 が 推 測 し た 値 よ り 大 き い 場 合 、 inet_net_pton() が 推 測 す る ネ ッ ト ワ ー ク 番 号 の サ イ ズ を 広 げ る こ と を 確 認 す る 。

$ ./a.out 193.168.1.128
inet_net_pton() returned: 32
inet_net_ntop() yielded: 193.168.1.128/32
Raw address: c1a80180 ネ ッ ト ワ ー ク 番 号 の サ イ ズ が 明 示 的 に 指 定 す る と 、 推 測 さ れ る ネ ッ ト ワ ー ク 番 号 の サ イ ズ が 上 書 き さ れ る (た だ し 、 明 示 的 に 指 定 さ れ た 残 り の バ イ ト は inet_net_pton() で 使 用 さ れ 、 結 果 の バ ッ フ ァ ー に 書 き 込 ま れ る )。

$ ./a.out 193.168.1.128/24
inet_net_pton() returned: 24
inet_net_ntop() yielded: 193.168.1/24
Raw address: c1a80180 プ ロ グ ラ ム の ソ ー ス

/* "−lresolv" で リ ン ク す る */

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

#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \ }
while (0)

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

if (argc < 2) {
fprintf(stderr,
"Usage: %s presentation−form [addr−init−value]\n",
argv[0]);
exit(EXIT_FAILURE); }

/* argv[2] (数 値 ) が 指 定 さ れ る と 、 そ の 数 字 を 使 っ て inet_net_pton() に 渡 す 出 力 バ ッ フ ァ ー を 初 期 化 す る 。 こ れ に よ り
inet_net_pton() が ネ ッ ト ワ ー ク 番 号 に 必 要 な バ イ ト だ け を 書 き 込 む こ と を 確 認 で き る よ う に す る 。
argv[2] が 指 定 さ れ な か っ た 場 合 、 バ ッ フ ァ ー は 0 で 初 期 化 す る
(こ れ が 推 奨 さ れ る 方 法 で あ る )。 */

addr.s_addr = (argc > 2) ? strtod(argv[2], NULL) : 0;

/* argv[1] の 表 記 形 式 の ネ ッ ト ワ ー ク 番 号 を バ イ ナ リ ー 形 式 に 変 換 す る */

bits = inet_net_pton(AF_INET, argv[1], &addr, sizeof(addr));
if (bits == −1)
errExit("inet_net_ntop");

printf("inet_net_pton() returned: %d\n", bits);

/* inet_net_pton() が 返 し た 'bits' を 使 っ て 、 バ イ ナ リ ー 形 式 を 表 記 形 式 に 変 換 す る
*/

if (inet_net_ntop(AF_INET, &addr, bits, buf, sizeof(buf)) == NULL)
errExit("inet_net_ntop");

printf("inet_net_ntop() yielded: %s\n", buf);

/* 'addr' を 名 前 の 形 で (ネ ッ ト ワ ー ク バ イ ト オ ー ダ ー で ) 表 示 す る 。 こ れ に よ り
inet_net_ntop() が 表 示 し な い バ イ ト を 確 認 で き る 。 こ れ ら の バ イ ト の 一 部 は
inet_net_ntop() で は 変 更 さ れ な い 場 合 が あ り 、 そ の 場 合
argv[2] で 指 定 さ れ た 初 期 値 の ま ま に な る 。 */

printf("Raw address: %x\n", htonl(addr.s_addr));

exit(EXIT_SUCCESS); }

関 連 項 目

inet(3), networks(5)

こ の 文 書 に つ い て

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