2013-04-15

C++で物理アドレスの取得

GNU/Linuxのsysfsを使用した版。

#include <iostream>
#include <fstream>
#include <string>

int main()
{
    std::ifstream stream( "/sys/class/net/eth0/address", std::ios::in ) ;

    if ( !stream )
    {
        std::cout << "failed to open /sys/class/net/eth0/address" << std::endl ;
    }

    std::string mac_address ;
    stream >> mac_address ;

    std::cout << mac_address << std::endl ;
}

GNU/Linuxだとsysfsの/sys/class/net/eth0/addressを読み込むのが一般的なんですかね。

リファレンス元:C++ で物理アドレスの取得 - C++でゲームプログラミング

一応、getifaddrsを使うのがsysfsには頼らない方法だ。というより、manページにそのままズバリのサンプルコードが載っている。

getifaddrs(3) - Linux manual page

というより、なんでWIndowsはgetifaddrsじゃなくてGetAdaptersAddressesなんだろう。

1 comment:

Anonymous said...

getifaddrsで取得しているのはIPアドレスに見えますが、MACアドレスを取得するのはioctl (SIOCGIFHWADDR) ではないでしょうか:
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man7/netdevice.7.html
http://www.geekpage.jp/programming/linux-network/get-macaddr.php