Einfangen nslookup Schale Ausgang mit C #

stimmen
6

Ich habe einen Prozess Befehlszeile Ich mag würde in C # automatisieren und zu erfassen.

In der Befehlszeile, I-Typ:

nslookup

Dies bringt eine Schale, die mir eine> prompt gibt. An der Eingabeaufforderung gibt Sie mich dann:

ls -a mydomain.local

Dies gibt eine Liste der lokalen CNAMEs von meinem primären DNS-Server und die physikalischen Maschinen, die sie gebunden sind.

Was würde Ich mag zu tun ist, diesen Prozess von C # automatisieren. Wenn dies ein einfacher Befehl, würde ich nur verwenden Process.StartInfo.RedirectStandardOutput = true, aber das Erfordernis einer zweiten Stufe Auslösung mir.

Veröffentlicht am 09/12/2008 um 18:37
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
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. 
Beantwortet am 09/12/2008 um 18:48
quelle vom benutzer

stimmen
2

Nicht das, was Sie gefragt, aber ich schrieb einmal eine App, die tat, was du tust. Ich zog schließlich eine .NET-Bibliothek unter Verwendung der DNS-Lookups zu tun, die viel schneller entpuppte.

Ich bin mir ziemlich sicher , dass ich verwenden diese Bibliothek aus der Codeproject - Website.

Beantwortet am 09/12/2008 um 19:27
quelle vom benutzer

stimmen
1

Ich weiß, das ist ein alter, aber immer noch beitragen mögen. Ich benutzen die Shell-Ausgabe von „NsLookup Hostnamen Server“, um die IPv4-Adressen zu erhalten von einem Computer in unserem Gebiet und Streifen aus anderen Informationen wie DNS-Server / IPv6-Adressen ..

Dies ist ein bisschen schnell gemacht, aber es funktioniert, gibt es auch eine hinzugefügt Failover, wenn die Schale nicht, dass Sie die eingebauten nslookup Methode von C # verwenden würden.

es ist ziemlich lang, aber es gab mir die Möglichkeit, die IPv4- aus der Schale zu lesen, ohne eine externe Bibliothek mit oder ohne die in nslookup Funktion gebaut mit, wie es den DNS-Server wählen, nicht zulässt.

Wenn Sie über die, wenn Schleifen in der Mitte fragen, könnte es elegantere Lösungen sein, aber für meinen persönlichen Gebrauch, das ausgearbeitet recht gut, die meisten Wirte in unserer Domäne ergaben 2 IPv6- und 2 ipv4, ist es daher bis zu 4 mal testen .

Hoffe, dass dies helfen kann ..

    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;
        }
    }


}

}

Beantwortet am 06/07/2011 um 15:14
quelle vom benutzer

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