微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何testing主机名称是否指本地机器

任何人都可以想到一个简单的方法来告诉在win32或.NET如果主机名(string)parsing到本地计算机? 如:

"myhostname" "myhostname.mydomain.local" "192.168.1.1" "localhost"

这个练习的目的是产生一个testing,告诉Windows安全层是否将本机或networking的访问权限视为机器

如何最大限度地减lessWindows内存使用量

用C#下载文件

wasabi阻止Azure缩放收集数据的频率如何?

c#如何使用新版本的助手API

C#不写入设置

在.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地址进行比较。 这不是你想要的吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