IP格式轉換功能程式碼分享
阿新 • • 發佈:2019-02-10
/*
*
*最近在工作當中遇到一個IP轉換的功能,需要對各種格式ip進行轉換求出IP的取值範圍,換成aaa.bbb.ccc.ddd的形式
*需要轉換的資料格式有:
*(1)192.168.1.0/15
*(2)192.168.1.0/255.255.255.0
*(3)10000300-11000000
*
*在實現功能的時候,用到下面兩個方法,分享給大家。(方法來自同事的分享)
*
*/
//該方法是根據IP+網路位數來計算IP的區間範圍
//舉例資料:192.168.1.0/15
function ip_parse($ip_str){
$mark_len=32;
if(strpos($ip_str,'/')>0){
list($ip_str,$mark_len)=explode("/",$ip_str);
}
$ip=ip2long($ip_str);
$mark=0xFFFFFFFF<<(32-$mark_len)&0xFFFFFFFF;
$ip_start=$ip & $mark;
$ip_end=$ip | (~$mark) & 0xFFFFFFFF;
return array($ip,$mark,$ip_start,$ip_end);
}
list($ip,$mark,$ip_start,$ip_end)=ip_parse('192.168.1.0/15');
echo "IP".long2ip($ip)."\n";
echo "子網掩碼".long2ip($mark)."\n";
echo "子網掩碼".long2ip($ip_start)."\n";
echo "子網掩碼".long2ip($ip_end)."\n";
//該方法是根據IP+子網掩碼來計算出Ip的區間範圍
//舉例資料:192.168.1.0/255.255.255.0
$ip_addr='192.168.1.0';
$subnet_mask='255.255.255.0';
$ip=ip2long($ip_addr);
$nm=ip2long($subnet_mask);
$nw=($ip & $nm);
$bc=$nw | (~$nm);
echo "IP ADDRESS ".long2ip($ip)."\n";
echo "Subnet Mask ".long2ip($nm)."\n";
echo "Network Address ".long2ip($nw)."\n";
echo "Broadcast Address ".long2ip($bc)."\n";
echo "Host Range ".long2ip($nw+1)."-".long2ip($bc-1)."\n";
/*
*php內建的關於IP的轉換的函式long2ip()和ip2long()
*/
ip2long(string ip_address) ---將IPv4的地址轉換成Int,如果ip地址非法,返回false
long2ip(int proper_address) ---將Int型表示的ip地址表示成aaa.bbb.ccc.ddd的形式
Tips:
使用ip2long()的時候,返回值是Int,所以地址轉換成數字後有可能變成負數,此時我們需要換成無符號的Int;
解決辦法:sprintf("%u",ip2long($ip_address));