2013-07-06 36 views
1

Maxmind提供免費的ipv6可下載的csv。他們提供ip範圍塊,但有誰知道我可以如何可以某人ipv6 ip並在他們提供的塊內進行檢查?Maxmind ipv6 - 如何獲取IPV6 IP並將其轉換爲它們提供的塊?

這裏是一個csv條目的例子。我相信頭如下:

起始IP,結束IP,起始IP塊,結束IP塊,...

「2001:200 ::」,「2001:200:FFFF:FFFF: FFFF:FFFF:FFFF:FFFF」, 「42540528726795050063891204319802818560」, 「42540528806023212578155541913346768895」, 「JP」, 「日本」

+0

我不遵循你的問題:什麼是「在他們提供的塊內進行檢查」。你只是想知道IP地址是否屬於其中一個塊?如果是這樣,那麼你有起始IP地址和結束IP地址,因此測試某個IP地址是否在這些邊界之間是微不足道的! – Celada

+0

對於maxmind ipv4 db,我可以使用將ip轉換爲數字格式的mysql inet_aton。然後,我可以使用此值來查看它是否落在特定範圍內。我想知道ipv6的等價物...... – user984314

+0

如果你在談論MySQL,那麼就沒有等價物,因爲MySQL沒有足夠大的整數來適應IPv6地址(它的最大整數類型是64位) 。所以你必須推出自己的。您可以將IPv6地址存儲爲文本或兩個64位整數(低部分和高部分)。 – Celada

回答

0

既然你使用MySQL,你可能要導入的IPv6地址爲二進制(16)列。它應該爲比較做正確的事情,MySQL 5.6提供了INET6_ATON函數,可以將字符串符號轉換爲二進制。

+0

我已經看到了inet_aton6,但它帶回了一個字母數字結果。那麼我怎麼可以用它來比較呢?我知道inet_aton適用於ipv4,因爲它返回一個整數。只是困惑我怎麼能比較字母數字結果? – user984314

+0

INET6_ATON返回一個可以轉換爲十六進制的二進制字符串,我認爲這就是你所指的。你應該能夠對二進制字符串進行比較。 –

+0

如何在PHP和MongoDB中執行此操作? –