Top / Programming / C++Builder / MACアドレスを取得する

MACアドレスを取得する

Netbios 関数を使用したMACアドレスの取得方法です。

#include <tchar.h>
#include <windows.h>
#include <assert.h>
#include <stdio.h>

#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
  typedef struct _ASTAT
  {
    ADAPTER_STATUS adapter;
    NAME_BUFFER buffer[30];
  } ASTAT;

  NCB ncb;
  LANA_ENUM lenum;

  //NICの数を取得
  ZeroMemory(&ncb,sizeof(ncb));
  ncb.ncb_command = NCBENUM;
  ncb.ncb_buffer = (UCHAR*)&lenum;
  ncb.ncb_length = sizeof(lenum);
  Netbios(&ncb);

  for(int i = 0; i < lenum.length; i++)
  {
    //リセット
    ZeroMemory(&ncb, sizeof(ncb));
    ncb.ncb_command = NCBRESET;
    ncb.ncb_lana_num = lenum.lana[i];
    UCHAR retCode = Netbios(&ncb);
    assert(retCode == 0);

    //MACアドレスの取得
    ASTAT adapter;
    ZeroMemory(&ncb, sizeof(ncb));
    ncb.ncb_command = NCBASTAT;
    ncb.ncb_lana_num = lenum.lana[i];
    strcpy(ncb.ncb_callname, "*");
    ncb.ncb_buffer = (UCHAR*)&adapter;
    ncb.ncb_length = sizeof(adapter);
    retCode = Netbios(&ncb);
    assert(retCode == 0);

    printf("%02X-%02X-%02X-%02X-%02X-%02X",
           adapter.adapter.adapter_address[0],
           adapter.adapter.adapter_address[1],
           adapter.adapter.adapter_address[2],
           adapter.adapter.adapter_address[3],
           adapter.adapter.adapter_address[4],
           adapter.adapter.adapter_address[5]);
  }
  return 0;
}

更新履歴