¿Cómo obtener la dirección IP del dominio usando el nombre de dominio en C++?

estoy usando visual c++,

Quiero obtener una dirección IP de dominio del nombre de dominio... ¿cómo lo obtengo? Ya probé la función gethostbyname... aquí mi código...

    HOSTENT* remoteHost;        
    IN_ADDR addr;       
    hostName = "domainname.com"; 
    printf("Calling gethostbyname with %s\n", hostName);
remoteHost =gethostbyname(hostName);
memcpy(&addr.S_un.S_addr, remoteHost->h_addr, remoteHost->h_length);
printf("The IP address is: %s\n", inet_ntoa(addr));

Pero tengo una dirección IP incorrecta.

preguntado el 31 de julio de 12 a las 10:07

¿Qué es una "dirección IP de dominio"? Los hosts tienen nombres de host (que son un caso especial de nombres de dominio) y direcciones IP de host, pero la mayoría de las entidades con un nombre de dominio no tienen una dirección IP. Por ejemplo, ¿cuál es la dirección IP de .com ? -

1 Respuestas

Aquí está el código fuente completo de una pequeña utilidad que a veces encuentro útil (la he llamado "resolver"). Todo lo que hace es resolver un nombre de dominio en una dirección IP numérica (v4) e imprimirlo. Tal como está, es para Windows; para Linux (o similar) solo necesita deshacerse del use_WSA clase (y objeto de la misma).

#include <windows.h>
#include <winsock.h>
#include <iostream>
#include <iterator>
#include <exception>
#include <algorithm>
#include <iomanip>
#include "infix_iterator.h"

class use_WSA { 
    WSADATA d; 
    WORD ver;
public:
    use_WSA() : ver(MAKEWORD(1,1)) { 
        if ((WSAStartup(ver, &d)!=0) || (ver != d.wVersion))
            throw(std::runtime_error("Error starting Winsock"));
    }
    ~use_WSA() { WSACleanup(); }    
};

int main(int argc, char **argv) {
    if ( argc < 2 ) {
        std::cerr << "Usage: resolve <host-name>";
        return EXIT_FAILURE;
    }

    try { 
        use_WSA x;

        hostent *h = gethostbyname(argv[1]);
        unsigned char *addr = reinterpret_cast<unsigned char *>(h->h_addr_list[0]);
        std::copy(addr, addr+4, infix_ostream_iterator<unsigned int>(std::cout, "."));
    }
    catch (std::exception const &exc) {
        std::cerr << exc.what() << "\n";
        return EXIT_FAILURE;
    }

    return 0;
}

Esto también usa el infix_ostream_iterator He publicado anteriormente.

contestado el 23 de mayo de 17 a las 11:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.