#include<netdb.h>
struct hostent* gethostbyname(const char* hostname);
// success: hostent 구조체 변수의 주소값 fail: NULL 포인터
위 함수를 이용하면 문자열 형태의 도메인 이름으로 IP 주소 정보를 얻을 수 있습니다. 위 함수의 반환 자료형인 hostent 구조체의 정의는 다음과 같습니다.
struct hostent{
char * h_name
char ** h_aliases;
int h_addrtype;
int h_length;
char ** h_addr_list;
}
IP주소 말고도 여러 정보들을 반환해주는 것을 볼 수 있습니다.
h_name은 공식 도메인 이름이 문자열로 저장됩니다. 해당 홈페이지를 대표하는 도메인 이름이라는 의미지만 우리에게 잘 알려지지 않은 도메인 이름이 등록되는 경우도 많습니다.
h_aliases는 하나의 IP에 둘 이상의 도메인 이름을 지정할 수 있는데, 그 이름들을 문자열의 배열로 저장됩니다.
h_addrtype은 IPv4인지 IPv6인지, 주소체계에 대한 정보를 반환해줍니다. IPv4의 경우에는 AF_INET이 저장됩니다.
h_length는 IP주소의 크기 정보가 바이트단위로 담깁니다. IPv4의 경우 4, IPv6의 경우 16입니다.
h_addr_list는 도메인의 이름에 대한 IP주소들(도메인에 여러 IP를 둘 수도 있습니다)이 정수로 저장됩니다. 정수로 저장된다 했는데 자료형이 char형 이중 포인터인 이유는 IP가 4바이트 일 수도 있고 16바이트일 수도 있기 때문에 char형 포인터에 데이터를 나타내고 이를 char형 포인터 배열로 쌓은 것이고, 각 char형 포인터는 in_addr 구조체 변수의 주소값입니다.
h_aliaeses와 h_addr_list의 마지막에는 NULL이 담겨있습니다.
위 함수를 이용한 예제는 다음과 같습니다.
https://github.com/kjmin622/TCP-IP-Socket-Programing/blob/master/src/gethostbyname.c
다음은 IP주소로 도메인 정보를 얻어오는 함수입니다.
#include<netdb.h>
struct hostent* gethostbyaddr(const char* addr, socklen_t len, int family);
//success: hostent 구조체 변수의 주소값 fail: NULL
addr에는 IP주소가 문자열로 들어가고 len은 IP주소의 바이트크기(IPv4의 경우 4), family는 주소체계에 대한 정보(IPv4의 경우 AF_INET)이 들어갑니다.
위 함수를 이용한 예제는 다음과 같습니다.
https://github.com/kjmin622/TCP-IP-Socket-Programing/blob/master/src/gethostbyaddr.c
'현생 > TCP 소켓 프로그래밍' 카테고리의 다른 글
9-2. 소켓의 타입을 확인하는 소켓의 옵션 [TCP/IP][C][LINUX] (0) | 2022.01.24 |
---|---|
9-1. 소켓의 옵션과 설정 함수 get/setsockopt [TCP/IP][C][LINUX] (0) | 2022.01.24 |
8-1. 도메인이란? 왜 쓰는 걸까? (0) | 2022.01.23 |
7. TCP 기반의 Half-close : shutdown() [TCP/IP][C][LINUX] (0) | 2022.01.21 |
6-4 UDP에서의 connect (connected UDP 소켓) [UDP/IP][C][LINUX] (0) | 2022.01.18 |