HostName anhand der IP eines Rechners ermitteln



  • Hallo,
    ich habe ein Programm, dass die IP der Rechner im Netzwerk samt MAC anzeigt. Dieses Programm soll aber auch den Host Namen anzeigen.

    Nun finde ich aber nicht die Passende WinAPI und hoffe auf Hilfe von euch.

    MFG



  • Poste mal nen bisschen Code, hört sich interessant an 😉

    ansonsten:
    anhand der Winsock-Funktionen gethostbyaddr und gethostbyname. Wie man sich unschwer vorstellen kann, benötigt die eine die IP-Addr, die Andere den Namen des Hosts. Die Definitionen der beiden Funktionen:

    struct HOSTENT FAR * gethostbyaddr (
    const char FAR * addr,
    int len,
    int type
    );

    Parameters:
    -----------
    addr: A pointer to an address in network byte order.
    len: The length of the address.
    type: The type of the address.

    struct hostent FAR * gethostbyname (
    const char FAR * name
    );

    Parameters:
    -----------
    name: A pointer to the null-terminated name of the host to resolve.

    Wie man nun erkennen kann, liefern beide Funktionen einen Pointer auf einen Struktur zurück, die wie folgt definiert ist:

    struct hostent {
    char FAR * h_name;
    char FAR * FAR * h_aliases;
    short h_addrtype;
    short h_length;
    char FAR * FAR * h_addr_list;
    };

    Members:
    --------

    h_name:
    Official name of the host (PC).If using the DNS or similar resolution system, it is the Fully Qualified Domain Name (FQDN) that caused the server to return a reply. If using a local "hosts" file, it is the first entry after the IP address.

    h_aliases:
    A NULL-terminated array of alternate names.

    h_addrtype:
    The type of address being returned.

    h_length:
    The length, in bytes, of each address.

    h_addr_list:
    A NULL-terminated list of addresses for the host. Addresses are returned in network byte order. The macro h_addr is defined to be h_addr_list[0] for compatibility with older software.

    Diese Funtionen nun anzuwenden, dürfte kein Problem mehr sein. Wer sich jedoch schon stark an die Klassen-orientierte MFC gewöhnt hat, und auch Klassen verwenden will, der sollte sich Inside Visual C++ kaufen und die dort selfmade-Klasse CBlockingSocket (CSocket-MFC-Ersatz) verwenden. In dieser Klasse sind 2 statische Methoden, GetHostByAddr und GetHostByName definiert, welche wiederum die Winsock-Funktionen aufrufen, nur komfortabler zu verwenden sind.



  • Hallo,

    HOSTENT RemoteHost, *ptRemoteHost;
    			addr.S_un.S_addr = inet_addr("192.168.1.1");
    			ptRemoteHost = gethostbyaddr((char*) &addr, 4 , AF_INET);
    

    in der Struct Hostent werden nach dem Aufruf nur NULL Pointer zurückgegeben. WSAGetLastError gibt ebenfalls eine 0 zurück(Kein Fehler!?).

    Oder hab ich bei meinen Code nen Fehler eingebastelt?

    MFG



  • Hallo,

    das Thema interresiert mich auch.

    HOSTENT *ptHost;
         IN_ADDR addr;
         addr.S_un.S_addr = inet_addr("127.0.0.1"); //Localhost
         ptHost = gethostbyaddr((char*)&addr, sizeof(addr) , AF_INET);
         if(ptHost != NULL)
         	Edit1->Text = ptHost->h_name;
         else
         	Edit1->Text = "Failed";
    

    Warum zum Teufel bekomme ich hier immer eine NULL Pointer zurück?



  • hostent *ptHost;
         WSAData stData;
         IN_ADDR addr;
         if(WSAStartup(0x0101, &stData) == 0)
         {
         addr.S_un.S_addr = inet_addr("192.168.1.1"); //Localhost
         ptHost = gethostbyaddr((char*)&addr, sizeof(addr) , AF_INET);
         if(ptHost != NULL)
             Edit1->Text = ptHost->h_name;
         else
             Edit1->Text = "Failed";
         }
         WSACleanup();
    

    Hatte vergessen WinSock zu starten 🙂 , was passiert da eigentlich genau
    wird hier die DLL in den Speicher geladen?



  • http://www.c-worker.ch/tuts/select.php
    nette seite..

    und für technische semidetails
    http://www.zotteljedi.de/permalinks/socket-tipps

    und NULL im Fehlerfall.

    grüüüße


Anmelden zum Antworten