CIDR / IP地址 / 子网地址 子网掩码 的例子(子网地址是什么?掩码是什么? 判断一个 IPv4 地址是否在指定的 CIDR 子网内 获取用户真实IP的PHP实现(可能会造假))

zblog1年前zblog问题解答98

IP地址 = 8位.8位.8位.8位  (一个字节8位 ,每个位是0或1,8位bit转为十进制就是 0-255)


192.168.5.0/24 这个称为子网地址或子网,其中24是掩码。

掩码是从前面算的,8位.8位.8位.0/24  (掩码24是前面三个 字节的 长度) 如下面:


192.168.5.0/24 这个 [子网地址/掩码](CIRD)的IP范围是从 192.168.5.1 到 192.168.5.254

具体来说:

  • 网络地址:192.168.5.0

  • 广播地址:192.168.5.255

  • 可用地址范围:192.168.5.1 到 192.168.5.254

在这个子网中,192.168.5.0 是网络地址,192.168.5.255 是广播地址,而 192.168.5.1 到 192.168.5.254 是可用的主机地址。


`192.168.0.0/16` 这个[子网地址/掩码](CIRD)的IP范围是从 `192.168.0.1` 到 `192.168.255.254`。

具体来说: - 网络地址:`192.168.0.0` - 广播地址:`192.168.255.255` - 可用地址范围:`192.168.0.1` 到 `192.168.255.254` 在这个子网中,`192.168.0.0` 是网络地址,`192.168.255.255` 是广播地址,而 `192.168.0.1` 到 `192.168.255.254` 是可用的主机地址。


`192.168.0.0/16` 这个[子网地址/掩码](CIRD)的IP范围是从 `192.168.0.1` 到 `192.168.255.254`。

具体来说: - 网络地址:`192.168.0.0` - 广播地址:`192.168.255.255` - 可用地址范围:`192.168.0.1` 到 `192.168.255.254` 在这个子网中,`192.168.0.0` 是网络地址,`192.168.255.255` 是广播地址,而 `192.168.0.1` 到 `192.168.255.254` 是可用的主机地址。


`192.0.0.0/8` 这个[子网地址/掩码](CIRD)的IP范围是从 `192.0.0.1` 到 `192.255.255.254`。

具体来说: - 网络地址:`192.0.0.0` - 广播地址:`192.255.255.255` - 可用地址范围:`192.0.0.1` 到 `192.255.255.254` 在这个子网中,`192.0.0.0` 是网络地址,`192.255.255.255` 是广播地址,而 `192.0.0.1` 到 `192.255.255.254` 是可用的主机地址。



参考:

CIDR 是什么意思?

CIDR 是 "Classless Inter-Domain Routing" 的缩写,中文意思是无类别域间路由。CIDR 是一种用于表示 IP 地址和子网掩码的表示方法,它允许更灵活地分配和管理 IP 地址空间。

CIDR 表示法使用斜杠(/)来分隔 IP 地址和子网掩码的长度。例如,192.168.1.0/24 表示 IP 地址 192.168.1.0 和子网掩码 255.255.255.0

CIDR 的主要优点包括:

  1. 地址空间的灵活性:CIDR 允许更有效地使用 IP 地址空间,因为它可以更精确地表示子网。

  2. 路由表的简化:使用 CIDR 可以减少路由表的大小,因为可以将多个子网合并到一个条目中。

  3. 网络聚合:CIDR 支持网络聚合,可以将多个子网合并成一个更大的子网,从而提高路由效率。

CIDR 表示法在现代网络中广泛使用,特别是在互联网路由中。


子网地址是什么?掩码是什么?

在 CIDR 表示法 192.168.1.0/24 中:

  • 192.168.1.0 是子网地址。

  • /24 表示子网掩码的长度,即前 24 位是网络部分,后 8 位是主机部分。

因此,CIDR 表示法中的子网地址和子网掩码共同定义了一个子网。


判断ip是否在CIDR的php实现


/**
 * 判断一个 IPv4 地址是否在指定的 CIDR 子网内
 * @param string $ip 要检查的 IP 地址
 * @param string $subnet CIDR 子网,格式为 "192.168.0.0/16"
 * @return bool 如果 IP 地址在子网内,返回 true;否则返回 false
 */
function isIpInSubnet($ip, $subnet) {    
    // 拆分子网信息
    list($subnet_ip, $mask) = explode('/', $subnet);    
    // 验证输入格式
    if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false) {        return false;
    }    if (filter_var($subnet_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false) {        return false;
    }    if (!is_numeric($mask) || $mask < 0 || $mask > 32) {        return false;
    }    
    // 将 IP 地址和子网地址转换为长整型
    $ip_long = ip2long($ip);    $subnet_long = ip2long($subnet_ip);    
    // 计算子网掩码
    $mask = ($mask == 32) ? 0xFFFFFFFF : (~((1 << (32 - (int)$mask)) - 1));    
    // 进行位运算判断
    return ($ip_long & $mask) === ($subnet_long & $mask);
}


获取用户真实IP的PHP实现(可能会造假)

/**
 * 获取客户端真实IP地址
 */
function getRealIpAddress() {
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        // 可能包含多个IP地址,以逗号分隔,取第一个作为真实IP
        $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $realIp = trim($ips[0]);
    } elseif (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        $realIp = $_SERVER['HTTP_CLIENT_IP'];
    } else {
        $realIp = $_SERVER['REMOTE_ADDR'];
    }
    return $realIp;
}


相关文章

linux修改密码 ssh端口查看

查看ssh端口 cat /etc/ssh/sshd_config | grep Port 修改密码 passwd...

讯飞星火调试 https://xinghuo.xfyun.cn/desk?bug=s 讯飞调试

讯飞星火调试 https://xinghuo.xfyun.cn/desk?bug=s 讯飞调试...

盗版宝塔如何升级正版

先参考  http://zblog.gongshi5.com/post/65.html root  16 大概率不行宝塔bt命令失效如何修复面板2024-01-05 16...

IIS 屏蔽垃圾蜘蛛

<rule name="Block spider">      <match url="(^robots.txt$)&qu...

php array_pop 函数 从数组的最后一个元素弹出值,并返回这个值。

php array_pop 函数array_pop 函数是 PHP 中的一个内置函数,它的作用是从数组的最后一个元素弹出值,并返回这个值。同时,该数组的长度会减少 1,因为被弹出的元素已经从...

php文件名字 去掉特殊字符 zblog实现

FormatString($article->Title, '[filename]') zb_system/function/c_system_common.ph...