MACアドレスの取得 2
昨日に引き続き、本日も調査を兼ねて取り掛かる。
Netbiosを使用した方法で実装することにした。
まず、Netbiosを使用するにあたり、以下のヘッダーとlibファイルを取り込む必要がある。
#include "Nb30.h"
#pragma comment( lib, "Netapi32.lib" )
あとは、Netbios()を使用し、NICカードの枚数を取得し、
その枚数分、MACアドレスの取得を試みる。
※細かいところは…とりあえずおいとく(汗)
※ソースのベースは他の方から引用させてもらってます('_';
■以下、サンプルソース
CString変数strMacBuffを"00-11-22-33-44-55"と表示できるように文字列操作を行っている。
struct ASTAT
{
/* ADAPTER_STATUS: http://msdn.microsoft.com/en-us/library/bb870890(v=vs.85).aspx */
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff[30];
};
int i;
NCB sNcb;
UCHAR uRetCode;
LANA_ENUM lenum;
ASTAT Adapter;
CString strMacBuff = _T(""); // MACアドレス格納
char szBuff[MAX_PATH];
//初期化
- ZeroMemory( &szBuff, sizeof(szBuff) );
// NIC数の取得
- ZeroMemory( &sNcb, sizeof(sNcb) );
sNcb.ncb_command = NCBENUM;
sNcb.ncb_buffer = (UCHAR*)&lenum;
sNcb.ncb_length = sizeof(lenum);
uRetCode = Netbios( &sNcb );
if( 0 != uRetCode ){
// MessageBox(_T("取得失敗"),0,0);
return;
}
for( i = 0; i < lenum.length; i++){ // NIC数分繰り返す
//NICのリセット
::ZeroMemory( &sNcb, sizeof(sNcb) );
sNcb.ncb_command = NCBRESET; // NCBRESETコマンド
sNcb.ncb_lana_num = lenum.lana[i];
uRetCode = Netbios( &sNcb ); // Netbios命令を実行
if( 0 != uRetCode ){
// MessageBox(_T("リセット失敗"),0,0);
return;
}
// MACアドレスを取得
::ZeroMemory( &sNcb, sizeof(sNcb) );
sNcb.ncb_command = NCBASTAT; // NCBASTATコマンド
sNcb.ncb_lana_num = lenum.lana[i];
strcpy( (char*)(sNcb.ncb_callname), "* " );
sNcb.ncb_buffer = (UCHAR*)&Adapter;
sNcb.ncb_length = sizeof(Adapter);
uRetCode = Netbios(&sNcb);
if( 0 != uRetCode ){
// MessageBox(_T("MACアドレス取得失敗"),0,0);
return;
}
if( 0 == uRetCode ){
sprintf(szBuff, "%02X-%02X-%02X-%02X-%02X-%02X"
, Adapter.adapt.adapter_address[0]
, Adapter.adapt.adapter_address[1]
, Adapter.adapt.adapter_address[2]
, Adapter.adapt.adapter_address[3]
, Adapter.adapt.adapter_address[4]
, Adapter.adapt.adapter_address[5]);
// **-**-**-**-**-**へ形式を変えたMACアドレスを送信用変数へ格納
strMacBuff = szBuff;
}
}
以上、MACアドレスの取得方法のメモ。