为什么必须有一个子网掩码?因为:
1 )当配置 IP 时,所有计算机都必须填写子网掩码
2 )我们必须在我们的网络中设置一些逻辑边界
3 )我们必须至少输入所使用 IP 类的默认子网掩码
某IP地址为192.168.5.0/24,这是一种基于CIDR划分的IP地址,最后的/24表示前24位是网络号,后8位是主机号。同时也表示掩码为24位,即子网掩码为255.255.255.0,使用2进制排列就是11111111.11111111.11111111.00000000,根据掩码算术,使用IP地址与掩码逻辑与,即为网络地址。
https://blog.csdn.net/apanious/article/details/51014374
PHP 高级过滤器
$ip = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334"; if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) { echo("$ip 是一个 IPv6 地址"); } else { echo("$ip 不是一个 IPv6 地址"); }
https://www.w3cschool.cn/php/ar6jqfl6.html
/** * Validates an IPv6 address * * @param string $value Value to check against * @return boolean True when $value is a valid ipv6 address * False otherwise */ protected function _validateIPv6($value) { if (strlen($value) < 3) { return $value == '::'; } if (strpos($value, '.')) { $lastcolon = strrpos($value, ':'); if (!($lastcolon && $this->_validateIPv4(substr($value, $lastcolon + 1)))) { return false; } $value = substr($value, 0, $lastcolon) . ':0:0'; } if (strpos($value, '::') === false) { return preg_match('/\A(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}\z/i', $value); } $colonCount = substr_count($value, ':'); if ($colonCount < 8) { return preg_match('/\A(?::|(?:[a-f0-9]{1,4}:)+):(?:(?:[a-f0-9]{1,4}:)*[a-f0-9]{1,4})?\z/i', $value); } // special case with ending or starting double colon if ($colonCount == 8) { return preg_match('/\A(?:::)?(?:[a-f0-9]{1,4}:){6}[a-f0-9]{1,4}(?:::)?\z/i', $value); } return false; }
/** * Validates an IPv4 address * * @param string $value */ protected function _validateIPv4($value) { $ip2long = ip2long($value); if($ip2long === false) { return false; } return $value == long2ip($ip2long); }