I am working on a project related to networking/compression. One of the machines is Windows Vista, which already has IPv6 configured.
When I try ipconfig
, I see an address in the following format: fe80::9dc8:72fa:aacd:76e2%10
But when I try to ping this machine from another with ping fe80::9dc8:72fa:aacd:76e2%10
, I get the following error:
Ping request could not find host fe80::9dc8:72fa:e327:76e2%10.
Please check the name and try again.
Any ideas/comments are very helpful.
The
%10
after the address is called the scope zone. When you use link-local IPv6 addresses, the scope zone is required so that the system knows which interface to send the packet out on.On Windows, if you issue the
netsh interface ipv6 show addresses
command, you'll see the addresses assigned to the system complete with their zone IDs. Notice that the zone IDs match the interface index. For example:This address is scoped
%22
because it is on an interface whose index is22
. Similarly, on Linux, you might see a link-local address likefe80::15c3:6bea:aaac:a016%eth0
. The format of the zone ID is unique to each individual machine running IPv6, which is why it might be different if you try the ping from the other system.For example, if you have:
... and you want to ping the Linux box from the Windows box, you cannot do
ping fe80::15c3:6bea:aaac:a016%eth0
. But you can doping fe80::15c3:6bea:aaac:a016%22
. This is the problem. Link-local addresses can be tricky in this way.Try specifying the correct zone ID. That is, when you do your
ping fe80::9dc8:72fa:aacd:76e2%10
, first donetsh interface ipv6 show addresses
on the machine you are pinging from, and change the%10
to the interface index for whichever interface you want to use on the source system.If the machine you are pinging from is Linux, you will have to do
ping6 -I eth0 fe80::9dc8:72fa:aacd:76e2
(assuming the other system is oneth0
), because the Linux command-line utility does not support the%
way of specifying the zone (the last time I checked, anyway).Ideally you should set up an IPv6-capable router on your network to do router advertisements, so that you can use stateless address auto-configuration (SLAAC) and get global unicast addresses. Then this will not be an issue.
you cannot ping ipv6 addresses with the classic ping utility, only ipv4 addresses. linux has a commandline tool called
ping6
to ping ipv6 addresses, windows probably has something similar. a little research told me that windows usesping -6
for pinging ipv6 addresses.The number after % is the interface name. if you open the status->detail of your network interface, you will see the ipv6 link-local address, with the %xx at the end of the address, which is the index of the interface, in case you want to find the index for some application. The System Information or ipconfig might just give you different index numbers, at least on my Windows 7 Pro, which is very confusing. The description you get from the OS could also be wrong.