سؤال

هل هناك طريقة في .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 تبدو الطريقة مثل ما تحتاجه.تقوم بإرجاع مثيل لـ IPHostEntry الطبقة التي تحتوي على اسماء مستعارة ملكية.

استخدم ال النظام. البيئة فصل.وله خاصية استرداد اسم الجهاز، والذي يتم استرجاعه من NetBios.إلا إذا كنت أسيء فهم سؤالك.

أو My.Computer.Name

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top