yibeishui
V2EX  ›  DNS

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

  •  
  •   yibeishui · Jul 9, 2019 · 7111 views
    This topic created in 2673 days ago, the information mentioned may be changed or developed.
    5 replies  •  2019-07-10 10:09:30 +08:00
    THaGKI9
    THaGKI9
    Jul 9, 2019
    1
    CIDR 格式斜杠后面的数字表示子网掩码的长度
    比如 255.255.255.0/24
    子网掩码长度为 24,表示这个网段的 IP 前 24 位是斜杠前面 IP 的前 24 位,也就是 255.255.255.x
    对应网段 255.255.255.0 ~ 255.255.255.255
    lcdtyph
    lcdtyph
    Jul 9, 2019 via iPhone
    2
    假设有一条 cidr 记录是 a.b.c.d/m
    那么如果有个 ip 的前 m 位和 a.b.c.d 的前 m 位一样,这个 ip 就属于这个 cidr 记录表示的网段了

    快速匹配的话可以用字典树,不清楚 php 有没有现成的轮子。或者其他的路由表查找算法都可以用在这里
    zbinlin
    zbinlin
    Jul 9, 2019❤️1
    3
    将 ip 转成整数( A ),2 ** (32 - 掩码长度) 为有效数量( n )。这样判断一个 IP 时,将 IP 转成整数( B),然后判断是否:A >= B < A + n 成立。
    txydhr
    txydhr
    Jul 10, 2019
    4
    子网掩码的另一种写法
    lihongjie0209
    lihongjie0209
    Jul 10, 2019
    5
    简单粗暴一点直接枚举所有就可以了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1372 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 22:10 · PVG 06:10 · LAX 14:10 · JFK 17:10
    ♥ Do have faith in what you're doing.