0
IPHostEntry HostInformation = Dns.GetHostEntry(Dns.GetHostName());
//IPAddress IP = HostInformation.AddressList[0].MapToIPv4();
Console.WriteLine(IP.ToString());

Using the above snippet I'm trying to get the IPV4 Address of the current user running the application, my network interface has IPV6 Enabled also. HostInformation is getting populated with a V6 Address:

fe80::d168:1665:65c:7c2e%12

When trying to get:

192.168.0.2

MapToIPV4 returns:

6.92.124.46

Having:

        foreach (var Element in HostInformation.AddressList)
        {
            Console.WriteLine(Element + "\n\n");
        }

Shows Four addresses:

fe80::d168:1665:65c:7c2e%12

fe80::448:ff7:a313:2477%18

192.168.0.2

2001:0:5ef5:79fb:448:ff7:a313:2477

So with that logic, HostInformation.AddressList[2]; would contain my results. But, would that always be a V4 Address? Will the third element in the array always be present? So overall. How to seek the array to find the V4 Address and return the appropriate index?

Daryl Gill
  • 5,464
  • 9
  • 36
  • 69

1 Answers1

1

After searching the documentation based on the comment by @500-InternalServerError I have developed this:

    public IPAddress GetIPV4(IPHostEntry HostInformation)
    {
        IPAddress[] IP = HostInformation.AddressList;
        int index = 0;
        foreach (IPAddress Address in IP)
        {
            if (Address.AddressFamily.Equals(AddressFamily.InterNetwork))
            {
                break;
            }
            index++;
        }
        return HostInformation.AddressList[index];
    }

With being invoked by:

IPAddress IP = GetIPV4(Dns.GetHostEntry(Dns.GetHostName()));

Tested and working on 3 machines each with interfaces/addresses spanning from the 1 V4 to 4 Addresses

Daryl Gill
  • 5,464
  • 9
  • 36
  • 69