在.net 2.0中是否有办法发现运行我的代码的机器的网络别名?具体来说,如果我的工作组将我的机器视为// jekkedev01,我该如何以编程方式检索该名称?
答案 0 :(得分:2)
由于您可以拥有多个网络接口,每个接口可以有多个IP,并且任何一个IP都可以有多个名称可以解析,因此可能有多个。
如果您想知道DNS服务器知道您的计算机的所有名称,您可以像这样循环遍历它们:
public ArrayList GetAllDnsNames() {
ArrayList names = new ArrayList();
IPHostEntry host;
//check each Network Interface
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) {
//check each IP address claimed by this Network Interface
foreach (UnicastIPAddressInformation i in nic.GetIPProperties().UnicastAddresses) {
//get the DNS host entry for this IP address
host = System.Net.Dns.GetHostEntry(i.Address.ToString());
if (!names.Contains(host.HostName)) {
names.Add(host.HostName);
}
//check each alias, adding each to the list
foreach (string s in host.Aliases) {
if (!names.Contains(s)) {
names.Add(s);
}
}
}
}
//add "simple" host name - above loop returns fully qualified domain names (FQDNs)
//but this method returns just the machine name without domain information
names.Add(System.Net.Dns.GetHostName());
return names;
}
答案 1 :(得分:1)
如果您需要计算机描述,则将其存储在注册表中:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
srvcomment
REG_SZ (string)
AFAIK它与任何域名服务器或PC所连接的网络无关。
对于与网络相关的任何内容,我使用以下内容:
System.Environment.MachineName
System.Net.Dns.GetHostName()
System.Net.Dns.GetHostEntry("LocalHost").HostName
如果PC有多个NETBIOS名称,我不知道任何其他方法,只能根据他们解析的IP地址对名称进行分组,如果PC有多个网络接口,这甚至不可靠。
答案 2 :(得分:1)
我不是.NET程序员,但System.Net.DNS.GetHostEntry方法看起来就像你需要的那样。它返回IPHostEntry类的实例,其中包含Aliases属性。
答案 3 :(得分:0)
使用System.Environment课程。它具有用于检索从NetBios检索的计算机名称的属性。除非我误解你的问题。
答案 4 :(得分:0)
或My.Computer.Name