
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);
どなかたご教授お願いいたします。
No.1ベストアンサー
- 回答日時:
/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つ変数を作っておいて別々に取得すればいいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「取得先」という表現について
-
INIファイル
-
ps3で久しぶりにCDの音楽情報取...
-
ローカルのコンピュータ名を取...
-
ミュージックのアートワークを...
-
C#で特定LANアダプタの状態を取...
-
Wordでウィンドウハンドル(Hwn...
-
開始と終了を指定して、その間...
-
DTOとEntityの差は何ですか。
-
Dosブロンプトでtabを出力したい
-
WordでExcelデータを差込...
-
VBA内でのGetPixelを使用した時...
-
完全なセッション破棄をしたい
-
PHP4からPHP5へ移行した際、セ...
-
VB.NETからVBAマクロ(引数)を呼...
-
PHPでの画像の形式の変換
-
Worksheet_Changeについて
-
C言語で地図を描きたい
-
PLY yacc での IF 文実装
-
過去にVBAでの「シフト表の何日...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「取得先」という表現について
-
Excel VBA:特定の文字列以降(...
-
VB.NETでボリュームを取得・設...
-
EXCEL、マクロ-改ページ行番号...
-
VBAでPDFファイルの文書のプロ...
-
ps3で久しぶりにCDの音楽情報取...
-
ミュージックのアートワークを...
-
ローカルのコンピュータ名を取...
-
Yahoo! JAPAN IDを新規取得でき...
-
各クライアントマシンのログイ...
-
ドライブ文字からハードウェア...
-
VBAでPDFのアクティブページ番...
-
webサイトの参考資料:サイト名 ...
-
IEを使わないでhtmlテキストを...
-
format関数について
-
C# ASP.NET でIPアドレスからア...
-
(Win32)ファイルパスから物理ド...
-
【VBA】EXCELブックを開かずに...
-
ファイル名のリスト取得について
-
コンビニで住民票を取得した場...
おすすめ情報