.net 2.0 中有没有办法发现运行我的代码的机器的网络别名?具体来说,如果我的工作组将我的机器视为 //jekkedev01,我如何以编程方式检索该名称?
Jekke
问问题
1768 次
5 回答
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;
}
于 2008-10-27T10:14:46.683 回答
1
如果您需要计算机描述,它存储在注册表中:
- 钥匙:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
- 值名称:
srvcomment
- 数据类型:
REG_SZ (string)
AFAIK 它与任何域服务器或 PC 所连接的网络无关。
对于与网络相关的任何内容,我使用以下内容:
- NETBIOS 名称:
System.Environment.MachineName
- 主机名:
System.Net.Dns.GetHostName()
- DNS 名称:
System.Net.Dns.GetHostEntry("LocalHost").HostName
如果 PC 有多个 NETBIOS 名称,我不知道任何其他方法,只能根据它们解析到的 IP 地址对名称进行分组,如果 PC 有多个网络接口,即使这样也不可靠。
于 2008-10-23T09:08:13.690 回答
1
我不是 .NET 程序员,但System.Net.DNS.GetHostEntry方法看起来像您需要的。它返回包含 Aliases 属性的IPHostEntry类的实例。
于 2008-10-23T20:43:42.147 回答
0
使用System.Environment类。它有一个用于检索机器名称的属性,该名称是从 NetBios 中检索的。除非我误解了你的问题。
于 2008-09-12T18:46:59.627 回答
0
或 My.Computer.Name
于 2008-09-12T19:12:00.177 回答