我试图从该机器上运行的代码获取机器的本地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@
有没有明确的方法来做到这一点? @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)