前言
身為一個網路玩家,會想要幫自己的 IP 加上他們各自的反解,這樣在進行路由追蹤的時候就可以更快速的知道哪個設備出了問題。但是 IPv6 的反解位址又臭又長,老實說我不是每次都很想在那邊慢慢用手算。因此,我在網路上找到了一個方法產生出來,這個方法是 PHP 語言的,剛好可以拿來結合 API 工作。因此這邊就提供這段程式碼。
了解反解位址
當你在進行路由追蹤的時候,你可以看到某些 IP 前面有各自的名字,例如 168.95.1.1
對應到 dns.hinet.net
。
但這背後所對應的 DNS 必須先翻譯成反解位址才會進行設定。例如剛剛的 168.95.1.1
反解位址就是 1.1.95.168.in-addr.arpa
,你會注意到其實就是 IP 位址反過來寫,然後加上 in-addr.arpa
罷了。
但是在 IPv6 上,就不是這麼簡單了…。舉例 HiNet DNS 的 2001:b000:168::1
,他的反解位址是 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.6.1.0.0.0.0.b.1.0.0.2.ip6.arpa
。這樣子又臭又長的結果,你不會每次新增的時候都想用手算。
程式碼
由於我想要串上自己的 API,因此我在網路上找到了一段 PHP 程式碼來滿足我的需求。
<?php
// 在 $ip 變數中輸入你想轉換的 IPv6 位址。
$ip = '2001:b000:168::1';
$addr = inet_pton($ip);
$unpack = unpack('H*hex', $addr);
$hex = $unpack['hex'];
$arpa = implode('.', array_reverse(str_split($hex))) . '.ip6.arpa';
echo $arpa;
?>
在上面的程式碼中,就會印出以下的結果:
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.6.1.0.0.0.0.b.1.0.0.2.ip6.arpa
提供各位參考囉!