TCP&IP

TCP/IP 8장 도메인 이름과 인터넷 주소

Barbarian developer 2024. 9. 5.

Domain Name System

도메인 이름

ip를 대신하는 서버의 주소

실제 접속에 사용되는 주소는 아니다. 이 정보는 IP로 변환이 되어야 접속이 가능하다.

 

DNS서버

도메인 이름을 IP로 변환해 주는 서버

DNS는 일종의 분산 데이터베이스 시스템이다.

 

도메인 이름을 이용해서 서버에 접속하면, 접속 이전에 DNS 서버에 해당 도메인의 IP 주소를 묻게 되고, 그 결과로 얻게 된 IP를 이용해서 서버에 접속하게 된다.

 

IP주소와 도메인 이름 사이의 변환

도메인 이름을 이용해서 IP주소 얻어오기

#include <netdb.h>

struct hostent *gethostbyname(const char *hostname);
	성공시 hostent 구조체 변수의 주소 값, 실패시 NULL포인터 반환

 

 

h_name :  공식 도메인 이름

h_aliases : 별칭의 도메인 이름

h_addrtype : 반환된 IP의 정보가 IPv4인 경우, AF_INET이 반환

h_lengh : 반환된 IP 정보의 크기, POv4의 경우, IPv6의 경우

h_addr_list : IP의 주소정보, 둘 이상의 경우 모두 반환

 

 

 

 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netdb.h>
void error_handling(char *message);

int main(int argc, char *argv[])
{
	int i;
	struct hostent *host;
	if(argc!=2) {
		printf("Usage : %s <addr>\n", argv[0]);
		exit(1);
	}
	
	host=gethostbyname(argv[1]);
	if(!host)
		error_handling("gethost... error");

	printf("Official name: %s \n", host->h_name);
	
	for(i=0; host->h_aliases[i]; i++)
		printf("Aliases %d: %s \n", i+1, host->h_aliases[i]);
	
	printf("Address type: %s \n", 
		(host->h_addrtype==AF_INET)?"AF_INET":"AF_INET6");

	for(i=0; host->h_addr_list[i]; i++)
		printf("IP addr %d: %s \n", i+1,
					inet_ntoa(*(struct in_addr*)host->h_addr_list[i]));
	return 0;
}

void error_handling(char *message)
{
	fputs(message, stderr);
	fputc('\n', stderr);
	exit(1);
}

17행 : main함수를 통해서 전달된 문자열을 인자로gethosbyname함수를 호출하고 있다. 

21행 : 공식 도메인 이름을 출력하고 있다.

22행, 23행 : 공식 도메인 이름 이외의 도매인 이름을 출력하고 있다. 

26~28행 : IP주소정보를 출력하고 있다. 그렇ㄴ데 이해할 수 없는 형변환을 진행하고 있다. 

 

실행결과

IP주소를 이용해서 도메인 정보 얻어오기

#include <netdb.h>

struct hostent *gethostbyaddr(const char * addr, socklen_t len, int family);
	성공 시 hostent 구조체 변수의 주소 값, 실패 시 NULL포인터 반환

addr : IP주소를 지니는 in_addr 구조체 변수의 포인터 전달 매개변수를 char형 포인터로 선언.

len : 첫 번째 인자로 전달된 주소정보의 길이, IPv4의 경우 4, IPv6의 경우 16전달.

family : 주소체계 정보 전달. IPv4의 경우 AF_INET, IPv6의 경우 AF_INET6전달.

 

 

댓글