netstat-Konsolenbefehl->Pipe ohne Popup?



  • Hallo!

    Ich brauche die IP-Adresse einer aktiven Verbindung auf einem vorgegebenen Port (z.B. 9999) in meinem C++-Programm.

    Mein Weg bisher:
    Mit _popen den netstat-Konsolenbefehl aufrufen und über die Pipe die Ausgabe auslesen und die IP-Adresse raussuchen. Das funktioniert auch soweit.

    Mein Problem:
    Bei jedem Konsolenaufruf über _popen wird kurz das Konsolenfenster geöffnet, und das darf nicht passieren.

    Mein Code:

    CString IP = "";
    FILE *in;
    char buff[512];
    if ((in = _popen("netstat -n -p TCP", "r")))
    {
       while (fgets(buff, sizeof(buff), in) != NULL )
       {
          IP.AppendFormat("%s", buff);
       }
       _pclose(in);		
       if (IP.Find(":9999") > 0)
       {
          IP = IP.Left(IP.Find(":9999")).MakeReverse().SpanIncluding("0123456789.").MakeReverse();
       }
       else
       {
          IP = "";
       }
    }
    

    Hat jemand eine Idee, wie ich das Konsolenfenster unterdrücken kann?
    Vielleicht netstat mit CreateProcess aufrufen?
    Aber wie komme ich dann an die Pipe-Ausgabe?
    Den Umweg über eine Dateiausgabe wollte ich meiner Festplatte eigentlich ersparen.
    Oder komme ich vielleicht über eine WinAPI-Funktion direkt an die aktiven Verbindungen ran ohne sie zu stören (wenn dann bitte möglichst idiotensicher erklären, habe (noch) keinen Plan von WinSockets & Co)?

    Vielen Dank

    Jannik



  • Es gibt eine WinAPI-Funktion zum Ausführen von Befehlen und Programmen, die die Ausgabe des Konsolenfenster unterdrücken kann. Sie heißt, glaub ich, ShellExecute() o. ä. (einfach mal in der Online MSDN suchen ;)).

    Allerdings dürfte es auch einen einfacheren Weg geben die IP-Adresse auszulesen. Leider weiß ich jetzt die Funktion nicht auswendig, da ich schon einige Zeit nichts mehr mit Netzwerkprogrammierung zu tun hatte :(. Am besten einfach mal bei den WinSocket-Funktionen suchen. Da müsste es eine entsprechende Funktion o. ä. geben.

    Viel Erfolg!


Anmelden zum Antworten