Macアドレスの取得方法
Posted: 2007年10月11日(木) 21:22
主題の通りです。
Macアドレスの取得方法を教えてください。
また、最近は有線と無線LANが搭載されたPCが多いので、両方知りたいです。
よろしくお願いします。
Macアドレスの取得方法を教えてください。
また、最近は有線と無線LANが搭載されたPCが多いので、両方知りたいです。
よろしくお願いします。
コード: 全て選択
#N88BASIC
'宣言
Declare Function GetIfTable Lib "iphlpapi.dll" (pIfTable As *MIB_IFTABLE,pdwSize As *DWord,bOrder As Long) As DWord
Const MAXLEN_PHYSADDR = 8
Const MAXLEN_IFDESCR = 256
Const MAX_INTERFACE_NAME_LEN = 256
TypeDef IF_INDEX = DWord
TypeDef IFTYPE = DWord
Enum INTERNAL_IF_OPER_STATUS
IF_OPER_STATUS_NON_OPERATIONAL = 0
IF_OPER_STATUS_UNREACHABLE
IF_OPER_STATUS_DISCONNECTED
IF_OPER_STATUS_CONNECTING
IF_OPER_STATUS_CONNECTED
IF_OPER_STATUS_OPERATIONAL
End Enum
Type MIB_IFROW
wszName[ELM(MAX_INTERFACE_NAME_LEN)] As Word
dwIndex As IF_INDEX
dwType As IFTYPE
dwMtu As DWord
dwSpeed As DWord
dwPhysAddrLen As DWord
bPhysAddr[ELM(MAXLEN_PHYSADDR)] As Byte
dwAdminStatus As DWord
dwOperStatus As INTERNAL_IF_OPER_STATUS
dwLastChange As DWord
dwInOctets As DWord
dwInUcastPkts As DWord
dwInNUcastPkts As DWord
dwInDiscards As DWord
dwInErrors As DWord
dwInUnknownProtos As DWord
dwOutOctets As DWord
dwOutUcastPkts As DWord
dwOutNUcastPkts As DWord
dwOutDiscards As DWord
dwOutErrors As DWord
dwOutQLen As DWord
dwDescrLen As DWord
bDescr[ELM(MAXLEN_IFDESCR)] As Byte
End Type
Const ANY_SIZE = 1
Type MIB_IFTABLE
dwNumEntries As DWord' テーブルの数
table[ELM(ANY_SIZE)] As MIB_IFROW
End Type
'ここからメイン
'変数
Dim TableBufferSize As DWord,pTable As *MIB_IFTABLE
'IfTableの大きさを調べる(TableBufferSizeに入る)
GetIfTable(NULL,VarPtr(TableBufferSize),FALSE)
'バッファ確保
pTable = calloc(TableBufferSize)
'IfTableをコピー
GetIfTable(pTable,VarPtr(TableBufferSize),FALSE)
'MACアドレス表示
'pTable->table[]はpTable->dwNumEntriesの分だけ存在する
'pTable->table[].bPhysAddr[]の配列がMACアドレス。配列の大きさはpTable->table[].dwPhysAddrLen
Dim i As Long,j As Long
For i=0 To pTable->dwNumEntries-1
If pTable->table.dwPhysAddrLen>0 Then
For j=0 To pTable->table.dwPhysAddrLen-2
Print Hex$(pTable->table.bPhysAddr[j])+":";
Next
Print Hex$(pTable->table.bPhysAddr[pTable->table.dwPhysAddrLen-1])
End If
Next
'バッファ開放
free(pTable)