- - PR -
FreeBSDでプログラムからMACアドレスを取得する方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-06-03 12:18
表題の通り、FreeBSD でプログラムからNICのMACアドレスを知る方法を知りたいのです。
Linux では以下のように取得できるらしいのですが、 int fd; struct ifreq ifr; fd = socket(AF_INET, SOCK_DGRAM, 0); ifr.ifr_addr.sa_family = AF_INET; strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1); ioctl(fd, SIOCGIFHWADDR, &ifr); (ifr.ifr_hwaddr.sa_data に MACアドレスが入る) FreeBSD で試したところ、ioctl の SIOCGIFHWADDR が定義されておらず、 エラーとなってしまいます。他にもいろいろと調べてみたのですが明確な 解答が得られなかったため、質問させていただくことにしました。何か 有効な方法をご存知の方がおられましたらご教授ください。 環境は FreeBSD5.4 & gcc です。 それではよろしくお願いします。 |
|
投稿日時: 2006-06-03 22:33
FreeBSD 5.4 って、getifaddrs じゃダメなんでしたっけ?
|
|
投稿日時: 2006-06-06 16:32
>うえだ様
getifaddrs を使用してみたところ、うまくいきました。 ありがとうございました。とりあえず、以下のようなコードでうまくいきました。 { struct ifaddrs *ifa, *ifa0; struct sockaddr_dl* dl; unsigned char mac_addr[6]; getifaddrs( &ifa0 ); for( ifa = ifa0; ifa; ifa=ifa->ifa_next ) { dl = (struct sockaddr_dl*)ifa->ifa_addr; if( strncmp("eth0", dl->sdl_data, dl->sdl_nlen) == 0 ) { memcpy( mac_addr, LLADDR(dl), 6 ); break; } } freeifaddrs(ifa); } |
1