[질문] gethostbyaddr함수 동작 시 문제점 ...
글쓴이: cjynim / 작성시간: 목, 2007/07/26 - 6:37오후
소켓 프로그래밍을 공부하던 중 도메인 네임을 이용하여 IP주소를 알아내는 gethostbyname이란 함수를
알게 되어 그 함수를 이용해서 도메인 네임을 입력하면 IP주소를 화면에 출력하게 했습니다 .. (예제에
있는 소스를 그대로 타이핑 해서 실행 했습니다 ㅡㅡ;;) 그리고 반대로 IP주소를 이용해서 도메인 네임을
알아내는 함수 gethostbyaddr이 있어서 이 또한 실행해 보았습니다... 실행 시 바로 이전에 만든 예제에
서 출력 된 IP주소를 메모해 두었다가 이번 예제에서 입력해서 도메인 네임을 잘 찾아내나 알아봤습니다.
그런데 이상한건 어떤 IP주소는 도메인 네임을 잘 출력해 주는데 어떤 IP주소는 "gethost ... error"라
는 메시지를 내면서 출력을 해 주지 못합니다 ... gethostbyname()함수를 이용한 예제에서는 아무 이상
없이 도메인 네임을 잘 출력해 주는데 왜 gethostbyaddr()함수를 이용한 예제에서는 어떤 IP는 출력
해주고 어떤 IP는 출력하지 않는걸까요 ??
아래는 제가 공부한 예제 소스입니다 ...
// // IP주소를 이용하여 도메인 네임 알아내기 // #pragma comment(lib, "WS2_32.LIB") #include <stdio.h> #include <stdlib.h> #include <string.h> #include <winsock2.h> #define BUF 100 // // 예외 처리 // void Error(char* msg); // // Main 함수 // int main(void) { // // 변수 // WSADATA wsaData; // 윈속 라이브러리 int i; char ip[BUF]; HOSTENT* host; // 호스트에 대한 정보 SOCKADDR_IN addr; // // Load Winsock 2.2 DLL // if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0) Error("WSAStartup() error!"); // // 도메인을 입력 받는다. // printf("Input IP Address : "); gets_s(ip, BUF); // // 입력 받은 IP주소를 IN_ADDR형으로 변환 // memset(&addr, 0, sizeof(addr)); addr.sin_addr.s_addr = inet_addr(ip); // // 입력받은 IP주소를 이용하여 도메인 네임 알아내기 // host = gethostbyaddr((char*)&addr.sin_addr, 4, AF_INET); if(!host) Error("gethost ... error"); // // 정보 출력 // printf("Officially name : %s\n\n", host->h_name); puts("Aliases ------------------------"); for(i=0; host->h_aliases[i]; i++) puts(host->h_aliases[i]); printf("Address Type : %s\n", host->h_addrtype==AF_INET? "AF_INET": "AF_INET6"); puts("IP Address ------------------------"); for(i=0; host->h_addr_list[i]; i++) puts(inet_ntoa(*(IN_ADDR*)host->h_addr_list[i])); WSACleanup(); return 0; } void Error(char* msg) { fprintf(stderr, "%s\n", msg); exit(1); }
Forums:
모든 IP에 대해
모든 IP에 대해 도메인 네임이 부여된 건 아니죠.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
ㅡㅡ;; 위 아이피 모두 도메인 네임이 부여되어 있는 아이피 입니다..
그러니까 ... 위 아이피 모두 도메인 네임을 이용해서 알아낸 아이피를 다시 아이피를 통해서 도메인
네임을 출력하게 만든 예제 거든요 ... 이 예제 이전에 도메인 네임을 이용해서 아이피를 찾아 놓고
이를 메모 해둔 뒤에 이번 예제에서 적용해본거든요 그럼 당연히 도메인 네임이 나와야 정상 아닌가요 ??
ㅇㅅㅇ 역방향 도메인이라고 따로있습니다.
ISP쪽에서 역방향 도메인을 등록해줘야 나와요..
댓글 달기