检索设备的IP地址

3

我正在使用Xamarin.Android,并编写了以下代码:

public TextView text;
text = FindViewById<TextView>(Resource.Id.viewIP);
foreach (IPAddress adress in Dns.GetHostAddresses(Dns.GetHostName()))
{
    text.Text = "IP Adress: " + adress;
}

然而,当我打开应用程序时,它立即关闭。我获取设备IP地址的方式正确吗?

4个回答

6

以下来自Xamarin论坛

Java.Util.IEnumeration networkInterfaces = NetworkInterface.NetworkInterfaces;

while(networkInterfaces.HasMoreElements)
{
  Java.Net.NetworkInterface netInterface = 
                            (Java.Net.NetworkInterface)networkInterfaces.NextElement();
  Console.WriteLine(netInterface.ToString());
}

2

添加到清单中:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

获取本地IP的方法:

public static string GetLocalIPAddress()
{
    var host = Dns.GetHostEntry(Dns.GetHostName());
    foreach (var ip in host.AddressList)
    {
        if (ip.AddressFamily == AddressFamily.InterNetwork)
        {
            return ip.ToString();
        }
    }
    throw new Exception("Local IP Address Not Found!");
}

请看这个答案:https://dev59.com/nmw15IYBdhLWcg3wIoVM#6803109

2
你真的想因为那个而抛出异常吗?提示 - 你不需要这样做。 - Jammer

0
我看到这个问题的所有答案都只能获取我的设备在家庭网络中的内部IP地址(198.162.#.#)。因此,我采取了稍微不同的方法,直接向互联网询问。ipify.org有一个很好且简单的端点可以获取您的IP地址,并且可以在您的共享代码中执行。例如...
var client = new HttpClient();
var response = await client.GetAsync("https://api.ipify.org/?format=json");
var resultString = await response.Content.ReadAsStringAsync();

var result = JsonConvert.DeserializeObject<IpResult>(resultString);

var yourIp = result.Ip;

其中,“IpResult”是一个POCO,它有一个名为“Ip”的单个字符串属性(您需要在此代码之外创建该属性)。


1
如果链接某个时刻失效了怎么办?而且有没有任何不需要点击链接就能获取公共IP地址的方法? - Shailesh

0
对我来说,在PCL Xamarin中这个方法有效:
public static string GetIPAddress()
{
    var AllNetworkInterfaces = Collections.List(Java.Net.NetworkInterface.NetworkInterfaces);
    var IPAddres = "";
    foreach (var interfaces in AllNetworkInterfaces)
    {
        if (!(interfaces as Java.Net.NetworkInterface).Name.Contains("eth0")) continue;

        var AddressInterface = (interfaces as Java.Net.NetworkInterface).InterfaceAddresses;
        foreach (var AInterface in AddressInterface)
        {
            if(AInterface.Broadcast != null)
                IPAddres = AInterface.Address.HostAddress;
        }
    }
        return IPAddres;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接