
`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