<--애드센스--> <--네이버웹마스터-->

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

#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>

void ErrorHandling(char *message);
int main(int argc, char *argv[])

{

WSADATA wsaData;
int i;
struct hostent *host;

if (argc != 2)

{

printf("Usage:%s <addr>\n", argv[0]);

exit(1);

}

if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)

ErrorHandling("WSAStartup() error!");

host = gethostbyname(argv[1]); //main 함수를 통해서 전달된 문자열을 인자로 gethostbyname 함수를 호출

if (!host)
ErrorHandling("gethost... error");

printf("Official name:%s\n", host->h_name); //공식 도메인 이름을 출력

for (i = 0; host->h_aliases[i]; i++) /하나의 IP에 둘 이상의 도메인 이름을 지정하는 것이 가능 -> 공식 도메인 이외에 해당 메인 페이지에 접속할 수 있는 다른 도메인 이름의 지정 가능
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");

//IP 주소정보를 출력하고 있다. 그런데 이해할 수 없는 형변환을 진행하고 있다. 이는 hostent 구조체가 IPv4 뿐만 아니라 IPv6 기반의 주소정보도 저장할 수 있기 때문이다.

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]));

WSACleanup();
return 0;

}



void ErrorHandling(char *message)

{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}

4.2 IP주소를 이용해서 도메인 정보 얻어오기 프로그램.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h> // 윈도우 버전, 리눅스 버전으로 사용할 경우 #include <arpa/inet.h> , #include <netdb.h>를 추가한다.

void ErrorHandling(char *message);
int main(int argc, char *argv[])
{
WSADATA wsaData;
int i;
struct hostent *host;
SOCKADDR_IN addr;

if (argc != 2)

{
printf("Usage:%s <IP>\n", argv[0]);
exit(1);
}

if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)

ErrorHandling("WSAStartup() error");

memset(&addr, 0, sizeof(addr));
addr.sin_addr.s_addr = inet_addr(argv[1]);
host = gethostbyaddr((char*)&addr.sin_addr, 4, AF_INET);

if (!host)
ErrorHandling("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]); //하나의 IP에 둘 이상의 도메인 이름을 지정하는 것이 가능 -> 공식 도메인 이외에 해당 메인 페이지에 접속할 수 있는 다른 도메인 이름의 지정 가능

printf("Address type:%s\n", (host->h_addrtype == AF_INET) ? "AF_INET" : "AF_INET6"); //주소 타입이 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])); // 호스트 주소 리스트 저장

WSACleanup();
return 0;
}

void ErrorHandling(char *message)

{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}

+ Recent posts