INET_PTON

Section: Linux Programmer's Manual (3)
Updated: 2020-06-09
Index JM Home Page
 

名前

inet_pton - IPv4/IPv6 アドレスをテキスト形式からバイナリ形式に変換する  

書式

#include <arpa/inet.h>

int inet_pton(int af, const char *src, void *dst);
 

説明

This function converts the character string src into a network address structure in the af address family, then copies the network address structure to dst. The af argument must be either AF_INET or AF_INET6. dst is written in network byte order.

現在サポートされているアドレスファミリーは以下の通りである。

AF_INET
src はドット区切りの 10 進数形式 "ddd.ddd.ddd.ddd" の IPv4 ネットワークアドレス文字列へのポインターである。 ddd は 0 から 255 までの範囲の最大 3 桁の 10 進数である。 このアドレスは struct in_addr に変換されて dst にコピーされる。 dst の長さは sizeof(struct in_addr) (4) バイト (32ビット) でなければならない。
AF_INET6
src は IPv6 ネットワークアドレスが格納された文字列へのポインターである。 このアドレスは struct in6_addr に変換されて dst にコピーされる。 dst の長さは sizeof(struct in6_addr) (16) バイト (128 ビット) でなければならない。 以下の 3 つのルールにしたがった形式が IPv6 アドレスとして入力できる。
1.
推奨形式は x:x:x:x:x:x:x:x である。この形式は 8 個の 16 進数から構成され、 各々の 16 進数は 16 ビット値を表す (x は最大 4 桁の 16 進数である)。
2.
推奨形式の中の連続する 0 の列は :: に短縮できる。アドレス中で使用できる :: は 1 個だけである。 例えば、ループバックアドレス 0:0:0:0:0:0:0:1 は ::1 と短縮できる。 全ビットが 0 で構成されるワイルドカードアドレスは :: と記載できる。
3.
IPv4 をマッピングした IPv6 アドレスを表記するには別の形式が便利である。 この別の形式は x:x:x:x:x:x:d.d.d.d と書くことができる。 最初の 6 個の x はアドレスを 16 ビット単位に区切ったときの上位側 6 個分 (つまり 96 ビット分) を定義する 16 進数であり、 d の部分はアドレスの下位 32 ビットをドット区切りの 10 進数表記で表したものである。 ::FFFF:204.152.189.116 はこの形式の例である。
IPv6 アドレスの表現方法の詳細については RFC 2373 を参照のこと。
 

返り値

成功する (ネットワークアドレスが正常に変換される) と、 inet_pton() は 1 を返す。 src が指定されたアドレスファミリーに対する 正しいネットワークアドレス表記でない場合には、 0 を返す。 af がサポートされているアドレスファミリーでない場合には、 -1 を返し、 errno に EAFNOSUPPORT を設定する。  

属性

この節で使用されている用語の説明は attributes(7) を参照のこと。
Interface Attribute Value
inet_pton() Thread safety MT-Safe locale
 

準拠

POSIX.1-2001, POSIX.1-2008.  

注意

inet_aton(3) や inet_addr(3) と異なり、 inet_pton() は IPv6 アドレスに対応している。 一方で、 inet_pton() が受け付ける IPv4 アドレスはドット区切りの 10 進数表記だけである。 これに対し、 inet_aton(3) や inet_addr(3) ではもっと一般的なドット区切りの数字表記 (16 進数や 8 進数の形式や、 4 バイト全てを明示的に書かなくてもよい形式) が使用できる。 ドット区切りの数字表記で IPv6 アドレスと IPv4 アドレスの両方を扱える インターフェイスについては、 getaddrinfo(3) を参照のこと。  

バグ

AF_INET6 は IPv4 アドレスを認識しない。 代わりに IPv4 アドレスをマッピングした IPv6 アドレスを src に与えなければならない。  

例

以下のプログラムは inet_pton() と inet_ntop(3) の使用例を示すものである。 実行すると以下のようになる。

$ ./a.out i6 0:0:0:0:0:0:0:0 :: $ ./a.out i6 1:0:0:0:0:0:0:8 1::8 $ ./a.out i6 0:0:0:0:0:FFFF:204.152.189.116 ::ffff:204.152.189.116  

プログラムのソース

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

int main(int argc, char *argv[]) {
    unsigned char buf[sizeof(struct in6_addr)];
    int domain, s;
    char str[INET6_ADDRSTRLEN];


    if (argc != 3) {
        fprintf(stderr, "Usage: %s {i4|i6|<num>} string\n", argv[0]);
        exit(EXIT_FAILURE);
    }


    domain = (strcmp(argv[1], "i4") == 0) ? AF_INET :
             (strcmp(argv[1], "i6") == 0) ? AF_INET6 : atoi(argv[1]);


    s = inet_pton(domain, argv[2], buf);
    if (s <= 0) {
        if (s == 0)
            fprintf(stderr, "Not in presentation format");
        else
            perror("inet_pton");
        exit(EXIT_FAILURE);
    }


    if (inet_ntop(domain, buf, str, INET6_ADDRSTRLEN) == NULL) {
        perror("inet_ntop");
        exit(EXIT_FAILURE);
    }


    printf("%s\n", str);


    exit(EXIT_SUCCESS); }  

関連項目

getaddrinfo(3), inet(3), inet_ntop(3)  

この文書について

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

関連キーワード

アドレス   pton   inet   addr   ビット   表記   argv   ドット   区切り   ネットワークアドレス   ntop   domain   exit   ファミリー   struct   バイト   arpa   network address   structure   サポート   ポインター   最大   コピー   推奨   構成

Linux マニュアル 一覧

関連するコマンド・関数

inet_net_ntop.3   inet_net_pton.3   inet_ntop.3   inet_makeaddr.3   inet.3   inet_addr.3
 

Index

名前
書式
説明
返り値
属性
準拠
注意
バグ
例
プログラムのソース
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:37 GMT, October 11, 2026