2011-03-21 43 views
6

我目前正在檢測用戶的IPv4地址,並在v4中使用IP地址塊。不過,我想要捕獲IPv6併爲此列出阻止列表,所以問題是: 將IPv4與IPv4相提並論,或者在PHP中使用不同的邏輯嗎?我只是不確定每臺設備是否具有IPv4和IPv6,或者它是其中之一,系統會自動檢測它的格式並存儲它?在PHP中檢測IPv6?

回答

6

Apache向0123報告REMOTE_ADDR。如果Apache在v6接口上偵聽,它將成爲v6地址。

很容易區分。 IPv4地址將始終有一個完整的.字符,並且IPv6地址將始終包含冒號:

創建阻止列表(或白名單)時,應小心處理v6地址。它們可以通過使用兩個連續的冒號來縮短::。無法保證您的操作系統將使用較短或完整的表單,因此您的腳本必須處理該表單。詳細信息請查看Wikipedia's IPv6頁面。

+0

['inet_pton'](http://php.net/manual/en/function.inet-pton.php)將解析這兩個家庭成二進制字符串,您可以通過字符串的長度確定家庭。 – aaz 2011-03-21 17:16:34