因此,我有一个子网为8.8.8.0/24的IP
如何将其转换为8.8.8.0和8.8.8.255 (实际上是它们的ip2long结果)
在PHP和JavaScript中
发布于 2010-01-08 15:26:14
我假设你还需要其他的口罩,比如8,16,...
ip="8.8.8.0/24"ip_array=ip.match(/(\d+)\.(\d+)\.(\d+)\.(\d+)\/(\d+)/) //js正则表达式ip_num = (ip[1]<<24)+(ip[2]<<16)+(ip[3]<<8)+(+ip[4]) //# 0x08080800mask=(1<<(32-ip[5]))-1 //# 0xFFip_num | mask将是0x080808FF,8.8.8.255ip_num & (0xffffffff ^ mask)将是0x08080800,即8.8.8.0ip_num转换回ip字符串发布于 2012-01-16 20:40:43
要从斜杠表示法生成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);要检查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
}
}发布于 2010-01-08 15:01:36
只需将每个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 == 134744319https://stackoverflow.com/questions/2025971
复制相似问题