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

zblog12个月前zblog问题解答80

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


相关文章

豆包生成流程图 提示语 ai生图

比例 「4:3」生成 1 张极简风格的线框图,展示‘这硬盘也太烫了吧’的步骤。包含文字“这硬盘也太烫了吧”,UI要漂亮美观,颜色不要单一,要符合web视觉效果,符合网页UI规范,文字清晰规整,箭头要有...

zblog链式sql不支持 ESCAPE  ,但是sqlite 必须要用ESCAPE ,硬改sql不优雅了

zblog链式sql不支持 ESCAPE ,但是sqlite 必须要用ESCAPE ,硬改sql不优雅了

/zb_system/function/lib/zblogphp.php通过用户名获取用户实例(不区分大小写). public function GetMemberByN...

linux修改密码 ssh端口查看

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

zblog的 $this->lang['msg']['operation_failed'],lang到底都配置什么?在哪里查看?都有哪些值?zblog语言包

zblog的 $this->lang['msg']['operation_failed'],lang到底都配置什么?在哪里查看?都有哪些值?zblog语言包

在上一篇文章《zblog函数ShowHint('good')中good是怎么来的?允许哪些,不允许哪些?》源码中有一个 $content = $this->lang[&...

ucs-4 这是啥编码 mb_convert_encoding($content, 'ucs-4', 'utf-8') 啥意思

UCS-4 是一种Unicode字符编码形式,全称为 Universal Character Set - 4 bytes。它是Unicode标准的一种实现,其中每个字符都使用4个字...

(文件名特殊字符过滤)文件夹或文件名字中不能使用的特殊字符共有9个,过滤文件名中的特殊字符,并处理过滤后长度为0的情况

# 过滤文件名中的特殊字符,并处理过滤后长度为0的情况 function guiyi_txt_sanitize_file_name($fileName) {  &n...