Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 호스트 이름과 IP 주소를 확인하는 프로그램

이번 글에서는 로컬 시스템의 호스트 이름(Hostname)IP 주소를 손쉽게 확인하는 방법을 살펴보겠습니다. C 언어로 프로그램을 작성하면 몇 줄의 코드만으로 자신의 컴퓨터가 네트워크에서 어떤 이름과 주소를 사용하는지 알아낼 수 있습니다.

이 과정에서는 다음과 같은 함수들이 사용됩니다. 각 함수는 서로 다른 역할을 담당하며, 세부 내용은 아래 표와 같습니다.

함수설명
gethostname()로컬 컴퓨터의 표준 호스트 이름을 가져옵니다.
gethostbyname()호스트 데이터베이스에서 호스트 이름에 해당하는 호스트 정보를 조회합니다.
inet_ntoa()IPv4 인터넷 네트워크 주소를 점(.)으로 구분되는 10진수 형식의 ASCII 문자열로 변환합니다.

예제 코드

아래 예제에서는 오류 발생 여부를 확인하기 위한 검증 함수들을 함께 정의했습니다. 각 단계에서 반환값이 유효한지 점검하여, 문제가 있으면 에러 메시지를 출력하고 프로그램을 종료합니다.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

void check_host_name(int hostname) { // 로컬 컴퓨터의 호스트 이름 반환
    if (hostname == -1) {
        perror("gethostname");
        exit(1);
    }
}

void check_host_entry(struct hostent * hostentry) { // 호스트 이름으로 정보 조회
    if (hostentry == NULL) {
        perror("gethostbyname");
        exit(1);
    }
}

void IP_formatter(char *IPbuffer) { // IP 문자열을 점 10진수 형식으로 변환
    if (NULL == IPbuffer) {
        perror("inet_ntoa");
        exit(1);
    }
}

main() {
    char host[256];
    char *IP;
    struct hostent *host_entry;
    int hostname;

    hostname = gethostname(host, sizeof(host)); // 호스트 이름 찾기
    check_host_name(hostname);

    host_entry = gethostbyname(host); // 호스트 정보 조회
    check_host_entry(host_entry);

    IP = inet_ntoa(*((struct in_addr*) host_entry->h_addr_list[0]));
    // IP 주소를 문자열로 변환

    printf("Current Host Name: %s\n", host);
    printf("Host IP: %s\n", IP);
}

코드 동작 순서

프로그램의 흐름은 다음과 같이 정리할 수 있습니다.

1. gethostname() : 버퍼에 로컬 컴퓨터의 호스트 이름을 저장합니다.
2. gethostbyname() : 얻어온 호스트 이름을 기반으로 호스트 엔트리(hostent 구조체) 정보를 조회합니다.
3. h_addr_list[0] : 호스트가 보유한 첫 번째 IP 주소를 가리킵니다.
4. inet_ntoa() : 바이너리 형태의 IP 주소를 사람이 읽을 수 있는 점 10진수 문자열로 변환합니다.
5. 마지막으로 printf()를 통해 호스트 이름과 IP 주소를 화면에 출력합니다.

실행 결과 (Linux 환경에서 테스트)

Current Host Name: soumyadeep-VirtualBox
Host IP: 127.0.1.1

출력 결과를 보면 호스트 이름은 VirtualBox 가상 머신의 이름이며, IP 주소는 루프백에 해당하는 127.0.1.1로 표시됩니다. 실제 환경에 따라 호스트 이름과 IP 주소 값은 달라질 수 있습니다.