IP Adresse herausfinden mit Gethostbyname



  • Hallole.
    Ich versuche die IP Adresse herauszufinden über einen PC-Namen.
    Ich habe ein Programm, daß sich per Windows-Socket zu einer Software verbindet und mit dieser kommuniziert.
    Bisher konnte man in der *.ini Datei die IP Adresse zum Server angeben, möchte aber daß man auch den Rechnernamen angeben kann.

    ICh hab folgendes gemacht:

    ....
    //IP/PC Name einlesen
    GetPrivateProfileString("WTERM","ip","NULL",eingabe,15,fname);
    ...
    struct sockaddr_in addr;
    struct hostent *host;
    ...
    host = gethostbyname(eingabe);
    if (!host)
    {
        herror("gethostbyname() failed");
        return 1;
    }
    ...
    addr.sin_addr = *(struct in_addr*) host->h_addr;
    

    Das hab ich vom Zotteljedi.
    Nur wo habe ich dann die IP Adresse?
    Ich sollte die IP Adresse als char haben.

    Kann mir da jemand helfen?

    Danke mal Mondmann



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Nach Deiner 15. Zeile kannst Du mit inet_ntoa die IP-Adresse auslesen:

    char* ip = inet_ntoa(addr.sin_addr);
    


  • Ok werd ich mal testen.
    Das ist ja ein String den ich da einlese mit GetPrivateProfileString.

    Wie kann ich nun rausfinden ob der User den Rechnernamen oder die IP eingetragen hat?



  • Wahrscheinlich musst Du überprüfen, ob die Angabe eine IP sein könnte.
    z.B. bei IPv4 sollten da 3 Punkte vorkommen,
    die Zahlen neben den Punkten dürfen nicht größer 255 sein etc.

    Oder Du lässt den Benutzer an einer anderen Stelle in der ini eintragen, ob es eine IP ist oder nicht.



  • Hab auf der MSDN was gefunden die prüfen das mit

    if (isalpha(ip[0]))
    

    Ich kenns zwar nicht,aber es funktioniert einwandfrei.
    Mit deim Tip konnte ich nun die IP auslesen, vielen Dank.
    Ich verstehs zwar noch nicht ganz,aber da kommt noch.
    Grüße Mondmann



  • Mach einfach vorher testweise inet_addr() drauf. Wenn inet_addr() 0 bzw. INADDR_NONE zurückliefert DANN probier gethostbyname. Wenn das auch nicht geht kannste die Adresse nicht auflösen (weil es sie z.B. nicht gibt).


Anmelden zum Antworten