在.NET中确定本地Intranet IP地址

前端之家收集整理的这篇文章主要介绍了在.NET中确定本地Intranet IP地址前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图从该机器上运行的代码获取机器的本地Intranet ip
有没有明确的方法来做到这一点? @H_301_8@

@H_301_8@我试过获取所有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

@H_301_8@

Dns.GetHostEntry(Dns.GetHostName()).AddressList
@H_301_8@但这对我来说似乎有些神奇,我宁愿.net完成这项工作,由于我安装了VirtualBox,它也会返回多个ips

@H_301_8@我也试过以下

@H_301_8@

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();
@H_301_8@哪个确实有效,但是它能用于其他网络配置吗?

@H_301_8@这一点关系到我hostEntry.HostName.EndsWith(string.Concat(“.”,ni.Name))

@H_301_8@有人有更好的方法吗?

解决方法

您无法可靠地使用单个IP,因为该计算机可能具有多个网卡或每个网卡多个IP.例如,我的笔记本电脑有一个有线网卡和一个无线网卡,很高兴通过DHCP从我的路由器获取两个本地IP. @H_301_8@

@H_301_8@此外,在某些花哨的网络设置(主要是企业环境)中,您可以使用具有不同子网的IP,这些子网能够通过路由器与每个子网进行通信.我可能在办公大楼的#6楼层为192.168.6.X,楼层7为192.168.7.X然后让路由器允许跨多个子网的流量,尽管它们被子网掩码屏蔽掉了.

@H_301_8@更好的策略是获取本地IP列表,过滤环回地址(127.0.0.1),然后尝试连接到目标计算机.

@H_301_8@但是,如果您只是想将本地IP检测为“不在互联网上公开”,您可以尝试使用1跳的生存时间(TTL)来ping公共地址(可能是您的网络服务器?).如果存在任何路由器,这将不会通过任何路由器,这意味着如果它无法在1跳或更少的时间内到达公共互联网,表明它位于防火墙后面,它将会失败.

@H_301_8@在stackoverflow上查看这个很棒的答案,其中包括代码Check if IP is in LAN (behind firewalls and routers)

猜你在找的Windows相关文章