7

ptrレコードを動的に作成するために、ipv6アドレスをニブル形式に変換する必要があります。ウィキペディアから入手した情報は次のとおりです。

IPv6逆解像度

IPv6アドレスの逆引きDNSルックアップは、特別なドメインip6.arpaを使用します。IPv6アドレスは、このドメインでは、サブドメインとして16進数で表される、逆の順序のニブルのシーケンスとして名前として表示されます。たとえば、IPv6アドレス2001:db8 :: 567:89abに対応するポインタドメイン名はba9.8.7.6.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.bd0.1.0.0.2です。 .ip6.arpa。

ニブルに関して私が見つけた唯一のものは、pack関数http://www.php.net/packにありました。問題をグーグルで調べた例では解決策が見つかりませんでした。

どんな助けでも大歓迎です。

4

5 に答える 5

13

適切な最新バージョンの PHP (>= 5.1.0、または Windows では 5.3+) を指定すると、inet_pton関数を使用して IPv6 アドレスを 16 バイト配列に解析し、標準の文字列操作を使用してそれを逆にします。

$ip = '2001:db8::567:89ab';
$addr = inet_pton($ip);
$unpack = unpack('H*hex', $addr);
$hex = $unpack['hex'];
$arpa = implode('.', array_reverse(str_split($hex))) . '.ip6.arpa';
于 2011-07-08T07:44:22.040 に答える
3

ipv6calcコマンド(UNIX/Linux)ラインツールはこちらからご利用いただけます。

例えば:

$ ./ipv6calc --out revnibbles.arpa 2001:db8::1
No input type specified, try autodetection...found type: ipv6addr
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.

これは、フォワード ゾーン ファイルを食べPTRsて.

于 2012-01-10T23:09:16.437 に答える
2

これは逆で、Alnitak の優れたコードに基づいており、関数の形式になっています。

function ptr_to_ipv6($arpa) {
    $mainptr = substr($arpa, 0, strlen($arpa)-9);
    $pieces = array_reverse(explode(".",$mainptr));  
    $hex = implode("",$pieces);
    $ipbin = pack('H*', $hex);
    $ipv6addr = inet_ntop($ipbin);

    return $ipv6addr;
}
于 2011-09-16T14:44:12.233 に答える
0

私はこれをします:

function expand($ip){
    $hex = unpack("H*hex", inet_pton($ip));
    $ip = substr(preg_replace("/([A-f0-9]{4})/", "$1:", $hex['hex']), 0, -1);
    return $ip;
}

function ipv6_reverse_calc($address){
  $rev = chop(chunk_split(strrev(str_replace(':', '', expand($address))), 1, '.'), '.');
  return "$rev.ip6.arpa";
}
于 2015-04-10T17:08:10.880 に答える
-2

その例から、ニブル形式が完全な ipv6 アドレス (0 のフィールドを含む) であり、反転され、文字に分割され、ピリオドで区切られていることがわかります。個人的には、文字列表現を使用して、必要に応じて操作します。

于 2011-07-08T03:32:48.097 に答える