Get local IP address of ethernet interface in C#

2020-05-10 02:03发布

Is there a reliable way to get the IPv4 address of the first local Ethernet interface in C#?

foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
    if (nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
    {...

This finds the local IP address associated with the Ethernet adapter but also find the Npcap Loopback Adapter (installed for use with Wireshark).

Similarly, there seems to be no way to tell the difference between the loopback address and the Ethernet address using the following code:

var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{....

Any other suggestions?

1条回答
欢心
2楼-- · 2020-05-10 02:34

The following code gets the IPv4 from the preferred interface. This should also work inside virtual machines.

using System.Net;
using System.Net.Sockets;

public static void getIPv4()
    {
        try
        {
            using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
            {
                socket.Connect("10.0.1.20", 1337); // doesnt matter what it connects to
                IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
                Console.WriteLine(endPoint.Address.ToString()); //ipv4
            }
        }
        catch (Exception)
        {
            Console.WriteLine("Failed"); // If no connection is found
        }
    }
查看更多
登录 后发表回答