Encontrando alias de rede em .net
-
09-06-2019 - |
Pergunta
Existe uma maneira no .net 2.0 de descobrir o alias de rede da máquina em que meu código está sendo executado?Especificamente, se meu grupo de trabalho vê minha máquina como //jekkedev01, como recupero esse nome programaticamente?
Solução
Como você pode ter várias interfaces de rede, cada uma delas com vários IPs, e qualquer IP único pode ter vários nomes que podem ser resolvidos, pode haver mais de um.
Se você quiser saber todos os nomes pelos quais seu servidor DNS conhece sua máquina, você pode percorrer todos eles assim:
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;
}
Outras dicas
Se você precisar da descrição do computador, ela será armazenada no registro:
- chave:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
- nome do valor:
srvcomment
- tipo de dados:
REG_SZ (string)
AFAIK não tem nada a ver com nenhum servidor de domínio ou com a rede à qual o PC está conectado.
Para qualquer coisa relacionada à rede, estou usando o seguinte:
- Nome NETBIOS:
System.Environment.MachineName
- nome de anfitrião:
System.Net.Dns.GetHostName()
- Nome DNS:
System.Net.Dns.GetHostEntry("LocalHost").HostName
Se o PC tiver vários nomes NETBIOS, não conheço outro método a não ser agrupar os nomes com base no endereço IP para o qual eles resolvem, e mesmo isso não é confiável se o PC tiver várias interfaces de rede.
Não sou um programador .NET, mas o System.Net.DNS.GetHostEntry método se parece com o que você precisa.Ele retorna uma instância do Entrada IPHost classe que contém o Apelido propriedade.
Use o Sistema.Ambiente aula.Possui uma propriedade para recuperar o nome da máquina, que é recuperado do NetBios.A menos que eu esteja entendendo mal sua pergunta.
ou Meu.Computador.Nome