Linux/Code snippet
[C] ioctl 예제: 인터페이스 맥주소 가져오기
2022. 6. 7. 00:50반응형
소스코드
ioctl_example.c
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <net/if.h>
enum { ARGV_CMD, ARGV_INTERFACE };
int main(int argc, char * argv[])
{
int sock;
struct ifreq ifr;
unsigned char *mac = NULL;
if(argc != 2){
printf("%s [Interface name]\n", argv[ARGV_CMD]);
return 1;
}
memset(&ifr, 0x00, sizeof(ifr));
strcpy(ifr.ifr_name, argv[ARGV_INTERFACE]);
// Unix 도메인 소켓 하나를 생성한다.
int fd = socket(AF_UNIX, SOCK_DGRAM, 0);
if (fd < 0) {
perror("socket creation error");
return 1;
}
// 이 소켓을 이용해 ifr 을 보낸다.
// 두번째 파라미터는 request code, 이름은 SIOCGIFHWADDR (이것은 이 code는 device-dependent임) 32 // 세번째 파라미터는, 전달할 매개변수. 이 매개변수 안에 응답한 정보가 들어감.
if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0) {
perror("ioctl error");
return 1;
}
// ifr에서 data를 가져옴.
mac = ifr.ifr_hwaddr.sa_data;
printf("%s: %02x:%02x:%02x:%02x:%02x:%02x\n", ifr.ifr_name, mac[0],mac[1],mac[2],mac[3],mac[4] ,mac[5]);
close(fd);
return 0;
}
실행문
gcc ioctl_example.c
./a.out eth0
결과화면
eth0: 00:15:5d:ee:80:83 |
참고하면 좋을 자료
https://stackoverflow.com/questions/2283494/get-ip-address-of-an-interface-on-linux
반응형
'Linux > Code snippet' 카테고리의 다른 글
[Netlink] 넷링크 예제 (0) | 2022.06.27 |
---|