Αποκόμιση nslookup εξόδου κέλυφος με C #

ψήφοι
6

Έχω μια διαδικασία γραμμής εντολών θα ήθελα να αυτοματοποιήσουν και να συλλάβει σε C #.

Στη γραμμή εντολών, πληκτρολογήστε Ι:

nslookup

Αυτό ξεκινά ένα κέλυφος το οποίο μου δίνει ένα> prompt. Στη γραμμή εντολών, που στη συνέχεια, πληκτρολογήστε:

ls -a mydomain.local

Αυτό επιστρέφει μια λίστα με τα τοπικά CNAMEs από κύριο διακομιστή DNS μου και τις φυσικές μηχανές που συνδέονται με.

Αυτό που θα ήθελα να κάνουμε είναι να αυτοματοποιήσει τη διαδικασία αυτή από την C #. Εάν αυτό ήταν μια απλή εντολή, θα χρησιμοποιούσα μόνο Process.StartInfo.RedirectStandardOutput = αλήθεια, αλλά η απαίτηση δεύτερο βήμα είναι να μου τρικλοποδιά.

Δημοσιεύθηκε 09/12/2008 στις 18:37
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
7

ProcessStartInfo si = new ProcessStartInfo("nslookup");
si.RedirectStandardInput = true;
si.RedirectStandardOutput = true;
Process nslookup = new Process(si);
nslookup.Start();
nslookup.StandardInput.WriteLine("ls -a mydomain.local");
nslookup.StandardInput.Flush();
// use nslookup.StandardOutput stream to read the result. 
Απαντήθηκε 09/12/2008 στις 18:48
πηγή χρήστη

ψήφοι
2

Δεν είναι ό, τι ζητήσατε, αλλά έγραψα κάποτε μια εφαρμογή που έκανε ό, τι κάνετε. Εγώ τελικά κινήθηκε προς τη χρήση της βιβλιοθήκης .NET για να κάνει τις αναζητήσεις DNS, το οποίο αποδείχθηκε ότι ήταν μια πολύ πιο γρήγορα.

Είμαι αρκετά σίγουρος ότι χρησιμοποιείται αυτή η βιβλιοθήκη από την περιοχή CodeProject.

Απαντήθηκε 09/12/2008 στις 19:27
πηγή χρήστη

ψήφοι
1

Ξέρω ότι αυτό είναι ένα παλιό, αλλά ήθελα ακόμη να συνεισφέρει. Θα χρησιμοποιηθεί για την έξοδο κέλυφος από το «nslookup Όνομα κεντρικού υπολογιστή διακομιστή» για να πάρει το IPv4 διευθύνσεις από ένα όνομα υπολογιστή στον τομέα μας και να αφαιρέσει οποιαδήποτε άλλη πληροφορία, όπως διευθύνσεις του διακομιστή / IPv6 DNS ..

Αυτό είναι κάπως γρήγορα γίνεται, αλλά λειτουργεί, υπάρχει επίσης ένα failover πρόσθεσε, αν το κέλυφος δεν μπορείτε να χρησιμοποιήσετε την ενσωματωμένη στο nslookup μέθοδο από C #.

είναι αρκετά μεγάλη, αλλά αυτό μου έδωσε τη δυνατότητα να διαβάσει το IPv4 από το κέλυφος χωρίς τη χρήση ενός εξωτερικού βιβλιοθήκη ή χωρίς τη χρήση του ενσωματωμένου στο nslookup λειτουργία, καθώς δεν επιτρέπει να επιλέξετε το διακομιστή DNS.

Αν αναρωτιέστε για το αν βρόχων στη μέση, θα μπορούσε να υπάρχει πιο κομψές λύσεις, αλλά για προσωπική μου χρήση, αυτό λειτούργησε αρκετά καλά, οι περισσότεροι οικοδεσπότες στον τομέα μας έδωσε 2 IPv6 και 2 IPv4, ως εκ τούτου, να το δοκιμάσετε έως και 4 φορές .

