任何人都可以想到一个简单的方法来告诉在win32或.NET如果主机名(string)parsing到本地计算机? 如:
"myhostname" "myhostname.mydomain.local" "192.168.1.1" "localhost"
这个练习的目的是产生一个testing,告诉Windows安全层是否将本机或networking的访问权限视为机器
在.NET中,您可以:
IPHostEntry iphostentry = Dns.GetHostEntry (Dns.GetHostName ());
然后,对于任何主机名,检查它是否解析到iphostEntry.AddressList
(这是一个IPAddress [])中的一个IP。
这是一个完整的程序,将检查在命令行中传递的主机名/ IP地址:
using System; using System.Net; class Test { static void Main (string [] args) { IPHostEntry iphostentry = Dns.GetHostEntry (Dns.GetHostName ()); foreach (string str in args) { IPHostEntry other = null; try { other = Dns.GetHostEntry (str); } catch { Console.WriteLine ("Unknown host: {0}", str); continue; } foreach (IPAddress addr in other.AddressList) { if (IPAddress.IsLoopback (addr) || Array.IndexOf (iphostentry.AddressList, addr) != -1) { Console.WriteLine ("{0} IsLocal", str); break; } } } } }
这个问题已经被回答了,但是这里是我想出来解决主机名和IP地址:
public static bool IsLocalHost(string host) { IPHostEntry localHost = Dns.GetHostEntry(Dns.GetHostName()); IPAddress ipAddress = null; if (IPAddress.TryParse(host, out ipAddress)) return localHost.AddressList.Any(x => x.Equals(ipAddress)); IPHostEntry hostEntry = Dns.GetHostEntry(host); return localHost.AddressList.Any(x => hostEntry.AddressList.Any(y => x.Equals(y))); }
您可以通过编写Dns.Resolve(hostName).AddressList[0].ToString()
来获取主机名解析的IP地址。
然后,您可以将其与127.0.0.1
或计算机的本地IP地址进行比较。
您可以通过循环System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName()).AddressList
来获取计算机的本地IP地址。
我从PhilDulac
稍微更新了一些解决方案,首先检查localhost是否在hosts/etc
定义了一些别名,其他部分是PhilDulac
解决方案。
public static bool IsLocalHost(Uri uri) { bool isLocalhost = false; string hostName = uri.Host; IPHostEntry localhost = Dns.GetHostEntry("127.0.0.1"); if (uri.Host == localhost.HostName) { IPHostEntry hostEntry = Dns.GetHostEntry(hostName); isLocalhost = hostEntry.AddressList.Any(IPAddress.IsLoopback); } if (!isLocalhost) { localhost = Dns.GetHostEntry(Dns.GetHostName()); IPAddress ipAddress = null; if (IPAddress.TryParse(hostName, out ipAddress)) isLocalhost = localhost.AddressList.Any(x => x.Equals(ipAddress)); if (!isLocalhost) { try { var hostEntry = Dns.GetHostEntry(hostName); isLocalhost = localhost.AddressList.Any(x => hostEntry.AddressList.Any(x.Equals)); } catch (SocketException e) { Debug.WriteLine(e); } } } return isLocalhost; }
在.net中,你应该可以使用Request.serverVariables(“REMOTE_ADDR”); 获取主机IP地址,然后将其与主机名解析的IP地址进行比较。 这不是你想要的吗?