如何知道IP是否是外部的?

Per*_*llo 4 php ip symfony

我希望检测地址IP是本地还是外部.在Web应用程序中,我的客户希望通过本地网络上的samba直接访问文件,如果您不在网络中,则通过下载链接访问文件.

我可能只是检查我的IP是否是172.30.*.*,但如果我的客户切换到1 0.*.*.*或IPV6 ,它将不再起作用.

我可以使用config var,因此客户可以随意更改它.我希望它是自动的,没有配置var.

你会怎么做?

cry*_*c ツ 8

根据需要更新IP范围列表.我有一段时间没有更新这个列表,但它应该有最多.对不起,我从未添加过IPv6支持.

function reserved_ip($ip)
{
    $reserved_ips = array( // not an exhaustive list
    '167772160'  => 184549375,  /*    10.0.0.0 -  10.255.255.255 */
    '3232235520' => 3232301055, /* 192.168.0.0 - 192.168.255.255 */
    '2130706432' => 2147483647, /*   127.0.0.0 - 127.255.255.255 */
    '2851995648' => 2852061183, /* 169.254.0.0 - 169.254.255.255 */
    '2886729728' => 2887778303, /*  172.16.0.0 -  172.31.255.255 */
    '3758096384' => 4026531839, /*   224.0.0.0 - 239.255.255.255 */
    );

    $ip_long = sprintf('%u', ip2long($ip));

    foreach ($reserved_ips as $ip_start => $ip_end)
    {
        if (($ip_long >= $ip_start) && ($ip_long <= $ip_end))
        {
            return TRUE;
        }
    }
    return FALSE;
}

var_dump(reserved_ip('127.0.0.1')); // reserved (localhost)
var_dump(reserved_ip('74.125.140.101')); // not reserved (Google)
Run Code Online (Sandbox Code Playgroud)