Η ελπίδα αυτή μπορεί να βοηθήσει ..

    private void button1_Click(object sender, EventArgs e)
    {
        IPAddress[] ips = NsLookup(computername, dnsserver);

        txtResult.Text = string.Empty;
        if (ips != null)
        {
            txtResult.Text = ips[0].ToString();
            txtResult.Text += Environment.NewLine;
            if (ips[1] != null)
            {
                txtResult.Text += ips[1].ToString();
            }
            else
            {

            }
        }
        else
        {
            txtResult.Text = "No IP found";
        }

    }



    public IPAddress[] NsLookup(string computername, string domaincontroller)
    {

        IPAddress[] ips = new IPAddress[2];

        try
        {
            // Creating streamreaders to read the output and the errors
            StreamReader outputReader = null;
            StreamReader errorReader = null;

            string nslookup = @"C:\Windows\System32\Nslookup.exe";

            try
            {
                // Setting process startupinfo
                ProcessStartInfo processStartInfo = new ProcessStartInfo(nslookup, computername + " " + domaincontroller);
                processStartInfo.ErrorDialog = false;
                processStartInfo.UseShellExecute = false;
                processStartInfo.RedirectStandardError = true;
                processStartInfo.RedirectStandardInput = true;
                processStartInfo.RedirectStandardOutput = true;
                processStartInfo.WindowStyle = ProcessWindowStyle.Minimized;

                // Starting Process
                Process process = new Process();
                process.StartInfo = processStartInfo;
                bool processStarted = process.Start();

                if (processStarted)
                {
                    // Catching the output streams
                    outputReader = process.StandardOutput;
                    errorReader = process.StandardError;

                    string errorresult = errorReader.ReadLine();

                    errorReader.Close();


                    if (errorresult != null)
                    {
                       // Failure got thrown in NsLookup Streamreading, try build-in Method
                       try
                       {
                            ips = Dns.GetHostAddresses(computername);
                            return ips;
                       }
                       catch
                       {
                            return null;
                       }
                }
                else
                {
                    // Clearing out all the values before the addresses.
                    outputReader.ReadLine();
                    outputReader.ReadLine();
                    outputReader.ReadLine();
                    outputReader.ReadLine();

                    // Reading and Verifying the first outputline (the address is found after "Addresses:  ") - 2 part of the array is taken (after second space)
                    string outputline = outputReader.ReadLine();
                    string[] outputlineaftersplit = outputline.Split(' ');
                    string ipfortesting = outputlineaftersplit[2].Trim();

                    if (verifyIP(ipfortesting) != null)      // First entry is ipv4
                    {
                        ips[0] = verifyIP(ipfortesting);

                        outputline = outputReader.ReadLine();
                        ipfortesting = outputline.Trim();

                        if (verifyIP(ipfortesting) != null) // First and second entry are ipv4
                        {
                            ips[1] = verifyIP(ipfortesting);
                            return ips;
                        }
                        else
                        {
                            return ips;
                        }
                    }
                    else
                    {
                        outputline = outputReader.ReadLine();
                        ipfortesting = outputline.Trim();

                        if (verifyIP(ipfortesting) != null)
                        {
                            ips[0] = verifyIP(ipfortesting);

                            outputline = outputReader.ReadLine();
                            ipfortesting = outputline.Trim();

                            if (verifyIP(ipfortesting) != null)
                            {
                                ips[0] = verifyIP(ipfortesting);

                                outputline = outputReader.ReadLine();
                                ipfortesting = outputline.Trim();

                                if (verifyIP(ipfortesting) != null)
                                {
                                    ips[1] = verifyIP(ipfortesting);
                                    return ips;
                                }
                                else
                                {
                                    return ips;
                                }

                            }
                            else
                            {
                                return ips;
                            }
                        }
                        else
                        {
                            outputline = outputReader.ReadLine();
                            ipfortesting = outputline.Trim();

                            if (verifyIP(ipfortesting) != null)
                            {

                                ips[0] = verifyIP(ipfortesting);

                                outputline = outputReader.ReadToEnd();
                                ipfortesting = outputline.Trim();

                                if (verifyIP(ipfortesting) != null)
                                {
                                    ips[1] = verifyIP(ipfortesting);
                                    return ips;
                                }
                                else
                                {
                                    return ips;
                                }

                            }
                            else
                            {
                                ips = null;
                                return ips;
                            }
                        }
                    }
                }
                }

                else
                {
                    // Failure got thrown in NsLookup Streamreading, try build-in Method
                    try
                    {
                        ips = Dns.GetHostAddresses(computername);
                        return ips;
                    }
                    catch
                    {
                        return null;
                    }
                }
            }
            catch
            {
                System.Windows.Forms.MessageBox.Show("ERROR 1");
                // Failure got thrown in NsLookup Streamreading, try build-in Method
                try
                {
                    ips = Dns.GetHostAddresses(computername);
                    return ips;
                }
                catch
                {
                    return null;
                }
            }
            finally
            {
                if (outputReader != null)
                {
                    outputReader.Close();
                }
            }
        }
        catch
        {
            System.Windows.Forms.MessageBox.Show("ERROR 2");
            // Failure got thrown in NsLookup Streamreading, try build-in Method
            try
            {
                ips = Dns.GetHostAddresses(computername);
                return ips;
            }
            catch
            {
                return null;
            }
        }

    }

    public IPAddress verifyIP(string ipfromreader)
    {
        IPAddress ipresult = null;
        bool isIP = IPAddress.TryParse(ipfromreader, out ipresult);

        if (isIP && (ipresult.AddressFamily != AddressFamily.InterNetworkV6))
        {
            return ipresult;
        }
        else
        {
            return null;
        }
    }


}

}

Απαντήθηκε 06/07/2011 στις 15:14
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more