2012-04-17 46 views
2

我需要我的PHP腳本來確定用戶是否從局域網訪問它。如何確定用戶是否從局域網訪問?

直到現在,我已經使用了$ _SERVER ['REMOTE_ADDR']來確定用戶的ip是否屬於私有ip範圍,但是它與ipv6失敗。

當前代碼中使用...

if(filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)){       
    echo "NOT private or reserved ip"; 
}else{ 
    echo "private or reserved ip"; 
} 

...但它似乎被我的報告作爲IPv6的不是私人或預留失敗。

+1

您使用哪些代碼適用於IPv4?你做了什麼來嘗試和糾正這個問題? IP6地址具有非常不同的一組格式規則,甚至可以是可變長度的,而不是構成IP4地址的32位數字。你如何解析它們? – GordonM 2012-04-17 11:06:02

+0

是不是IPv6始終是64位,並且可變長度符號? – 2012-04-17 11:08:52

+0

@DeadElvis我在'10.1.7.'上有一個局域網。 – 2012-04-17 11:09:57

回答

0

我不知道什麼是「單播」的意思,但根據摘要,這是你所需要的: RFC4193#3.1

您可以比較Global IDSubnet ID與服務器相同的值。