Ping Returns IPv6 Address, Ping IPv4?

If your computer and a remote device are located on the same IP network, or VLAN, or subnet– you will probably notice that if you ping such a device by its hostname it will return an IPv6 address. For example, I am trying to ping Windows Server on my network with the command:

Ping srv01

Pinging srv01.contoso.com [fe80::c09::d4e6::189f::f661%3] with 32 bytes of data

Reply from fe80::c09::d4e6:189f:f661%3: time<1ms

Reply from fe80::c09::d4e6:189f:f661%3: time<1ms

ping ipv4

Ping Returning an IPv6 address Instead of IPv4

The fact is that the IPv6 protocol in Windows Vista and newer is the preferred protocol over IPv4.

If you want to still see an IPv4 address of a remote device in the ping command result, then simply use the command below:

ping hostname -4

Simply add a parameter “-4” after your usual ping command:

Ping srv01 -4

Pinging srv01.contoso.com [192.168.10.21] with 32 bytes of data

Reply from 192.168.10.21: bytes=32 time<1ms TTL=128

Reply from 192.168.10.21: bytes=32 time<1ms TTL=128

ping returns ipv6

As you can see, the ping command returned standard IPv4 address.

How to Force Windows To Use IPv4 Over IPv6?

If the client trying to access remote server using an ICMP protocol (ping, telnet or pathping commands) and it the returns the IPv6 address, or there are some problems with the operation of some legacy applications, there is a more advanced solution.

READ ALSO  Tips on How to Speed Up Laptop or Computer on Windows 10

The solution is to increase the priority of the IPv4 over the IPv6 protocol. You can use such a solution without need to completely disable the IPv6 on a source and target host.

The solution doesn’t require a reboot, it takes effect immediately. You need to open an elevated Command Prompt, and run 2 commands:

netsh interface ipv6 set prefix ::/96 60 3

netsh interface ipv6 set prefix ::ffff:0:0/96 55 4

For example on a clean Windows Server 2016 instance, run these two commands and perform ping request again:

Pinging srv01.contoso.com [192.168.10.21] with 32 bytes of data

Reply from 192.168.10.21: bytes=32 time<1ms TTL=128

Reply from 192.168.10.21: bytes=32 time<1ms TTL=128

ping ipv4 cmd

As you can see, the result changed dramatically in the direction we needed. The remote server began to return an IPv4 address (192.168.10.21) instead of IPv6. Now we’ll check that the server is still pinging by its IPv6 address, and we didn’t break anything:

ping fe80::c09::d4e6:189f:f661%3

ping ipv4 only

Everything works as it should be.

You can also change the preferred IP protocol from GUI. To do it, open Control Panel > Network and Internet > Network Connections > Advanced > Advanced Settings.

ping ip4

Select your network connection and using the green button set the IPv4 protocol above IPv6. You should perform this operation for all available bindings.

READ ALSO  How to Fix The Program Can't Start Because VCRUNTIME140.dll is Missing?

windows ping ipv4

Tip. The “Adapters and Bindings” dialog box is missing in the newest Windows 10 and Windows Server 2016/2019. The another way to change the default TCP/IP stack from IPv6 to IPv4 on these OSs is through the registry. Open the elevated command prompt and run the command:

reg.exe add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters /v DisabledComponents /t REG_DWORD /d 0x20 /f

cmd ping ipv4

or you can change the value of the DisabledComponents to 0x20 via the Regedit.exe. This value allows you to prefer an IPv4 protocol over IPv6 by changing entries in the prefix policy table.

15 comments

  1. is there a way to change it so that it responds on IPv4, by default? I don’t want to disable IPv6, but do not want to use it at all
    Thanks!

    1. If you are not using IPv6 there is no reason to have it enabled. To disable it, go to Network Connections, right click Properties on your NIC and then uncheck “Internet Protocol Version 6 (TCP/IPv6).
      Hope that helps! There is no way unfortunately to default to IPv4 like in command prompt.

      1. Unchecking the protocol binding is not sufficient to disable IPv6. It will seem to work at first, but you will eventually run into strange network problems that seem to defy any explanation. This is ESPECIALLY true for servers. To properly disable IPv6, see KB929852. The “Fix It” MSI available from this KB article is suitable for GPO deployment, no need to create a custom ADMX.

      2. That does not disable IPv6 totally. You can do the following to disable it totally: Create a DWORD entry named DisabledComponents in HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpip6Parameters and give it the value 0xffffffff

        Abdeslam Mazouz
        Network Security
        Minnesota

  2. hell yeah…

    Thank you dude! Helped me very much right now!!
    Till now i had to disable ipv6, reboot and at least but not last change the computername (in a automated tailoring of my system). Now i can rename after disabling, without a reboot!

    Thank you (again)

    greez

  3. There is a easier method that works for me. I just changed the interface metric # to determine its priority. I had used this method in the past to change priority of network adapters (Wireless NIC priority first, LAN NIC priority second), but I found out it works on TCP/IPv4 and TCP/IPv6 as well. In this case, I changed the interface metric of TCP/IPv4 from Automatic to 5, and TCP/IPv6 interface metric from Automatic to 10. The lower the metric number, the higher its priority. Then restart your PC. So now whenever I ping using the hostname, it will reply from IPv4, instead of Ipv6.

  4. Well sh!t. How would you know.

    This helped sort an (yet another) issue with MSDTC between 2 clusters (linked servers)

    So thank you so very much!.

  5. In my environment (1 windows server 2008 R2 domain controller with Windows 7 pro and Windows 10 Pro client computers) was having the following issues:
    *Pinging the server by hostname on the server itself returned only ipv6 response (ipv6 disabled)
    *Pinging a Windows 10 client pc by hostname or ip address from the server timed out
    *Windows 10 client pc’s would lose drive mappings to server; would need to manually re-connect mapped drives and enter credentials to access data
    *Running the 2 Netsh commands resolved all issues and network, server and clients all performing normally ;)
    *Elegant and simple fix- Thanks!!

  6. After doing that I see ::/96 at the top of the list and ::ffff:0:0/96 second. I ping the local computer by name and resolves to the IPv4 address. However, I reboot and ping is back to IPv6 address even though the ONLY entries in the table are now ::/96 and ::ffff:0:0/96 (netsh interface ipv6 show prefixpolicies). My problem is that some software installs a Tomcat webserver and attempting to connect to it on the same computer does not work. If I keep manually replacing the computer name in the URL with localhost, I eventually get to the login screen but the integral UAA login is expecting ComputerName.admin and is just not working. Exact same setup works on a Windows 7 computer.

  7. I have tested this commands on many PCs in my environment and it works but on my pc don’t.
    After setted prefix to prefer ipv4 with dos command it continue to ping ipv6 address.
    The prefix is the following and seems to be correct:
    60 3 ::/96
    55 4 ::ffff:0:0/96
    I have the regedit voice setted too but it pings ipv6.
    Any ideas?

    Thanks

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.