Php 要启动IP的IP和子网结束IP
所以我有一个IP,它的子网是:8.8.8.0/24 如何将其转换为8.8.8.0和8.8.8.255(实际上是它们的ip2long结果)Php 要启动IP的IP和子网结束IP,php,javascript,Php,Javascript,所以我有一个IP,它的子网是:8.8.8.0/24 如何将其转换为8.8.8.0和8.8.8.255(实际上是它们的ip2long结果) 在PHP和JavaScript中,只需将每个IP视为一个带4位数字的base-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^
在PHP和JavaScript中,只需将每个IP视为一个带4位数字的base-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
我想这可能就是你的意思。它将确定给定范围内的所有IP
$ip = '8.8.8.0';
$mask = 24;
$ip_enc = ip2long($ip);
# convert last (32-$mask) bits to zeroes
$curr_ip = $ip_enc | pow(2, (32-$mask)) - pow(2, (32-$mask));
$ips = array();
for ($pos = 0; $pos < pow(2, (32-$mask)); ++$pos) {
$ips []= long2ip($curr_ip + $pos);
}
$ip='8.8.8.0';
$mask=24;
$ip_enc=ip2long($ip);
#将最后(32-$mask)位转换为零
$curr_ip=$ip_enc|pow(2,(32-$mask))-pow(2,(32-$mask));
$ips=array();
对于($pos=0;$pos
我假设您还需要其他面具,如8,16
ip="8.8.8.0/24"
ip\u array=ip.match(/(\d+)\(\d+)\(\d+)(\d+)\(\d+)\/(\d+/)
//js regexip_num=(ip[1]以从斜杠符号生成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);
$range=“8.8.8.0/24”;
$addresses=array();
@列表($ip,$len)=分解('/',$range);
如果($min=ip2long($ip))!==false){
$max=($min |)(1我想对于255.255.255.0的子网掩码,您的意思是8.8.8.0/24。只是澄清一下;您是否要确定给定IP地址和子网掩码的子网id和广播地址?我只需要子网指定范围的起始IP和结束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
}
}