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!