| [ CnUnix ] in KIDS 글 쓴 이(By): whbear (서병국) 날 짜 (Date): 2002년 11월 7일 목요일 오후 04시 14분 22초 제 목(Title): [Q] MAC 어드레스 얻기 라이선스 정보를 얻으려고, UNIX 기종에서 서버 네트웍 카드의 MAC주소를 얻으려 합니다. 대상 기종은 IBM AIX4.3, Compaq Tru64, HP-UX11, Solaris 7, Linux 이렇게 입니다. 아래 소스코드는, APUE 2nd ed., vol. 1, pp. 440-442에 있는 코드를 참조한 것입니다. 이 코드가 하는 일은 머신의 arp cache를 뒤져 해당 이름의 MAC주소를 리턴하는 것이죠. Solaris 7, Linux에서는 되는데, 나머지 기종에서는 값이 안나옵니다. 그런 기종에서 arp로 cache를 확인하면 자신의 컴퓨터 이름에 해당하는 MAC주소가 없는 것을 확인할 수 있습니다. HP,IBM,Tru64에서 MAC주소 얻는 것 성공하신분 있으신가요? 아님 참고할만한 소스라도 있을까요? struct hostent *hptr; struct utsname myname; struct arpreq arpreq; struct sockaddr_in *sin; int sockfd; if (uname(&myname) < 0) return FALSE; if ((hptr = gethostbyname(myname.nodename)) == NULL) return FALSE; sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) return FALSE; sin = (struct sockaddr_in *) &arpreq.arp_pa; memset(sin, 0, sizeof(struct sockaddr_in)); memset(&arpreq, 0, sizeof(struct arpreq)); memcpy(&sin->sin_addr, *hptr->h_addr_list, sizeof(struct in_addr)); ioctl(sockfd, SIOCGARP, &arpreq); close(sockfd); memcpy(mac, &arpreq.arp_ha.sa_data[0], 6); return TRUE; |