2012-07-31 3 views
1

,C++에서 도메인 이름을 사용하여 도메인 IP 주소를 얻는 방법은 무엇입니까? 난 비주얼 C++를 사용하고

나는 도메인 이름에서 도메인의 IP 주소를 얻으려면 ... 어떻게 내가 그것을받을 수 있나요 .. 난 이미 시도 gethostbyname까지도 기능 ... 여기 내 코드 ...

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)); 

하지만 잘못된 IP 주소가 표시됩니다.

+0

"도메인 IP 주소"란 무엇입니까? 호스트에는 호스트 이름 (도메인 이름의 특별한 경우)과 호스트 IP 주소가 있지만 도메인 이름이있는 대부분의 엔티티에는 IP 주소가 없습니다. 예 : '.com'의 IP 주소는 무엇입니까? – MSalters

답변

1

다음은 유용한 유틸리티 인 완전한 소스 코드입니다 ("해결"이라는 이름을 붙였습니다). 도메인 이름을 숫자 IP (v4) 주소로 변환하여 인쇄하는 것뿐입니다. 그대로, Windows 용입니다. Linux (또는 유사한) 용으로 use_WSA 클래스 (및 그 객체)를 제거하면됩니다.

#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; 
} 

이것은 또한 이전에 게시 한 infix_ostream_iterator을 사용합니다.

관련 문제