ipv4转ipv6地址转换_ipv4与ipv6之间怎么转换

ipv4转ipv6地址转换_ipv4与ipv6之间怎么转换php实现ipv4转换ipv6首先ipv6是什么?IPv6是下一版本的互联网协议,也可以说是下一代互联网的协议,它的提出最初是因为随着互联网的迅速发展,IPv4定义的有限地址空间将被耗尽,地址空间的不足必将妨碍互联网的

php实现ipv4转换ipv6

123534980.jpg

首先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之间怎么转换分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/71632.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注