先说一下在123查上面看到的东西
http://www.123cha.com/ip/?q=172.16.156.76
Ipv6扩展地址 | Ipv6缩略地址 | |
Ipv6表示地址 | 2002:ac10:9c4c:0:0:0:0:0 | 2002:ac10:9c4c:: |
Ipv4映射地址 | 0:0:0:0:0:FFFF:172.16.156.76 | ::FFFF:172.16.156.76 |
Ipv4兼容地址 | 0:0:0:0:0:0:172.16.156.76 | ::FFFF:ac10:9c4c |
看下我本机的路由表
[text]route -6 print
IPv6 Route Table
===========================================================================
Active Routes:
If Metric Network Destination Gateway
20 286 ::/0 fe80::5efe:219.230.144.10
1 306 ::1/128 On-link
15 58 2001::/32 On-link
15 306 2001:0:4137:9e76:819:297e:f5f7:fff1/128
On-link
20 38 2001:da8:1008:6003::/64 On-link
20 286 2001:da8:1008:6003:0:5efe:172.16.156.76/128
On-link
15 306 fe80::/64 On-link
19 296 fe80::5efe:10.8.0.14/128 On-link
20 286 fe80::5efe:172.16.156.76/128
On-link
15 306 fe80::819:297e:f5f7:fff1/128
On-link
1 306 ff00::/8 On-link
15 306 ff00::/8 On-link
===========================================================================
Persistent Routes:
None[/text]
在windows下面,无论是XP还是VISTA/7 都是使用IPv4映射地址来进行表示和设置路由的。
主机先向ISATAP服务器发送路由请求,得到一个64位的IPv6地址前缀(比如我们学校的前缀就是2001:da8:1008:6003),然后再加上64位的接口标识符::0:5EFE:x.x.x.x(这里的x.x.x.x是双栈主机的IPv4单播地址),这样就构成一个ISATAP地址
IPV4映射地址到IPV4兼容缩略地址之间是十六进制转换关系
比如
172 | -> | ac |
16 | -> | 10 |
156 | -> | 9c |
76 | -> | 4c |
可以用下面的shell脚本进行转化(需要先安装Linux下面的计算器bc: apt-get install bc)
[bash]#!/bin/bash
ipv4=172.16.156.76
b='';for id in echo $ipv4|sed 's/\./ /g'
do
b=${b}echo "obase=16;$id"|bc
if [ expr ${#b} % 4
-eq 0 ]; then
b=${b}:;
fi
done
echo $b |tr 'A-Z' 'a-z'
[/bash]
无论是windows还是linux,都可以直接使用IPV4映射地址进行IPV6隧道的人工配置,
Linux的手工配置方法可以看这里只不过Linux配置完毕后,用ifconfig看到的都是兼容地址,还有最著名的BT软件μtorrent链接peers的时候也是使用的兼容地址,
在windows下面,手工配置isatap隧道地址的方法如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@echo off set interface=isatap.{0A26141A-77D1-41BC-942A-423FD94902EF} set prefix="2001:da8:1008:6003" set ip="219.230.144.212" set gateway="219.230.144.254" set isataprouter="219.230.144.10" route add %isataprouter% %gateway% for /f " tokens=2 delims='\s' " %%a in ('"netsh int ipv6 show addr %interface% | findstr /r ^Address.*Parameters$"') do netsh int ipv6 del addr %interface% %%a netsh int ipv6 add addr %interface% fe80::5efe:%ip% netsh int ipv6 add addr %interface% %prefix%:0:5efe:%ip% netsh int ipv6 isa s s d netsh int ipv6 isa s s e pause |
顺便说一下shell里面十进制转换为其他进制的方法
[bash]#二进制转换10进制
((n=2#11111111));echo $n
#16进制华为10进制
((n=16#ac));echo $n
[/bash]