首页 新闻 会员 周边

.NET MAUI获取局域网ip

0
悬赏园豆:5 [待解决问题]

var addressList = Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList;
nativeIp = addressList.FirstOrDefault(address => address.AddressFamily == Sockets.AddressFamily.InterNetwork)?.ToString();

使用上面的代码,只有1个127.0.0.1
怎么获取到dhcp分配的类似于192.168.0.111的ip

真-大沙子的主页 真-大沙子 | 初学一级 | 园豆:199
提问于:2023-07-08 22:18
< >
分享
所有回答(3)
0

在使用 .NET MAUI 获取局域网 IP 地址时,可能会遇到只获取到本地回环地址 127.0.0.1 的问题。这是因为 Dns.GetHostEntry 方法默认只返回主机的名称和 IP 地址,而不包括 DHCP 分配的 IP 地址。

要获取 DHCP 分配的 IP 地址,你可以尝试使用 NetworkInterface 类来获取本地网络接口的信息。以下是一个示例代码,可以获取到 DHCP 分配的 IP 地址:

using System.Net.NetworkInformation;

var networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (var networkInterface in networkInterfaces)
{
    if (networkInterface.NetworkInterfaceType == NetworkInterfaceType.Ethernet ||
        networkInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
    {
        var ipProperties = networkInterface.GetIPProperties();
        var unicastAddresses = ipProperties.UnicastAddresses;
        foreach (var unicastAddress in unicastAddresses)
        {
            if (unicastAddress.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
            {
                var dhcpAddress = unicastAddress.Address.ToString();
                // 这里可以对获取到的 DHCP 分配的 IP 地址进行处理或输出
                Console.WriteLine(dhcpAddress);
            }
        }
    }
}

上述代码会遍历所有的网络接口,筛选出以太网和无线网卡接口,并获取每个接口的 IP 属性。然后,通过筛选出 IP 地址族为 InterNetwork 的地址,获取到 DHCP 分配的 IP 地址。

lanedm | 园豆:2381 (老鸟四级) | 2023-07-09 17:11
0

在.NET MAUI中,您可以使用以下方法获取局域网的IP地址:

csharp
Copy code
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;

// ...

public static string GetLocalIPAddress()
{
string ipAddress = string.Empty;

NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface networkInterface in networkInterfaces)
{
    if (networkInterface.NetworkInterfaceType == NetworkInterfaceType.Ethernet ||
        networkInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
    {
        IPInterfaceProperties properties = networkInterface.GetIPProperties();
        foreach (UnicastIPAddressInformation ip in properties.UnicastAddresses)
        {
            if (ip.Address.AddressFamily == AddressFamily.InterNetwork && !IPAddress.IsLoopback(ip.Address))
            {
                ipAddress = ip.Address.ToString();
                break;
            }
        }
    }
    
    if (!string.IsNullOrEmpty(ipAddress))
    {
        break;
    }
}

return ipAddress;

}
上述代码遍历了所有的网络接口,并找到第一个以太网或无线接口(Ethernet 或 Wireless80211)。然后,它获取该接口的 IP 属性,并在其中查找第一个 IPv4 地址(AddressFamily.InterNetwork)并排除回环地址。这样,您将获得局域网的 IP 地址。

您可以调用 GetLocalIPAddress 方法来获取局域网的 IP 地址。

csharp
Copy code
string localIpAddress = GetLocalIPAddress();
Console.WriteLine(localIpAddress);
请注意,由于网络环境和配置可能会有所不同,这种方法仍然可能无法获取正确的 IP 地址。在某些情况下,网络接口可能未配置或未连接到局域网。确保您的设备已正确连接到网络,并且有一个有效的 IP 地址。

Technologyforgood | 园豆:5718 (大侠五级) | 2023-07-09 20:10
0

最近遇到过这个问题,找过很多办法,最后发现还是下面的最好用。

public string GetLocalIPv4()
        {
            try
            {
                Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                s.Connect(new IPEndPoint(IPAddress.Parse("8.8.8.8"), 53));
                string ip = ((IPEndPoint)s.LocalEndPoint).Address.ToString();
                s.Close();
                return ip;
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: " + e.Message);
                return null;
            }
        }
Yu-Core | 园豆:206 (菜鸟二级) | 2023-07-14 02:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册