こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

IPアドレスとMACアドレスを取得したい(C言語)

OSはLinuxで、コンパイラはgccです。
C言語でプログラムを作っていて、自分のIPアドレスとMACアドレスを取得しようと考えています。下のソースでIPアドレスは入手できたのですが、MACアドレスも取得しようとしたら、IPアドレスが上手く取得できなくなりました。ioctl(fd, SIOCGIFHWADDR, &ifr);で取得できるとおもうのですが、同時に取得しようとするとIPアドレスの表示が正しくされなくなっている状況です。

/* 自IPアドレスの取得 */
int fd;
struct ifreq ifr;
fd = socket(AF_INET, SOCK_STREAM, 0);
ifr.ifr_addr.sa_family = AF_INET;

/* eth0のIPアドレスの取得 */
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
ioctl(fd, SIOCGIFADDR, &ifr);
/* MACアドレスの取得 */ ←上書きされている??
ioctl(fd, SIOCGIFHWADDR, &ifr);
close(fd);

どなかたご教授お願いいたします。

投稿日時 - 2006-02-10 03:59:34

QNo.1955889

すぐに回答ほしいです

質問者が選んだベストアンサー

/usr/include/linux/if.h にある struct ifreq の定義を良く見て貰えば分かると思いますが、ifr_ifru は union です。で、その union の中に ifru_addr と ifru_hwaddr があり、これが ifr_name と ifr_hwaddr に #define で定義されています。つまり union なのでこれらは同じ領域を取ります。

ということで、IPアドレスを取得後に自分で確保した struct sockaddr_in の変数に内容をコピーしておいてそれからMacアドレスを取得するか、または最初から strut ifreq ifr1, ifr2; のように2つ変数を作っておいて別々に取得すればいいと思います。

投稿日時 - 2006-02-10 17:08:05

お礼

ありがとうございます。無事解決しました☆

投稿日時 - 2006-02-11 17:50:25

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問