首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  DNS

看不懂 CIDR 格式, PHP 怎么判断某个 IP 属于下列这个范围?

  •  
  •   yibeishui · 97 天前 · 2298 次点击
    这是一个创建于 97 天前的主题,其中的信息可能已经有所发展或是发生改变。
    5 回复  |  直到 2019-07-10 10:09:30 +08:00
        1
    THaGKI9   97 天前
    CIDR 格式斜杠后面的数字表示子网掩码的长度
    比如 255.255.255.0/24
    子网掩码长度为 24,表示这个网段的 IP 前 24 位是斜杠前面 IP 的前 24 位,也就是 255.255.255.x
    对应网段 255.255.255.0 ~ 255.255.255.255
        2
    lcdtyph   97 天前 via iPhone
    假设有一条 cidr 记录是 a.b.c.d/m
    那么如果有个 ip 的前 m 位和 a.b.c.d 的前 m 位一样,这个 ip 就属于这个 cidr 记录表示的网段了

    快速匹配的话可以用字典树,不清楚 php 有没有现成的轮子。或者其他的路由表查找算法都可以用在这里
        3
    zbinlin   97 天前   ♥ 1
    将 ip 转成整数( A ),2 ** (32 - 掩码长度) 为有效数量( n )。这样判断一个 IP 时,将 IP 转成整数( B),然后判断是否:A >= B < A + n 成立。
        4
    txydhr   96 天前
    子网掩码的另一种写法
        5
    lihongjie0209   96 天前
    简单粗暴一点直接枚举所有就可以了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2096 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 18ms · UTC 16:08 · PVG 00:08 · LAX 09:08 · JFK 12:08
    ♥ Do have faith in what you're doing.