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:

  1. 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

    ReplyDelete

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.