네트워크 카드 라이브러리를 가져오는 C 코드

리눅스에서 ioctl() 이 함수를 사용하여 네트워크 인터페이스에 대한 정보를 얻을 수 있습니다.

이를 사용하여 이더넷 카드의 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;
}

위의 코드에서 만약 이름자신의 이더넷 카드의 인터페이스 이름을 나타내는 문자열입니다.

이것
만약에 구조적 ifr_name 구성원에 할당하면 해당 인터페이스에 대한 정보를 얻을 수 있습니다.

ioctl() 기능에 SIOCGIFHWADDR 옵션을 전달하여 MAC 주소를 얻을 수 있습니다.

가져온 MAC 주소는
만약에 구조적 ifr_hwaddr.sa_data 회원에 저장됩니다.