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

zblog10个月前zblog问题解答62

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;
}


相关文章

php 大写转小写 小写转大写 大小写转换 例子 strtolower strtoupper

在 PHP 中,可以使用内置的函数来转换字符串的大小写。以下是几个例子:大写转小写:使用 strtolower() 函数将大写字母转换为小写字母。   <...

mysql创建给指定数据库创建账户密码

-- 假设你已经登录到了 MySQL 数据库管理系统中 -- 1. 创建用户 CREATE USER 'z...

html中 &#20320;&#22909; 中 &# ;是啥意思20320 又是啥意思 字符实体引用(Character Entity Reference)

在HTML中,&#xxxx; 是一种字符实体引用(Character Entity Reference)的表示方法,用于在网页中插入那些无法直接在HTML代码中表示的字符。这里的&n...

Storage engine MylSAM is disabled (Table creation is disallowed). mysql8++  MyISAM 或 InnoDB(8默认)数据库

Storage engine MylSAM is disabled (Table creation is disallowed). mysql8++ MyISAM 或 InnoDB(8默认)数据库

Storage engine MylSAM is disabled (Table creation is disallowed). mysql8++  MyISAM 或 InnoDB(8默认...

通过在页面或自定义组件的 JSON 配置中添加以下配置开始适配

JSON 配置通过在页面或自定义组件的 JSON 配置中添加以下配置开始适配:{ "componentFramework": "glass-easel...

phpstrom设置 打开项目 可以在新窗口中打开项目,替换当前窗口中的项目,或者将项目附加到已经打开的项目。您想如何打开项目? 不再询问(D)

phpstrom设置 打开项目 可以在新窗口中打开项目,替换当前窗口中的项目,或者将项目附加到已经打开的项目。您想如何打开项目? 不再询问(D)

打开项目 可以在新窗口中打开项目,替换当前窗口中的项目,或者将项目附加到已经打开的项目。您想如何打开项目? 不再询问(D)  在phpstorm 我点了 不在询问,我现在想 继续弹出这个...