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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top