개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.07.22 08:13

네트워크 인터페이스 정보 가져오기

목록
  • 개발하는곰돌이 1일 전 2025.07.22 08:13
  • 12
    1
제가 학습하고 있는 네트워크 프로그래밍에서 `net_get_interfaces` 함수를 사용하여 네트워크 인터페이스 정보를 가져오려고 하는데, 인터페이스의 MAC 주소와 IP 주소가 어떻게 구분되는지 궁금합니다.

예를 들어, 여러 인터페이스가 동일한 IP 주소를 공유할 수 있는 경우, 어떤 인터페이스의 MAC 주소가 어떤 IP 주소와 연관되어 있는지 확인하고 싶습니다.

`net_get_interfaces` 함수의 반환값에서 MAC 주소와 IP 주소가 어떻게 표현되는지 알려 주시겠습니까?

    댓글목록

    profile_image
    나우호스팅  1일 전



    `net_get_interfaces` 함수의 반환값은 네트워크 인터페이스 정보를 담은 구조체 배열입니다. 이 구조체 배열의 각 요소는 `net_interface_info` 구조체를 나타냅니다.

    `net_interface_info` 구조체에는 여러 필드가 있습니다. 그 중에서 `mac` 필드는 인터페이스의 MAC 주소, `ip` 필드는 인터페이스의 IP 주소, `ip6` 필드는 인터페이스의 IPv6 주소, `broadcast` 필드는 인터페이스의 브로드캐스트 주소, `netmask` 필드는 인터페이스의 서브넷 마스크를 나타냅니다.

    예를 들어, 다음과 같이 `net_get_interfaces` 함수의 반환값을 처리할 수 있습니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        // 네트워크 인터페이스 정보를 가져옵니다.
    
        struct ifreq ifr;
    
        int sock = socket(AF_INET, SOCK_DGRAM, 0);
    
        if (sock < 0) {
    
            perror("socket");
    
            exit(1);
    
        }
    
    
    
        for (int i = 0; i < IFNAMSIZ; i++) {
    
            strcpy(ifr.ifr_name, "eth0");
    
            if (ioctl(sock, SIOCGIFADDR, &ifr) < 0) {
    
                perror("ioctl");
    
                continue;
    
            }
    
    
    
            // 인터페이스의 MAC 주소와 IP 주소를 출력합니다.
    
            printf("인터페이스 이름: %sn", ifr.ifr_name);
    
            printf("MAC 주소: %02x:%02x:%02x:%02x:%02x:%02xn",
    
                   ((unsigned char *)&ifr.ifr_hwaddr.sa_data)[0],
    
                   ((unsigned char *)&ifr.ifr_hwaddr.sa_data)[1],
    
                   ((unsigned char *)&ifr.ifr_hwaddr.sa_data)[2],
    
                   ((unsigned char *)&ifr.ifr_hwaddr.sa_data)[3],
    
                   ((unsigned char *)&ifr.ifr_hwaddr.sa_data)[4],
    
                   ((unsigned char *)&ifr.ifr_hwaddr.sa_data)[5]);
    
            printf("IP 주소: %sn", inet_ntoa(ifr.ifr_addr.sa_data));
    
        }
    
    
    
        close(sock);
    
        return 0;
    
    }
    
    


    이 예제에서는 `net_get_interfaces` 함수를 사용하지 않고, `ioctl` 함수를 사용하여 네트워크 인터페이스 정보를 가져옵니다. `ioctl` 함수의 `SIOCGIFADDR` 명령어를 사용하여 인터페이스의 IP 주소를 가져올 수 있습니다. 인터페이스의 MAC 주소는 `ifr_hwaddr` 필드에 저장되어 있습니다.

    이러한 방법으로, 여러 인터페이스가 동일한 IP 주소를 공유할 수 있는 경우, 어떤 인터페이스의 MAC 주소가 어떤 IP 주소와 연관되어 있는지 확인할 수 있습니다.

    2025-07-22 08:14

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 38,208건 / 2 페이지

검색

게시물 검색