- PR -

FreeBSDでプログラムからMACアドレスを取得する方法

1
投稿者投稿内容
TERA
会議室デビュー日: 2006/06/03
投稿数: 3
投稿日時: 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/05/22
投稿数: 34
投稿日時: 2006-06-03 22:33
FreeBSD 5.4 って、getifaddrs じゃダメなんでしたっけ?
TERA
会議室デビュー日: 2006/06/03
投稿数: 3
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)