Why MAC addresses suck
any idea how much of a pain it is to find info about obtaining hardware MAC addresses from clients using an ASP page? for windows machines:
strIP = Request.ServerVariables("HTTP_X_CISCO_BBSM_CLIENTIP") strMac = GetMACAddress(strIP) Function GetMACAddress(strIP) Set net = Server.CreateObject("wscript.network") Set sh = Server.CreateObject("wscript.shell") sh.run "%comspec% /c nbtstat -A " & strIP & " > c:\" & strIP & ".txt",0,true Set sh = nothing Set fso = createobject("scripting.filesystemobject") Set ts = fso.opentextfile("c:\" & strIP & ".txt") macaddress = null Do While Not ts.AtEndOfStream data = ucase(trim(ts.readline)) If instr(data,"MAC ADDRESS") Then macaddress = trim(split(data,"=")(1)) Exit Do End If loop ts.close Set ts = nothing Set fso = nothing GetMACAddress = macaddress End Function
for *nix boxes:
strIP = Request.ServerVariables("HTTP_X_CISCO_BBSM_CLIENTIP") strMac = GetMACAddress(strIP) Function GetMACAddress(strIP) Set net = Server.CreateObject("wscript.network") set oShell = CreateObject("Wscript.Shell") cmd = "%COMSPEC% /c ping -n 2 " & strIP & ">nul" oShell.Run cmd,0,1 set oShell = nothing Set sh = Server.CreateObject("wscript.shell") sh.run "%comspec% /c arp -a " & strIP & " > c:\" & strIP & ".txt",0,true Set sh = nothing Set fso = createobject("scripting.filesystemobject") Set ts = fso.opentextfile("c:\" & strIP & ".txt") macaddress = null Do While Not ts.AtEndOfStream data = ucase(trim(ts.readline)) If instr(data,strIP) Then macaddress = trim(split(split(data,strIP)(1),"DYNAMIC")(0)) Exit Do End If loop ts.close Set ts = nothing Set fso = nothing GetMACAddress = macaddress End Function
substitute "REMOTE_ADDR" for "HTTP_X_CISCO_BBSM_CLIENTIP" if you're not using this weak-ass cisco proxy software like i am. i hate ASP.