Erhalte den Ping von einem Remote-Ziel mit Qt (Windows / Linux)

8

Momentan verwende ich diesen Code zum Abrufen des Ping eines Zielsystems. Allerdings funktioniert es bisher nur unter Linux und ist wahrscheinlich abhängig von den Gebietsschemaeinstellungen. Das Hinzufügen von Unterstützung für Windows wird wahrscheinlich noch komplizierter. Gibt es einen einfachen Weg oder eine Bibliothek, um den Ping eines Zielsystems zu erhalten? Ich arbeite hauptsächlich mit Qt, also wäre es ideal, wenn ich mit QSockets arbeiten könnte.

%Vor%     
dgrat 08.04.2014, 11:06
quelle

3 Antworten

2

Sie müssten Ihren Code dafür ohne QAbstractSocket schreiben. Kurz gesagt, diese Basisklasse wurde nicht für diesen Anwendungsfall entwickelt.

Der Grund ist, dass Sie rohe Sockets verwenden und als root ausführen müssen; Das ist auch der Grund, warum Sie normalerweise das Setuid-Flag in der ausführbaren Ping-Datei von Linux sehen.

ICMP ist "verbindungslos" und daher ist die Qt-Klasse nicht dafür geeignet, da es keine Daten an einen bestimmten Host sendet usw.

Sie können die ausführlichere Erklärung hier lesen.

>     
lpapp 08.04.2014, 19:42
quelle
12

Sie können sowohl Windows als auch Linux mit diesem Befehl anpingen:

%Vor%     
Nejat 08.04.2014 12:29
quelle
7

Nejats Code funktionierte auch nicht für mich. Vielleicht ist es Windows-spezifisch (getestet unter Windows 7 x64 + Qt 5.6). Der Ping-Befehl scheint Parameter und Werte zu unterscheiden und benötigt diese beim Erstellen von QProcess.

Anstatt also "-n 1" auf einmal zu übergeben, müssen Sie "-n" und "1" getrennt übergeben.

Grundsätzlich wäre es mit Nejats Code:

%Vor%

Getestet und funktioniert jetzt.

    
Bob_74 28.06.2016 22:21
quelle