php實現ipv4轉換ipv6
php實現ipv4轉換ipv6
首先ipv6是什麼?
IPv6是下一版本的網際網路協議,也可以說是下一代網際網路的協議,它的提出最初是因為隨著網際網路的迅速發展,IPv4定義的有限地址空間將被耗盡,地址空間的不足必將妨礙網際網路的進一步發展。為了擴大地址空間,擬通過IPv6重新定義地址空間。IPv4採用32位地址長度,只有大約43億個地址,估計在2005-2010年間將被分配完畢,而IPv6採用128位地址長度,幾乎可以不受限制地提供地址。
ipv4轉換ipv6原理:
我們知道 ipv4的地址是32位二進位制用點分十進位制表示。
而ipv6的地址是128位二進位制 通常用8組16進位制數表示。
所以,想要寫出相容的ipv6地址。 只需要把32位的ipv4地址 轉化成十六進位制寫法就可以了。
也就是說前面96位都是0,後面32位用ipv4的地址表示出來就可以。(其中::表示全是零)
php實現ipv4轉換ipv6程式碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
例如百度www.baidu.com 的ipv4是220.181.111.85,<br />將它轉換成ipv6:<br /> <?php function getNormalizedIP( $ip ) {
if (( $ip == `0000:0000:0000:0000:0000:0000:0000:0001` ) OR ( $ip == `::1` )) {
$ip = `127.0.0.1` ;
}
$ip = strtolower ( $ip );
// remove unsupported parts
if (( $pos = strrpos ( $ip , `%` )) !== false) {
$ip = substr ( $ip , 0, $pos );
}
if (( $pos = strrpos ( $ip , `/` )) !== false) {
$ip = substr ( $ip , 0, $pos );
}
$ip = preg_replace( "/[^0-9a-f:.]+/si" , `` , $ip );
// check address type
$is_ipv6 = ( strpos ( $ip , `:` ) !== false);
$is_ipv4 = ( strpos ( $ip , `.` ) !== false);
if ((! $is_ipv4 ) AND (! $is_ipv6 )) {
return false;
}
if ( $is_ipv6 AND $is_ipv4 ) {
// strip IPv4 compatibility notation from IPv6 address
$ip = substr ( $ip , strrpos ( $ip , `:` ) + 1);
$is_ipv6 = false;
}
if ( $is_ipv4 ) {
// convert IPv4 to IPv6
$ip_parts = array_pad ( explode ( `.` , $ip ), 4, 0);
if ( count ( $ip_parts ) > 4) {
return false;
}
for ( $i = 0; $i < 4; ++ $i ) {
if ( $ip_parts [ $i ] > 255) {
return false;
}
}
$part7 = base_convert (( $ip_parts [0] * 256) + $ip_parts [1], 10, 16);
$part8 = base_convert (( $ip_parts [2] * 256) + $ip_parts [3], 10, 16);
$ip = `::ffff:` . $part7 . `:` . $part8 ;
}
// expand IPv6 notation
if ( strpos ( $ip , `::` ) !== false) {
$ip = str_replace ( `::` , str_repeat ( `:0000` , (8 - substr_count( $ip , `:` ))). `:` , $ip );
}
if ( strpos ( $ip , `:` ) === 0) {
$ip = `0000` . $ip ;
}
// normalize parts to 4 bytes
$ip_parts = explode ( `:` , $ip );
foreach ( $ip_parts as $key => $num ) {
$ip_parts [ $key ] = sprintf( `%04s` , $num );
}
$ip = implode( `:` , $ip_parts );
return $ip ;
} $myip = "220.181.111.85" ;
echo `<b style="color:#00f">` .getNormalizedIP( $myip ). `</b>` ;
?> |
本文轉自許琴 51CTO部落格,原文連結:http://blog.51cto.com/xuqin/1204722,如需轉載請自行聯絡原作者
相關文章
- IPv4如何轉換為IPv6?
- IPv4到IPv6的轉換
- IPv4到IPv6的轉換技術(上):IPv6和IPv4對比
- IPv4向IPv6轉換的幾種技術分析
- IPv4如何向IPv6過渡?IPv6過渡轉換技術有哪些?
- 中科三方:IPv4向IPv6轉換的幾種技術分析
- 淺談IPv4/IPv6地址轉換技術-中科三方
- 【中科三方】IPv4向IPv6轉換的幾種技術分析,IPv6的優點
- IPv4與IPv6
- 透過IPv6隧道實現天翼云云主機IPv4和IPv6雙棧接入
- IPv4 與 IPv6 的比較
- Common class for judge IPV6 or IPV4
- ipv4和ipv6的區別
- IPv4與IPv6有哪些區別?
- IPv4耗盡已成事實,IPv6的未來已來
- 淺談IPv4至IPv6演進的實施路徑
- 利用cloudflare實現純IPV4環境訪問家裡IPV6公網的群暉Cloud
- IPv6轉換技術是什麼?淺談IPv6轉換的兩種技術方式
- IPv6 VS IPv4,談談升級 IPv6 的必要性
- IPv4與IPv6的區別有哪些?
- 為什麼要用ipv6取代ipv4呢
- ipv6相對於ipv4的改進
- centos7怎麼關閉ipv6僅使用ipv4?centos7關閉ipv6僅使用ipv4教程CentOS
- Ipv6轉換難點分析之一:協議轉換技術協議
- ipv4與ipv6的聯絡與區別
- php實現圖片旋轉PHP
- php實現pdf轉圖片PHP
- PHP轉換emoji表情為HTML字元實體PHPHTML字元
- java 實現文字格式轉換Java
- 星型轉換實現方法
- IPv6改造方案:協議轉換技術協議
- IPv6轉換常見問題盤點
- 工信部發落實IPv6行動計劃 未來全面取代IPv4了
- ipv4和ipv6無網路訪問許可權 ipv4連線正常ipv6無網路訪問許可權訪問許可權
- 【中科三方】IPv6轉換技術是什麼?淺談IPv6轉換的兩種技術方式
- IPv4升級IPv6,IPv6優點之層次化的地址結構
- IPv4與IPv6:網際網路面臨分裂嗎?
- 使用kubeadm部署高可用IPV4/IPV6叢集