当前位置 : 主页 > 网络编程 > PHP >

IP地址子网掩码计算

来源:互联网 收集:自由互联 发布时间:2021-06-30
IP地址子网掩码计算,返回IP段起止范围、长度、掩码等信息。 1. [代码] 功能函数 /** * 掩码计算器 * @author WeakSun 52132522@qq.com * @param string $ip IP * @param numeric $bits 掩码 * @return array 返回结
IP地址子网掩码计算,返回IP段起止范围、长度、掩码等信息。

1. [代码]功能函数    

/**
 * 掩码计算器
 * @author WeakSun <52132522@qq.com>
 * @param string $ip IP
 * @param numeric $bits 掩码
 * @return array 返回结果集
 */
function netmask($ip, $bits = 24) {
	$result = [
		'start' => 0, //第一个IP
		'end' => 0, //最后一个IP
		'length' => 0, //包含的IP个数
		'netmask' => (~pow(2, 32 - $bits)) + 1, //子网掩码
		'networkSegment' => 0, //IP段
		'bcast' => 0//广播地址
	];
	$result['length'] = abs($result['netmask']) - 2;
	$result['networkSegment'] = ip2long($ip) & $result['netmask'];
	$result['start'] = $result['networkSegment'] + 1;
	$result['end'] = $result['networkSegment'] + $result['length'];
	$result['bcast'] = $result['end'] + 1;
	return $result;
}

2. [代码]功能测试    

list($ip, $bits) = explode('/', '192.168.1.5/25');
$tmpArr = netmask($ip, $bits);
foreach ($tmpArr as $k => &$v) {
	$k != 'length' && $v = long2ip($v);
}
echo '<pre>' . var_export($tmpArr, true).'</pre>';

3. [代码]执行结果    

<pre>array (
  'start' => '192.168.1.1',
  'end' => '192.168.1.126',
  'length' => 126,
  'netmask' => '255.255.255.128',
  'networkSegment' => '192.168.1.0',
  'bcast' => '192.168.1.127',
)</pre>
网友评论