Why is my localhost not 127.0.0.1 but ::1, and what notation is that?

143,725

Solution 1

This is because ping on Windows Vista and newer Windows uses IPv6 by default when available. ::1 is a shortened notation of IPv6 loopback address - equivalent of IPv4 loopback 127.0.0.1.

The full notation of the abbreviated ::1 IPv6 address is 0000:0000:0000:0000:0000:0000:0000:0001.

If you want to force ping to use IPv4 instead you can specify the IPv4 address explicitly or use the -4 option.

ping 127.0.0.1
ping -4 localhost

If you want to change the IPv6/IPv4 preference overall you can check IPv4 vs IPv6 priority in Windows 7.

For additional information you can also see the article localhost.

Solution 2

[::1] is shorthand for loopback address in IPv6. If you would like to disable IPv6 for some reason (I would not advise it, but you may have a specific reason for wanting it), all you need to do is the following (for Windows 7):

  • Start, Control Panel
  • Network and Sharing
  • View Active Network, Local Area Connection, Properties
  • Uncheck the checkbox next to Internet Network Protocol Version 6

If you'd like screenshots, a guide from Microsoft can be found here: link.

Additionally, you may also want to take a look at the Wikipedia Page for IPv6, specifically, Presentation:

The localhost (loopback) address, 0:0:0:0:0:0:0:1, and the IPv6 unspecified address, 0:0:0:0:0:0:0:0, are reduced to ::1 and ::, respectively. This two-colon replacement may only be applied once in an address, because multiple occurrences would create an ambiguous representation.

To summarize, this is basically the equivalent of wanting to write every number 1 to 100, but instead of writing out every number individually, instead you write 1, 2, 3...99, 100 or 1-100

Share:
143,725
Samir
Author by

Samir

Tell me and I forget. Teach me and I remember. Engage me and I learn.

Updated on September 18, 2022

Comments

  • Samir
    Samir over 1 year

    When I use the Ping command against my localhost (on Windows Vista), it doesn't show up as 127.0.0.1.

    C:\Windows\system32>ping localhost
    Pinging GIGA [::1] from ::1 with 32 bytes of data:

    ping pong

    Instead, it shows up as ::1 (pair of colons and a one). What kind of notation is this? And why is it not showing up as 127.0.0.1?

    Here's what I see in the c:\windows\system32\drivers\etc\hosts file.

    ::1             localhost
    127.0.0.1       localhost
    

    As suggested by Gregg I have already tried changing this order.

    127.0.0.1       localhost
    ::1             localhost
    

    The expected result is that 127.0.0.1 would take precedence over ::1 but that was not the case.

    As I have learned now, this can be done by adding a prefix policy instead. To force cmd to use IP version 4 the option -4 can be used. To force Windows to always use IP version 4, IP version 6 or some of its components can be disabled through the properties dialog for the network adapter or through a registry tweak.

  • Admin
    Admin almost 2 years
    See docs.microsoft.com/en-US/troubleshoot/windows-server/network‌​ing/…. Testing also confirms that unchecking the IP6 checkboxes on network adapters no longer works in Windows 10.