سؤال

مرحبا جميعا. لقد كتبت برنامجا يقوم بمسح أجزاء معينة من الشبكة المحلية بالتتابع بشكل متتابع لأجهزة الكمبيوتر (سيتم توفير الرمز). ومع ذلك، عندما أقوم بتشغيل هذا الرمز، إلا أنه فقط إرجاع اسم مضيف DNS للكمبيوتر قيد التشغيل. نظرت إلى استخدام WMI، لكنني لا أستطيع، كما لن يكون لدي امتيازات دائما لأجهزة الكمبيوتر. هل هناك أي طريقة أخرى للعثور على اسم مضيف أجهزة كمبيوتر محلية؟

using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;

namespace CheckLocalNetwork
{
    class PingCheck
    {
        public static string fullip;

        public void CheckSequentialIP()
        {
            IPHostEntry IpEntry = Dns.GetHostEntry(fullip);

            Ping pingSender = new Ping();

            PingOptions options = new PingOptions();
            options.DontFragment = true;

            string data = "a";
            byte[] buffer = Encoding.ASCII.GetBytes(data);
            int timeout = 120;
            PingReply reply = pingSender.Send(fullip, timeout, buffer, options);

            if (reply.Status == IPStatus.Success)
            {
                Console.WriteLine("Address: {0}", reply.Address.ToString());
                Console.WriteLine("Host Name: {0}", IpEntry.HostName);
                Console.WriteLine("RoundTrip time: {0}", reply.RoundtripTime);
                Console.WriteLine("Time to live: {0}", reply.Options.Ttl);
                Console.WriteLine("Don't fragment: {0}", reply.Options.DontFragment);
                Console.WriteLine("Buffer size: {0}", reply.Buffer.Length);
                Console.WriteLine("");
            }
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Press enter to search for ip adresses that begin with 192.168.1");
            Console.ReadLine();

            for (int endofip = 1; endofip < 101; endofip++)
            {
                fullip = "192.168.1." + Convert.ToString(endofip);
                PingCheck checkfullip = new PingCheck();
                checkfullip.CheckSequentialIP();

            }
            Console.ReadLine();
    }

كل مساعدة هي محل تقدير كبير.

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

المحلول

HMM - يتصرف نموذج التعليمات البرمجية كما هو متوقع على جهازي - أي أنه بإرجاع اسم المضيف للآلة التي يتم فحصها.

للتحقيق في مشكلتك أعمق، هل حاولت استخدام NSLOOKUP للتحقق من حل عناوين IP؟

Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\Rob>nslookup                  <-- type this at a command prompt
Default Server:  mydns.mydomain.co.uk  <--- these two lines indicate the dns server being used to resolve your queries
Address:  192.168.0.1                  <----|

> 192.168.0.5                          <---- type in the ip address of one of the machines in question
Server:  mydns.mydomain.co.uk
Address:  192.168.0.1

Name:    myworkstation.mydomain.co.uk  <---- this is the hostname, as reported by the DNS using a reverse lookup
Address:  192.168.0.5

إذا لم يرجع هذا اسم الجهاز، فقد يكون لديك مشكلة تحليل اسم لا يرتبط برمزك.

إذا كان هذا كل شيء يبدو موافق، فقد يستحق أيضا تعداد IpEntry.Aliases مجموعة. هل هناك أي مداخل هنا، وهل فهي منطقية؟

أخيرا - هل الرمز الذي لديك فوق التعليمات البرمجية بالضبط هو الخطأ الذي يحدث لك، أم أنه مثال "مقطورة"؟ السبب في أنني أسأل هو أن الوثائق ل Dns.GetHostEntry تنص على

"عندما يتم تمرير سلسلة فارغة كاسم مضيف، ترجع هذه الطريقة عناوين IPv4 للمضيف المحلي."

لاحظت أيضا أنك تحمل "Fullip" في ثابت. إذا لم يكن هذا هو الرمز الدقيق الذي يسبب المشكلة، خاصة إذا كان هذا يدير متعدد المراحل, ، هل هناك فرصة لست تهيئة "Fullip" قبل Dns.GetHostEntry يسمى؟

قد أكون خارجي، لكنني فكرت أنه يستحق إعطاء تفريغ الدماغ مما حدث لي كما نظرت إلى مشكلتك :)

[تعديل:] - تعليقك على KDT قد أوضح شيئا أسيء فهمه. أنا فكرت كنت تقول أنك دائما ظهرت اسم المضيف لجهازك المحلي الخاص بك، بغض النظر عن الجهاز الذي قمت بتسجيله "ممسوحة ضوئيا" - وهو سلوك غريب للغاية. في الواقع، أعتقد أنك تقول أنك مجرد استعادة عناوين IP للآلات الأخرى (عنوان IP الخاص بها)، واحصل فقط على اسم مضيف لمحلي. تجاهل آخر قليلا حول الخيوط والوسيطة الفارغة.

هذا هو أكثر من ذلك بكثير من الأوضح - جهازك بالتأكيد تقريبا غير قادر على حل أسماء الآلات - أتوقع اختبار NSLookup الذي اقترحته لن يرجع أسماء الآلات أيضا.

لحل هذه الملكية الفكرية هذه لأسماء المضيفين، تحتاج جهازك إلى DNS التي تحتوي على إدخالات لهذه الآلات، أو أن يكون لهم في ملف المضيفين المحليين؛ جهازك ليس في الواقع يسأل الجهاز البعيد لاسمها عند القيام بهذه المكالمة حتى فاز؛ أن تكون قادرة على العثور عليها دون مساعدة من أحد مسارات حل الاسم المعتادة.

إنه يعمل من أجلي، لأن DNS المحلي الخاص بي حقا لديها إدخالات لجميع الأجهزة على شبكتي، وحل أسماء المضيفين لعناوين IP والعكس العكس.

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