当前位置: 首页 > 知识库问答 >
问题:

C#获取活动NIC IPv4地址

谭凯
2023-03-14

我的计算机上有多个网卡。(因为VMWare)

如何找到活动卡的IPv4地址。我的意思是,如果我在终端中发送ping并在WireShark中拦截数据包,我需要“Source”的地址。

我想过检查每个网络接口,看看GateWay是空还是空?或者可能ping127.0.0.1并获取ping请求的IP源?但无法实现它。

现在我有这个代码,我在StackOverFlow上找到的

 public static string GetLocalIpAddress()
        {
            var host = Dns.GetHostEntry(Dns.GetHostName());
            return host.AddressList.First(h => h.AddressFamily == AddressFamily.InterNetwork).ToString();
        }

但它给了我VmWare卡的IP。但我不知道“.First()”还能用什么。

共有2个答案

童子明
2023-03-14

好吧,我的朋友,你可以做以下事情:

var nics = NetworkInterface.GetAllNetworkInterfaces();
foreach (var networkInterface in nics)
{
    if (networkInterface.OperationalStatus == OperationalStatus.Up)
    {
        var address = networkInterface.GetPhysicalAddress();
    }
}

地址变量允许您访问当前 Up 网络接口的物理地址

薛浩言
2023-03-14

我终于找到了一种获得真正IP的有效方法。基本上,它查找IPv4中的所有接口,这些接口都是UP的,并且使它决定的是它只采用具有默认网关的接口。

public static string GetLocalIpAddress() {
    foreach(var netI in NetworkInterface.GetAllNetworkInterfaces()) {
        if (netI.NetworkInterfaceType != NetworkInterfaceType.Wireless80211 &&
            (netI.NetworkInterfaceType != NetworkInterfaceType.Ethernet ||
                netI.OperationalStatus != OperationalStatus.Up)) continue;
        foreach(var uniIpAddrInfo in netI.GetIPProperties().UnicastAddresses.Where(x => netI.GetIPProperties().GatewayAddresses.Count > 0)) {

            if (uniIpAddrInfo.Address.AddressFamily == AddressFamily.InterNetwork &&
                uniIpAddrInfo.AddressPreferredLifetime != uint.MaxValue)
                return uniIpAddrInfo.Address.ToString();
        }
    }
    Logger.Log("You local IPv4 address couldn't be found...");
    return null;
}

编辑5年后:在此期间,我发现了一个更好的方法来获得本地IP地址。你基本上是向谷歌的DNS服务器(或其他任何服务器)发出一个DNS请求,然后看看你的电脑获得的源IP是什么。

public static string GetLocalIp() {
    using(var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0)) {
        socket.Connect("8.8.8.8", 65530);
        if (!(socket.LocalEndPoint is IPEndPoint endPoint) || endPoint.Address == null) {

            return null;
        }

        return endPoint.Address.ToString();
    }
}
 类似资料:
  • 问题内容: 请问一个简单的问题,我完全是Java和android开发人员的初学者。调用surfaceChanged时,如何在setCameraDisplayOrientation中获取Activity的实例? 问题答案: 这是一种使用静态变量避免内存泄漏的方法:静态引用将在onCreate(Bundle)方法中设置的Activity实例。 在您的中学班级中写下如下内容: 然后在Activity类的

  • 问题内容: 我正在尝试使用哨兵来获取我的主服务器的连接地址,问题是哨兵仅在故障转移时发送该地址,但是如果我的主服务器关闭并且从属服务器被提升为主服务器并且我的应用程序刚刚启动,则不会知道并且不会收到有关原始主服务器已关闭的消息,是否有任何方法可以与哨兵通信,并询问他认为主服务器正在使用C#servicestack redis客户端的人? 问题答案: 不得不这样做,我使用下一个代码段模仿了redis

  • 我正在尝试使用sentinel来获取我的主机的连接地址,问题是sentinel只在故障转移时发送地址,但如果我的主机关闭,而从机被提升为master,而我的应用程序刚刚启动,它将不知道也不会得到原始主机关闭的消息,有没有办法与sentinel通信,并询问他认为master使用的是C#servicestack redis客户机?

  • 库中有一个从javascript(html5应用程序)调用的类。它不能是活动扩展器。该类可以访问活动和WebView对象。 是否可以从这个库类中获取onResume、on暂停和onDestroy活动事件?

  • 我正在试图弄清楚目前有多少连接被打开,但我似乎找不到一个明显的方法来使用Hikari实现这一点。 公开了这些信息(),但我没有看到从访问这些信息的简单方法。

  • 本文向大家介绍C#实现获取MAC地址的方法,包括了C#实现获取MAC地址的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现获取MAC地址的方法,是一个非常常见而且实用的功能,具体方法如下: 主要功能代码如下: 有些项目中出于安全考虑需要获取MAC地址,然后再判断MAC地址是否合法才可以登陆。本文总结的方法希望对大家有所帮助!