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隧道地址的方法如下
@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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echooff
setinterface=isatap.{0A26141A-77D1-41BC-942A-423FD94902EF}
setprefix="2001:da8:1008:6003"
setip="219.230.144.212"
setgateway="219.230.144.254"
setisataprouter="219.230.144.10"
routeadd%isataprouter%%gateway%
for/f" tokens=2 delims='\s' "%%ain('"netsh int ipv6 show addr %interface% | findstr /r ^Address.*Parameters$"')donetshintipv6deladdr%interface%%%a
netshintipv6addaddr%interface%fe80::5efe:%ip%
netshintipv6addaddr%interface%%prefix%:0:5efe:%ip%
netshintipv6isassd
netshintipv6isasse
pause
顺便说一下shell里面十进制转换为其他进制的方法
[bash]#二进制转换10进制
((n=2#11111111));echo $n
#16进制华为10进制
((n=16#ac));echo $n
[/bash]