cmd

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.

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.

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.

Comments
  1. Posted by the brain
    • Posted by Brian Jackson
      • Posted by Ronny Ong
      • Posted by AM
  2. Posted by Rod
  3. Posted by Pascal
  4. Posted by Darwin Jacob
  5. Posted by Sam Nguyen
  6. Posted by Steffen
  7. Posted by Paul Betances

Add Your Comment