【发布时间】:2016-06-21 09:23:07
【问题描述】:
我需要通过 Windows 8 WinRT/Metro 应用了解我的实际本地 IP 地址(即不是环回地址)。我需要这个有几个原因。最简单的是,在应用程序的 UI 中,我想显示一些文本,例如“您的本地网络 IP 地址是:[从代码查询的 IP]”。
我们还将地址用于一些额外的网络通信。这些通讯是完全有效的,因为如果我查看控制面板中的 IP 地址,然后将其硬编码到应用程序中,它们都可以正常工作。在对话框中要求用户查看地址并手动输入它是我非常非常想避免的事情。
我认为以编程方式获取地址不会是一项复杂的任务,但我的搜索引擎和 StackOverflow 技能都空了。
此时,我开始考虑进行 UDP 广播/侦听循环,以听取我自己的请求并从中提取地址,但这看起来确实是一个 hackey kludge。在新的 WinRT 东西中是否有 API 可以让我到达那里?
请注意,我说的是“WinRT 应用程序。这意味着像 Dns.GetHostEntry 或 NetworkInterface.GetAllInterfaces() 这样的典型机制不起作用。
【问题讨论】:
-
Windows 只知道接口,如果有人将本地网络 IP 地址分配给网络设备,那就是地址(它完全有效)。你到底想用IP地址做什么?除了接口知道的 IP 地址之外,您不太可能对任何内容进行 UDP 广播/侦听,而该地址通常是在所述网络之外无效的本地网络地址。
-
@Ramhound:不确定我应该看什么——而且这个文档与我在 Consumer Preview 和 VS11 Beta 中看到的行为不符。例如,文档显示
NetworkIntrface.GetAllNetworkInterfaces()应该可以工作,但它不存在。
标签: c# windows-runtime