在.NET中确定本地Intranet IP地址
我试图从该机器上运行的代码获取机器的本地Intranet ip
有没有明确的方法来做到这一点? 我试过获取所有IP并过滤 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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用R 3.0.0 for Windows中的{diagram}的流程图
- windows – 同时重命名和域加入机器的风险是什么(如果有的话
- windows-phone-8 – 用于获取Windows Phone 8设备友好名称的
- 注销策略中的Windows Server清除
- windows-phone-7 – 将文件扩展名与wp7.1中的app相关联
- windows – 在C#中创建Cron作业
- 在Windows 7上运行Delphi 2007和Delphi 2010 IDE有问题吗?
- Windows – 事件ID 9331 MSExchangeSA和事件ID 9335 MSExch
- windows-7 – 使用Powershell创建Windows快捷方式,目标路径
- windows – Wincachegrind给出错误