Поиск сетевого псевдонима в .net - PullRequest
1 голос
/ 12 сентября 2008

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

Ответы [ 5 ]

2 голосов
/ 27 октября 2008

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

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

1 голос
/ 23 октября 2008

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

  • ключ: 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-адреса, к которому они разрешены, и даже это ненадежно, если у ПК несколько сетевых интерфейсов.

0 голосов
/ 12 сентября 2008

или My.Computer.Name

0 голосов
/ 12 сентября 2008

Используйте класс System.Environment . У него есть свойство для получения имени компьютера, которое извлекается из NetBios. Если я не понимаю ваш вопрос.

...