Wie IP_ADAPTER_GATEWAY_ADDRESS nutzen



  • Hallo zusammen,

    ich bin recht neu in C++, habe aber durchaus einige Erfahrung in anderen Programmiersprachen.
    Als kleine Aufgabe zum Einstieg in die Sprache habe ich mir überlegt ein kleines Tool zu programmieren, welches die Gatewayadresse der NIC ermittelt und anpingt.
    Leider weiß ich weder wie ich die Sache angehen soll, noch ob ich überhaupt richtig in der "WinAPI" Sektion bin. Ersteinmal mein Code:

    #include <string>
    #include <cstring>
    #include <stdlib.h>
    
    using namespace std;
    
    string getGatewayAddress();
    
    int main(){
    
    	const char * chrGatewayAddress = getGatewayAddress().c_str(); //diese Umwandlung scheint auch nicht richtig zu funktionieren
    
    	system("color 02"); //Matrix-Fan :)
    	system("cls");
    	system(("ping " + chrGatewayAddress + " -t"));
    	//system("ping 10.0.0.1 -t"); //so sollte es aussehen wenn es fertig ist
    	return 0;
    
    }
    
    string getGatewayAddress(){
    
    	//was zur Hölle muss hier rein?
    
    	return "10.0.0.1";
    
    }
    

    Ich bin durch google auf diese Seite gestoßen. Ist das eine Windows-Api, oder ist das die Struktur eines Objektes welche ich verwenden muss wenn ich <winsock2.h> include?

    Ich bin sehr verwirrt und würde mich über ein Lösung mit ausführlicher Erklärung freuen 🙂



  • Steht doch in der von dir verlinkten Doku: Die Struktur wird von GetAdaptersAddresses befüllt.
    Wie man GetAdaptersAddresses richtig aufruft ist nun nicht ganz einfach, aber dafür gibt es dazu ja auch ein schönes Beispiel auf der Seite zu GetAdaptersAddresses .

    Das Beispiel musst du natürlich etwas anpassen und erweitern. z.B. wirst du das Flag GAA_FLAG_INCLUDE_GATEWAYS mitgeben müssen.
    Im Ergebnis sollte dann - zumindest für manche Adapter - der Eintrag

    PIP_ADAPTER_GATEWAY_ADDRESS_LH FirstGatewayAddress;

    != NULL sein.
    Und überall wo der nicht NULL ist zeigt er auf eine IP_ADAPTER_GATEWAY_ADDRESS Struktur wo das erste Gateway von dem jeweiligen Adapter drinnen steht. Wenn der Next Zeiger dieser Struktur ebenfalls != NULL ist, dann zeigt er auf eine weitere IP_ADAPTER_GATEWAY_ADDRESS Struktur usw. bis Next == NULL .

    Du gehst also die Einträge für alle Adapter durch, und für jeden Adapter nochmal die Einträge für alle Gateways. Dann hast du eine Liste aller Gateways. Dann kannst du dir aussuchen welches davon du anpingen willst 😉

    (Ich weiss ehrlich gesagt nicht wie gross die Chancen sind auf nem normalen PC mehrere Gateways zu haben. Ich hätte gesagt sehr gering... bloss ich weiss nicht wie das aussieht wenn man z.B. nen VPN Tunnel offen hat. Wie z.B. wenn man ein ADSL Modem ohne Router verwendet.)


Log in to reply