티스토리 뷰

Network Programming

[TCP/IP]DNS

군자동꽃미남 2016. 6. 26. 19:07

 사용 이유

: IP주소는 상대적으로 변경이 잦다. 서버의 IP주소가 변경되면, 클라이언트 프로그램에 들어가 있는 IP 주소를 변경하고 다시 컴파일 한 다음 재배포를 해야 한다. 반면, 도메인 이름은 일단 등록하고 나면, 유지하는 동안 절대 다른 누군가에게 할당되지 않는다. 즉, IP 주소가 변경 되어도 도메인 이름이 유지되는 동안은 도메인 이름을 DNS 서버를 통해서 IP주소로 변환하여 도메인 이름을 통해 서버에 접속할 수 있도록 해준다.


도메인으로 IP주소 알아내기

1
struct hostent* FAR gethostbyname(_In_ const char *name);
cs

: 이 함수의 인자로 변환하고자 하는 도메인 이름을 전달한다.

리턴 값은 성공 시 hostent 구조체의 포인터를 리턴하고, 실패 시 NULL포인터를 리턴한다.


1
2
3
4
5
6
7
typedef struct hostent {
  char FAR      *h_name;
  char FAR  FAR **h_aliases;
  short         h_addrtype;
  short         h_length;
  char FAR  FAR **h_addr_list;
} HOSTENT, *PHOSTENT, FAR *LPHOSTENT;
cs
    • h_name : 공식 도메인 이름
    • h_aliases : 해당 호스트에 접속할 수 있는 공식 도메인 이름 이외의 다른 이름들
    • h_addrtype : h_addr_list로 전달된 IP 주소의 체계가 IPv4인지 IPv6인지 알려준다.
    • h_length : 결과로 전달되는 IP주소의 길이를 가르쳐 준다. IPv4 - 4byte, IPv6 - 16Byte
    • h_addr_list : 도메인 이름에 해당하는 IP 주소를 전달해 준다. 그런데 큰 회사 같은 경우는 여러 대의 서버를 운영하기 때문에 하나의 도메인 이름에 대응하는 IP 주소가 여러 개가 될 수 있다.

1
printf("%s", inet_ntoa(*(struct in_addr*)host->h_addr_list[0]));
cs

h_addr_list는 참조하기 전에 반드시 형 변환을 해야만 한다. 실제 가리키는 것은 in_addr 구조체 변수이기 때문이다. 이 말은 h_addr_list가 가리키는 배열은 문자열을 가리킬 수 있는 char 포인터 배열이지만, 이 배열이 저장하고 있는 포인터가 실제로는 in_addr 구조체 변수를 가리키고 있다는 말이다.


그렇다면 char* 배열로 선언한 이유는 hostent 구조체는 IPv4만을 위한 것이 아니라, IPv6 기반의 주소 정보를 나타내는 데에도 사용된다. 따라서 일반화하기 위해서 char*로 선언한 것이다.


IP주소로 도메인 이름 알아내기

1
2
3
4
5
struct hostent* FAR gethostbyaddr(
  _In_ const char *addr,
  _In_       int  len,
  _In_       int  type
);
cs
    • addr : IP 주소.
    • len : 주소의 길이. IPv4 : 4, IPv6 : 16
    • type : 입력되는 주소의 주소 체계 전달. AF_INET, AF_INET6
1
host = gethostbyaddr((char *) &addr.sin_addr, 4, AF_INET)
cs


'Network Programming' 카테고리의 다른 글

소켓의 우아한 연결 종료  (0) 2017.10.09
[TCP/IP]소켓의 다양한 옵션  (0) 2016.06.26
[TCP/IP]스트림 half-close  (0) 2016.06.26
[TCP/IP]UDP  (0) 2016.06.26
[TCP/IP]TCP/IP 프로토콜 스택(4계층)  (0) 2016.06.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함