Вопрос

Есть ли способ в .net 2.0 определить сетевой псевдоним для компьютера, на котором выполняется мой код?В частности, если моя рабочая группа видит мою машину как //jekkedev01, как мне получить это имя программно?

Это было полезно?

Решение

Поскольку у вас может быть несколько сетевых интерфейсов, каждый из которых может иметь несколько 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;
}

Другие советы

Если вам нужно описание компьютера, оно хранится в реестре:

  • Клавиша: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
  • имя значения: srvcomment
  • тип данных: REG_SZ (string)

AFAIK, это не имеет ничего общего ни с каким доменным сервером, ни с сетью, к которой подключен компьютер.

Для всего, что связано с сетью, я использую следующее:

  • Имя NETBIOS: System.Environment.MachineName
  • имя хоста: System.Net.Dns.GetHostName()
  • DNS-имя: System.Net.Dns.GetHostEntry("LocalHost").HostName

Если компьютер имеет несколько имен NETBIOS, я не знаю другого метода, кроме как сгруппировать имена на основе IP-адреса, на который они разрешаются, и даже это ненадежно, если компьютер имеет несколько сетевых интерфейсов.

Я не .NET-программист, но System.Net.DNS.GetHostEntry Система.Сеть.DNS.GetHostEntry метод выглядит так, как вам нужно.Он возвращает экземпляр IPHostEntry класс, который содержит Псевдонимы собственность.

Используйте Система.Окружающая среда класс.У него есть свойство для получения имени компьютера, которое извлекается из NetBIOS.Если только я не неправильно понял ваш вопрос.

или My.Computer.Name

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top