在应用程序中获取WinRT设备的公共IP地址

时间:2014-10-13 12:10:29

标签: c# c#-4.0 windows-runtime winrt-async

我需要知道运行我的应用的设备的公共IP地址。该应用程序是Windows Store WinRT / Metro应用程序。

使用:NetworkInformation.GetInternetConnectionProfile和NetworkInformation.GetHostNames我能够检索本地IP地址而不是公共。

最后,我找到了http://freegeoip.net/xml/这是一个公共REST API,用于搜索IP地址和主机名的地理位置。但这不是一个可行的解决方案,我想知道我是否遗漏了什么?或者如果有更简单的方法?

1 个答案:

答案 0 :(得分:2)

查找外部IP地址的一种简单方法是在互联网上使用开放服务。

例如,这可以从这里获取:Getting the external IP address但适合在WinRT中工作

Task<string> result = GetExternalIP();    
string externalIP = (new Regex(@"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"))
                        .Matches(result.Result)[0].ToString();
......

public async Task<string> GetExternalIP()
{
   HttpClient http = new System.Net.Http.HttpClient();
   HttpResponseMessage response = await http.GetAsync("http://www.realip.info/api/p/realip.php");
   return await response.Content.ReadAsStringAsync();
}

如果您直接在浏览器中尝试该网址,您将获得一个包含此内容的简单HTML页面

{"IP":"150.37.216.15"}

然后正则表达式只提取IP信息150.37.216.15