احصل على عنوان IP الخاص بجهاز C# مع تثبيت الجهاز الظاهري

StackOverflow https://stackoverflow.com/questions/1599025

  •  22-09-2019
  •  | 
  •  

سؤال

أرغب في الحصول على عنوان IP الحالي للكمبيوتر الذي يقول 3 أجهزة افتراضية (VM Ware) المثبتة. أريد الحصول على عنوان LAN لهذا الكمبيوتر.

الكود الحالي الذي أظهر لي صفيفًا ولكن كيفية تحديد عنوان LAN الحالي؟

public static string getThisCompIPAddress()
    {
        IPAddress[] addresslist = Dns.GetHostAddresses(Dns.GetHostName());
        return (addresslist[0].ToString());


    }

تقوم قائمة العنوان بإرجاع مجموعة من 3 عناوين IP

هل كانت مفيدة؟

المحلول 3

public static ArrayList getThisCompIPAddress()
    {
        ArrayList strArrIpAdrs = new ArrayList();
        ArrayList srtIPAdrsToReturn = new ArrayList();
        addresslist = Dns.GetHostAddresses(Dns.GetHostName());
        for (int i = 0; i < addresslist.Length; i++)
        {
            try
            {
                long ip = addresslist[i].Address;
                strArrIpAdrs.Add(addresslist[i]);
            }
            catch (Exception ex) 
            {
                Console.WriteLine(ex.Message);
            }

        }

        foreach (IPAddress ipad in strArrIpAdrs)
        {

            lastIndexOfDot = ipad.ToString().LastIndexOf('.');
            substring = ipad.ToString().Substring(0, ++lastIndexOfDot);
            if (!(srtIPAdrsToReturn.Contains(substring)) && !(substring.Equals("")))
            {
                srtIPAdrsToReturn.Add(substring);
            }
        }

        return srtIPAdrsToReturn;
    }

هذا يعمل بنسبة 100 ٪ ، وكانت المشكلة الحقيقية هي أنه كان يرمي الخطأ أثناء حساب العنوان الذي يعود طويلاً. رمز الخطأ هو 10045

نصائح أخرى

يمكنك تجربة NetworkIngface الفصل ، وحاول مطابقة الاسم أو العنوان الفعلي لاتصال الشبكة المحلية لمعرفة العنوان الحقيقي. ربما البحث في هذا الفصل وأعضاء يمكنك العثور على شيء يناسب احتياجاتك.

فيما يلي طريقة بسيطة لتوفير بعض معلومات الاستخدام:

using System.Net.NetworkInformation;

...

static void ViewNetworkInfo()
{
    NetworkInterface[] networks = NetworkInterface.GetAllNetworkInterfaces();
    foreach (NetworkInterface nw in networks)
    {
        Console.WriteLine(nw.Name);
        Console.WriteLine(nw.GetPhysicalAddress().ToString());

        IPInterfaceProperties ipProps = nw.GetIPProperties();
        foreach (UnicastIPAddressInformation ucip in ipProps.UnicastAddresses)
        {  
            Console.WriteLine(ucip.Address.ToString());
        } 

        Console.WriteLine();
     }
     Console.ReadKey();
}

لقد جربت جميع الحلول أعلاه ، لكنني لم أستطع الحصول على عنوان IP من الجهاز "الحقيقي" وليس الافتراضي. لقد تمكنت من استخدام هذا للحصول على IP من الجهاز الظاهري:

IPAddress[] addresslist = Dns.GetHostAddresses(Environment.ExpandEnvironmentVariables("%CLIENTNAME%"));

السبب في أنني استخدمته بهذه الطريقة هو أن الدالة dns.gethostaddresses تُرجع علق المضيف المحدد ، لذلك إذا كنت تستخدم وظيفة dns.gethostname () ، فستقوم بإرجاع اسم الآلات الافتراضية وليس الجهاز المحلي ، ولكن باستخدام الجهاز المحلي ، ولكن باستخدام الجهاز اسم الجهاز الذي يمكنك العثور عليه باستخدام: البيئة. ExpandenVironmentVariables ("٪ ClientName ٪") يمكنك الحصول على اسم العميل وليس اسم الآلة الافتراضية ، وبهذه الطريقة يمكنك الحصول على عنوان IP الحقيقي لجهازك المحلي.

آمل أن يساعد هذا.

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