php如何判断一个IP是否属于某个网段

 我来答
一骑当后
2014-11-09 · 知道合伙人数码行家
一骑当后
知道合伙人数码行家
采纳数:40298 获赞数:306441
网络、设备维护、电路、弱电检测。

向TA提问 私信TA
展开全部
正则表达式!
preg_match('/58\.17\.128\.[0-9]+/', $ip)

答题不易,互相理解,您的采纳是我前进的动力,感谢您。
希望回答对你有帮助,如果有疑问,请继续追问
Storm代理
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto... 点击进入详情页
本回答由Storm代理提供
664825723
2018-02-22 · 超过20用户采纳过TA的回答
知道答主
回答量:100
采纳率:0%
帮助的人:38.5万
展开全部
function h_fillbitsfromleft($num){
    if ($num >= 8 ){
        return(255);
    }
    $bitpat=0xff00; 
    while ($num > 0){
        $bitpat=$bitpat >> 1;
        $num--;
    }
    return($bitpat & 0xff);
}
function inIpSegment($ip, $ips) {
    $ip = trim($ip);
    $ips = trim($ips);
    $ipArr = explode('/', $ips);
    if ($ip === trim($ipArr[0])) return true;
    if (count(explode('.', $ip)) != 4) return false;
    $duan = 0;
    if (isset($ipArr[1])) $duan = intval($ipArr[1]);
    if ($duan <= 0 || $duan >= 32) return false;
    $ipExpArr = explode('.', $ipArr[0]);
    if (count($ipExpArr) != 4) return false;
    $ip_1 = intval($ipExpArr[0]);
    $ip_2 = intval($ipExpArr[1]);
    $ip_3 = intval($ipExpArr[2]);
    $ip_4 = intval($ipExpArr[3]);
    if ($ip_1<0 || $ip_1>255) return false;
    if ($ip_2<0 || $ip_2>255) return false;
    if ($ip_3<0 || $ip_3>255) return false;
    if ($ip_4<0 || $ip_4>255) return false;
    $snm_1 = $duan >= 8*1 ? 255 : h_fillbitsfromleft($duan-8*1);
    $snm_2 = $duan >= 8*2 ? 255 : h_fillbitsfromleft($duan-8*2);
    $snm_3 = $duan >= 8*3 ? 255 : h_fillbitsfromleft($duan-8*3);
    $snm_4 = $duan >= 8*4 ? 255 : h_fillbitsfromleft($duan-8*4);
    $firstAdrArr = [];
    $lastAdrArr = [];
    $firstAdrArr[0] = $ip_1 & $snm_1;
    $firstAdrArr[1] = $ip_2 & $snm_2;
    $firstAdrArr[2] = $ip_3 & $snm_3;
    $firstAdrArr[3] = $ip_4 & $snm_4;
    $lastAdrArr[0] = $ip_1 | (~ $snm_1 & 0xff);
    $lastAdrArr[1] = $ip_2 | (~ $snm_2 & 0xff);
    $lastAdrArr[2] = $ip_3 | (~ $snm_3 & 0xff);
    $lastAdrArr[3] = $ip_4 | (~ $snm_4 & 0xff);
    if ($duan < 31) {
        $firstAdrArr[3]++;
        $lastAdrArr[3]--;
    }
    $i = 0;
    foreach (explode('.', $ip) as $value) {
        if ($value < $firstAdrArr[$i] || $value > $lastAdrArr[$i]) return false;
        $i++;
    }
    return true;
}

// 使用
inIpSegment('192.168.1.1', '192.168.1.1/24');
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式