[질문] gethostbyaddr함수 동작 시 문제점 ...

cjynim의 이미지

소켓 프로그래밍을 공부하던 중 도메인 네임을 이용하여 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);
}

Necromancer의 이미지

모든 IP에 대해 도메인 네임이 부여된 건 아니죠.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

cjynim의 이미지

그러니까 ... 위 아이피 모두 도메인 네임을 이용해서 알아낸 아이피를 다시 아이피를 통해서 도메인

네임을 출력하게 만든 예제 거든요 ... 이 예제 이전에 도메인 네임을 이용해서 아이피를 찾아 놓고

이를 메모 해둔 뒤에 이번 예제에서 적용해본거든요 그럼 당연히 도메인 네임이 나와야 정상 아닌가요 ??

mog422의 이미지

ISP쪽에서 역방향 도메인을 등록해줘야 나와요..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.