WindowsのAPIを直接使ってやるなら、こんな感じですかね。
#uselib "iphlpapi.dll"
#func GetIfTable "GetIfTable" int, int, int
#const NO_ERROR $00000000
#const ERROR_INSUFFICIENT_BUFFER $0000007A
#const ERROR_INVALID_PARAMETER $00000057
#const ERROR_NOT_SUPPORTED $00000032
#const MAX_INTERFACE_NAME_LEN 256
#const MAXLEN_PHYSADDR 8
#const MAXLEN_IFDESCR 256
size = 65536
sdim iftable, size
GetIfTable varptr(iftable), varptr(size), 1
switch stat
case NO_ERROR
index = 0
result = ""
dupptr dwNumEntries, varptr(iftable)+index, 4, 4
index += 4
repeat dwNumEntries
index += 16+MAX_INTERFACE_NAME_LEN*2
dupptr dwPhysAddrLen, varptr(iftable)+index, 4, 4
index += 4
if dwPhysAddrLen > 0 {
dupptr bPhysAddr, varptr(iftable)+index, dwPhysAddrLen, 2
physaddr = ""
repeat dwPhysAddrLen
if cnt!0 : physaddr += ":"
physaddr += strf("%02X",peek(bPhysAddr,cnt))
loop
result += "MACアドレス : "+physaddr+"\n"
} else {
result += "MACアドレス : なし\n"
}
index += 60+MAXLEN_PHYSADDR
dupptr dwDescrLen, varptr(iftable)+index, 4, 4
index += 4
if dwDescrLen>0 {
dupptr bDescr, varptr(iftable)+index, dwDescrLen, 2
result += "説明 : "+bDescr+"\n"
} else {
result += "説明 : なし\n"
}
index += MAXLEN_IFDESCR
result += "\n"
loop
mesbox result, 640, 480, 4, -1
swbreak
case ERROR_INSUFFICIENT_BUFFER
mes "バッファが不足しています。"
mes "必要なバッファは "+size+" bytes です。"
swbreak
case ERROR_INVALID_PARAMETER
mes "バッファサイズが指定されていないか、"
mes "バッファサイズに書き込むことができません。"
swbreak
case ERROR_NOT_SUPPORTED
mes "お使いのシステムではこの関数はサポートされていません。"
swbreak
default
mes "その他のエラーです。"
swbreak
swend
stop
GetIfTable関数を利用してMACアドレスを列挙しています。
Windows2000Pro以降なら使用可能だと思います。