다음 함수를 이용하면 문자열 형태의 도메인 이름으로부터 IP주소정보를 얻어올 수 있다.
#include <netdb.h> struct hostent * gethostbyname(const char * hostname); =>성공시 hostent 구조체 변수의 주소 값, 실패 시 NULL 포인터 반환 |
{
char * h_name; // official name
char ** h_aliases; // alias list
int h_addrtype; // host address type
int h_length; // address length
char ** h_addr_list; // address list
이 멤버에는 '공식 도메인 이름(Official domain name)'이 저장된다.
하나의 IP에 둘 이상의 도메인 이름을 지정하는 것이 가능하기 때문에, 공식 도메인 이외에 해당 메인 페이지를 접속할 수 있는 다른 도메인 이름의 지정이 가능.(h_aliases를 통해 얻을 수있음)
gethostbyname은 IPv4뿐만 아니라 IPv6도 지원. 때문에 h_addr_list로 반환된 IP주소체계에 대한 정보를 이 멤버를 통해 반환
(IPv4경우 AF_INET반환)
함수 호출의 결과로 반환된 IP주소의 크기.(IPv4경우 4바이트)
이 멤버를 통해서 도메인 이름에 대한 IP주소가 정수의 형태로 반환
(참로 : 접속자수가 많은 서버는 하나의 도메인 이름에 대응하는 IP를 여러개 둬서, 둘 이상의 서버로 분산시킬 수 있는데, 이러한 경우에도 이 멤버를 통해서 모든 IP의 주소를 얻어올 수 있다.)
예제소스_ gethostbyname.c
예제결과_gethostbyname www.google.com
IP주소를 이용해서 도메인 정보 가져오기
#include <netdb.h> struct hostent * gethostbyaddr(const char * addr, socklen_t len, int family); => 성공시 hostent 구조체 변수의 주소값, 실패시 NULL포인터 반환 |
addr : IP주소를 지니는 in_addr 구조체 변수의 포인터 전달, IPv4이외의 다양한 정보를 전달받을 수 있도록 일반화하기 위해서 매개변수 char형 포인터로 선언
len : 첫 번째 인자로 전달된 주소정보의 길이, IPv4의 경우 4, IPv6의 경우 16전달.
family : 주소체계 정보 전달. IPv4의 경우 AF_INET, IPv6의 경우 AF_INET6전달
ex) host = gethostbyaddr((char*)&addr.sin_addr, 4, AF_INET);
예제: gethostbyaddr.c
출처 : 열혈강의tcp/ip 소켓 프로그래밍_윤성우
'TCP/IP 소켓Prog > tcp/ip 함수' 카테고리의 다른 글
[질문/답변]5장 계산기문제 버스 오류(Bus Error)(메모리가 덤프됨) (0) | 2011.07.29 |
---|---|
[C표준함수] memset() 함수 (0) | 2011.07.25 |