인디노트

NIC 맥주소 가져오는 C 코드 본문

개발 플랫폼 및 언어/네트워크 기술

NIC 맥주소 가져오는 C 코드

인디개발자 2023. 4. 11. 03:46

Linux에서는 ioctl() 함수를 사용하여 네트워크 인터페이스의 정보를 가져올 수 있습니다. 이를 활용하여 자신의 Ethernet 카드의 MAC 주소를 가져올 수 있습니다.

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main() {
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0) {
        perror("Failed to create socket");
        return 1;
    }

    // 인터페이스 이름 설정
    char ifname[] = "eth0";

    // 인터페이스 정보 구조체 생성
    struct ifreq ifr;
    memset(&ifr, 0, sizeof(ifr));
    strncpy(ifr.ifr_name, ifname, IFNAMSIZ - 1);

    // MAC 주소 가져오기
    if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) < 0) {
        perror("Failed to get MAC address");
        return 1;
    }

    // MAC 주소 출력
    unsigned char *mac = (unsigned char*) ifr.ifr_hwaddr.sa_data;
    printf("My MAC address: %02x:%02x:%02x:%02x:%02x:%02x\n",
           mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);

    close(sockfd);

    return 0;
}

위 코드에서 ifname은 자신의 Ethernet 카드의 인터페이스 이름을 나타내는 문자열입니다. 이를 ifr 구조체의 ifr_name 멤버에 할당하여, 해당 인터페이스의 정보를 가져올 수 있습니다. ioctl() 함수에 SIOCGIFHWADDR 옵션을 전달하여, MAC 주소를 가져올 수 있습니다. 가져온 MAC 주소는 ifr 구조체의 ifr_hwaddr.sa_data 멤버에 저장되어 있습니다.

반응형
Comments