我需要将一个ipv6地址转换成它的nibble格式,以便动态地创建ptr记录。以下是我从维基百科获得的信息:
IPv6反向分辨率 IPv6地址的反向DNS查找使用专用域ip6.arpa。IPv6地址显示为此域中的名称,顺序相反,表示为十六进制数字作为子域。例如,对应于b.a.9.8.7.6.5.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.地址2001:db8::567:89ab的指针域名是IPv6
我唯一能找到的关于小吃的东西就是pack函数,http://www.php.net/pack。我在谷歌搜索这个问题时找不到任何解决方案。
任何帮助都是非常感谢的。
发布于 2011-07-08 07:44:22
给定一个适合现代的PHP版本(Windows5.1.0,或>=上的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';发布于 2012-01-10 23:09:16
您可以使用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。
发布于 2011-09-16 14:44:12
这是相反的,基于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;
}https://stackoverflow.com/questions/6619682
复制相似问题