2017-08-15 151 views
1

我需要將IPv6地址轉換爲IPv4地址。要做到這一點,我使用的代碼從pedmillon's answer to a related question在PHP中將IPv6轉換爲IPv4地址

$ipv6 = $_SERVER['REMOTE_ADDR']; 
$ipv4 = hexdec(substr($ipv6, 0, 2)). "." . hexdec(substr($ipv6, 2, 2)). "." . hexdec(substr($ipv6, 5, 2)). "." . hexdec(substr($ipv6, 7, 2)); 

我試圖在我的本地和:: 1被轉換爲0.1.0.0。這段代碼是否正確工作?

我相信它應該顯示127.0.0.1而不是0.1.0.0。

+6

IPv6地址不能轉換爲IPv4地址。這就像想把蘋果變成香蕉一樣。首先,有** 340,282,366,920,938,463,463,374,607,431,768,211,456 **可能的IPv6地址,而只有** 4,294,967,296 **可能的IPv4地址。所以讓我細化一下:就像想把幾個蘋果星系變成一個香蕉一樣。 – spectras

+0

嗯..那麼它會是最好的解決方案,如果我強制我的Apache使用IPv4地址,而不是? –

+2

面向未來的解決方案將支持ipv6。爲了簡化轉換,如果你不想處理這兩個系統,你可以告訴你的服務器你想要ipv4地址映射到ipv6地址空間,然後你可以使用ipv6。 – spectras

回答

4

IPv4和IPv6是兩種完全不同的互不兼容的網絡尋址方案。沒有辦法從一個「翻譯」到另一個。 IPv4地址不對應於特定的IPv6地址,反之亦然。互聯網上的絕大多數節點仍然只使用IPv4地址,一小部分同時運行IPv4和IPv6的雙棧,並且一個極小的數字可能僅限於IPv6。 IPv4和IPv6節點不能直接相互通話。從長遠來看,每個人都應該完全轉向IPv6,但這還有很長的路要走。

你能解釋我如何使用IPv6地址來阻止國家

您阻止使用IPv4的特定區域用同樣的方法:獲取IP地址映射到地理位置數據庫。唯一的區別是,你需要找到一個數據庫或服務,它爲IPv6地址。

+0

IP塊歸屬方案使構建這樣的數據庫變得困難得多(更不用說它會更大)。事實上,我剛剛檢查了三個支持ipv6的地理定位服務,而他們三個都有我的國家錯誤。我的託管服務器也一樣。雖然使用ipv4地址,他們可以非常準確地找到我的位置(正確的鄰居)。 – spectras

+1

我並沒有聲稱這很容易或現實...... ;-) – deceze

+0

'從長遠來看,每個人都應該專門轉向IPv6,但這還有很長的路要走。我有多少年了? ;) –