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

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

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

    快速匹配的话可以用字典树,不清楚 php 有没有现成的轮子。或者其他的路由表查找算法都可以用在这里
    zbinlin
        3
    zbinlin  
       2019-07-09 22:30:09 +08:00   ❤️ 1
    将 ip 转成整数( A ),2 ** (32 - 掩码长度) 为有效数量( n )。这样判断一个 IP 时,将 IP 转成整数( B),然后判断是否:A >= B < A + n 成立。
    txydhr
        4
    txydhr  
       2019-07-10 05:43:46 +08:00
    子网掩码的另一种写法
    lihongjie0209
        5
    lihongjie0209  
       2019-07-10 10:09:30 +08:00
    简单粗暴一点直接枚举所有就可以了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2788 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 13:38 · PVG 21:38 · LAX 05:38 · JFK 08:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.