加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 05:25:50 所属栏目:Windows 来源:网络整理
导读:我试图从该机器上运行的代码获取机器的本地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 但这对
我试图从该机器上运行的代码获取机器的本地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,它也会返回多个ips

我也试过以下

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))

有人有更好的方法吗?

解决方法

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读