【发布时间】:2012-08-15 10:24:49
【问题描述】:
我正在尝试从该机器上运行的代码中获取该机器的本地 Intranet ip 有没有明确的方法可以做到这一点?
我已尝试获取所有 IP 并通过以下方式过滤 10.0.0.0-10.255.255.255,172.16.0.0-172.31.255.255,192.168.0.0-192.168.255.255
Dns.GetHostEntry(Dns.GetHostName()).AddressList
但这对我来说似乎有点神奇,我宁愿 .net 完成这项工作,由于我安装了 VirtualBox,它也会返回多个 ip
我也尝试了以下
var localAddress =
(
from ni in NetworkInterface.GetAllNetworkInterfaces()
where ni.NetworkInterfaceType != NetworkInterfaceType.Loopback
&& hostEntry.HostName.EndsWith(string.Concat(".", ni.Name))
let props = ni.GetIPProperties()
from unicastAddress in props.UnicastAddresses
where unicastAddress.Address.AddressFamily == AddressFamily.InterNetwork
select unicastAddress.Address).FirstOrDefault();
哪个有效,但它适用于其他网络配置吗?
这点与我有关hostEntry.HostName.EndsWith(string.Concat(".", ni.Name))
有人有更好的方法吗?
【问题讨论】:
-
如果您告诉我们您打算如何使用此结果,我们可能会建议更好的选择。无法保证特定机器可能使用什么地址,它可能是多宿主的,它可能只是 IPv6 等等,所以当前的“过滤几个范围,希望只得到一个”将永远无法工作.
-
它将被同一网络上的客户端使用,以使用 http 连接到该计算机
-
而且机器名称不起作用?
-
不,不知道为什么,客户端不是域的成员 - 本地 ip 有效,例如192.168.0.22,我可以检查哪些ip是v6,只有在不存在v4时才使用它们,它只是识别我需要的本地Intranet ip
-
事实上,甚至可能没有域 - 这有什么区别吗?
标签: .net ip-address windows-networking