MAC 어드레스 찾는 법 구현시에...

mg2000의 이미지

제가 MAC어드레스를 이용해서 프로그램을 만들려고 하는데요.

아래와 같은 코드를

void __attribute__ ((constructor)) my_init(void)

안에 구현하고, so가 로딩될때, MAC어드레스를 구하려고 했습니다.

그런데, 실행하면, ioctl(fd, SIOCGIFHWADDR, iflist) == -1이 되면서,

MAC어드레스를 구하지 못합니다.

errno = 19(No such Device)로 나오는데요.

다른 함수에서 MAC 어드레스를 구하면, 잘 나오는데요.
(사실, 나오다 안나오다 합니다. ㅠ.ㅠ

so로딩시에는 항상 안나오고요.)

so로딩될때는 MAC어드레스를 찾을 수 없나요?

struct ifreq *iflist;
struct sockaddr *sa;
int fd;
 
iflist = (struct ifreq *)malloc(sizeof (struct ifreq));
 
fd = socket(PF_INET, SOCK_STREAM, 0);
 
strncpy(iflist->ifr_name, "eth0", strlen("eth0"));
 
if (ioctl(fd, SIOCGIFHWADDR, iflist) == -1)
{
    strcpy((char *)macAddress, "");
    return;
}
 
sa = &(iflist->ifr_hwaddr);
 
strcpy((char *)macAddress, ether_ntoa((struct ether_addr *) sa->sa_data));