我会假设您还需要其他面具,如8,16,......
ip="8.8.8.0/24"
Run Code Online (Sandbox Code Playgroud)
提取每个部分ip_array=ip.match(/(\d+)\.(\d+)\.(\d+)\.(\d+)\/(\d+)/)// js正则表达式
转换为数字ip_num = (ip[1]<<24)+(ip[2]<<16)+(ip[3]<<8)+(+ip[4])//#0x08080800
mask=(1<<(32-ip[5]))-1 //#0xFF
ip_num | mask 将是0x080808FF,即8.8.8.255
ip_num & (0xffffffff ^ mask) 将是0x08080800,即8.8.8.0
你需要转换ip_num回ip字符串
要从斜杠表示法生成IP地址列表:
$range = "8.8.8.0/24";
$addresses = array();
@list($ip, $len) = explode('/', $range);
if (($min = ip2long($ip)) !== false) {
$max = ($min | (1<<(32-$len))-1);
for ($i = $min; $i < $max; $i++)
$addresses[] = long2ip($i);
}
var_dump($addresses);
Run Code Online (Sandbox Code Playgroud)
要检查IP地址是否在一个范围内:
$checkip = "8.8.8.154";
$range = "8.8.8.0/24";
@list($ip, $len) = explode('/', $range);
if (($min = ip2long($ip)) !== false && !is_null($len)) {
$clong = ip2long($checkip);
$max = ($min | (1<<(32-$len))-1);
if ($clong > $min && $clong < $max) {
// ip is in range
} else {
// ip is out of range
}
}
Run Code Online (Sandbox Code Playgroud)
只需将每个 IP 视为具有 4 位数字的 256 基数。例如,
8.8.8.0 == 8 * 256^3 + 8 * 256^2 + 8 * 256^1 + 0 * 256^0 == 134744064
8.8.8.1 == 8 * 256^3 + 8 * 256^2 + 8 * 256^1 + 1 * 256^0 == 134744065
8.8.8.1 == 8 * 256^3 + 8 * 256^2 + 8 * 256^1 + 2 * 256^0 == 134744066
...
8.8.8.255 == 8 * 256^3 + 8 * 256^2 + 8 * 256^1 + 255 * 256^0 == 134744319
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7841 次 |
| 最近记录: |