毎度毎度すみません。
IPアドレスからMACアドレスを取得する方法を探しています。
今は、sbtstatをコマンドプロンプトから実行し、そこで一時ファイルを保存
→データを読み込んで、必要な値だけを文字列に変換
といった手順で構築しています。
せっかくなのでAPI関数を使ってできないものかと・・・
何かよい方法を御存知な方はいらっしゃいませんか?
宜しくお願いします・・・
GetIpNetTable API
かな?
すみません・・・IPアドレスからだと、ネットワークに接続されていないIPのMACは取得できないですよね?
ローカルマシンのMACアドレスを取得するには、どうしたらいいのでしょう?
の間違いでした・・・。
GetIfTable
ではどうでしょう
こんなかんじ
http://www.dinop.com/vc/getmac_iphlpapi2.html
かなさん
ありがとうございました☆
こ〜んな感じで作ってみました。
int GetMACAddressDora(char *MACAddress, int Count);
int main()
{
char MACAddress[64];
GetMACAddressDora(MACAddress, 1);
printf("%s", MACAddress);
}
//MACアドレスを取得
int GetMACAddressDora(char *MACAddress, int Count)
{
DWORD d = 0;
char Buf[1024];
//第1パラメータにNULLをおいて、必要サイズを DWORD d に取得する
GetIfTable( NULL , &d, FALSE );
//MIB_IFADDRTABLEへのポインタに、必要サイズを確保する
PMIB_IFTABLE IfTable = (PMIB_IFTABLE)new char[d] ;
if( IfTable )
{
//アドレステーブルの取得
if( GetIfTable( (PMIB_IFTABLE)IfTable,&d,FALSE) == NO_ERROR )
{
//取得したテーブル数は、dwNumEntriesで分かる
for(int i=0;i< (int)IfTable->dwNumEntries;i++ )
{
if(i+1 == Count)
{
//MACを表示
wsprintf(Buf,"%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x" ,(unsigned char)IfTable->table[i].bPhysAddr[0] ,(unsigned char)IfTable->table[i].bPhysAddr[1] ,(unsigned char)IfTable->table[i].bPhysAddr[2], (unsigned char)IfTable->table[i].bPhysAddr[3], (unsigned char)IfTable->table[i].bPhysAddr[4], (unsigned char)IfTable->table[i].bPhysAddr[5]);
strcpy(MACAddress, Buf);
//MIB_IFADDRTABLEへのポインタに、確保したメモリを解放する
delete [] IfTable;
//成功したら0を返す
return 0;
}
}
}
else
{
//エラーが発生したときは1を返す
//MIB_IFADDRTABLEへのポインタに、確保したメモリを解放する
delete [] IfTable;
return 1;
}
//MIB_IFADDRTABLEへのポインタに、確保したメモリを解放する
delete [] IfTable;
}
//最後まできてしまったら、MACをみたいNICの枚数が多すぎ。この時は2を返す
return 2;
}
一部省略ですが、こんな感じで。
まだ試していないですが、複数NICがあったときに、いったんこの関数を使ってカウントし、そのうちの指定した番号のMACが取れたらいいな〜って感じで作っています。
現状では、まだNIC1枚挿しでしか試していませんが・・・
これからデバッグでっす☆
本当にありがとうございました。
ツイート | ![]() |