Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 要启动IP的IP和子网结束IP_Php_Javascript - Fatal编程技术网

Php 要启动IP的IP和子网结束IP

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^

所以我有一个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^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 regex


  • 转换为number
    ip_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
      }
    }