C# 用C语言获取以太网接口的本地IP地址#

C# 用C语言获取以太网接口的本地IP地址#,c#,ip,ethernet,loopback,npcap,C#,Ip,Ethernet,Loopback,Npcap,是否有可靠的方法获取C#中第一个本地以太网接口的IPv4地址 这会查找与以太网适配器关联的本地IP地址,但也会查找Npcap环回适配器(安装用于Wireshark) 类似地,似乎无法使用以下代码区分环回地址和以太网地址之间的差异: var host = Dns.GetHostEntry(Dns.GetHostName()); foreach (var ip in host.AddressList) {.... 还有其他建议吗 以下代码从首选接口获取IPv4。这也应该在虚拟机中起作用 以下代码从

是否有可靠的方法获取C#中第一个本地以太网接口的IPv4地址

这会查找与以太网适配器关联的本地IP地址,但也会查找Npcap环回适配器(安装用于Wireshark)

类似地,似乎无法使用以下代码区分环回地址和以太网地址之间的差异:

var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{....
还有其他建议吗

以下代码从首选接口获取IPv4。这也应该在虚拟机中起作用

以下代码从首选接口获取IPv4。这也应该在虚拟机中起作用


这说明了如何获取机器的主机名地址。(这可能比“第一个”适配器更重要)这没有帮助。它给出了两个地址(以太网卡地址和Npcap环回地址)。这说明了如何获取计算机主机名的地址。(这可能比“第一个”适配器更重要)这没有帮助。它同时提供了两个地址(以太网卡地址和Npcap环回地址)。谢谢-这确实可以很好地工作,但您能否解释一下原因?“Socket Socket=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,0))”它创建了一个无连接的UDP连接,其中将包含您的出站IP地址。然后您将从中获得出站IP。谢谢-这确实非常有效,但您能否解释一下原因?“Socket Socket=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,0))”它将创建一个包含出站IP地址的无连接UDP连接。然后您将从中获取出站IP。
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{....
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
        }
    }