도메인 이름을 이용해서 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);
}
'끄적끄적_공부' 카테고리의 다른 글
[컴퓨터활용능력1급] - 실기 시험 / 시험 후기 (0) | 2020.05.25 |
---|---|
[컴퓨터 비전] - 가우시안 함수(Gaussian)를 미분한 마스크를 통한 에지검출 (1) | 2020.04.17 |
[리눅스 환경 설정] - visual studio code/echo (6) | 2020.04.13 |
[컴퓨터 비젼] - MFC/ openCV /히스토그램을 이용한 영상 이진화 처리 (0) | 2020.04.03 |
[컴퓨터 비젼] - openCV/MFC를 이용한 영상신호처리 (4) | 2020.03.30 |