Ver Mensaje Individual
  #13 (permalink)  
Antiguo 27/06/2005, 17:00
Avatar de trasgukabi
trasgukabi
 
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 20 años, 8 meses
Puntos: 18
A tí no te vale, pero puede ser que a alguno que venga detrás sí.

Otra forma para conseguirlo (en una LAN) sería ésta:

supongamos este escenario
-tarjeta para recuperar la MAC debe conseguir la IP por DHCP
-IIS debe correr en el mismo servidor que esta el servidor DHCP

y el funcionamiento básico sería
-copiar el .log de DHCP (\windows\system32\dhcp\dhcpsrvlog.DÍA.) a un directorio con permisos suficientes( Hay que copiarlo porque el archivo del día actual está en uso por el servidor DHCP y no puede abrirse directamente).
-Este fichero tiene la estructura

ID,Date,Time,Description,IP Address,Host Name,MAC Address
11,12/25/99,00:04:00,Renew,255.255.255.255,testbench,00C0F0 XXYYZZ


-Conseguir la IP del cliente
-buscarla en el log
-rescatar de esa línea la MAC (último campo de la línea)
-borrar el archivo copiado

y ahora, al turrón:
Código:
<% Option Explicit %>
<%
'<<<<< DECLARE ALL VARIABLES >>>>>'
Dim sRIPa
Dim sDate
Dim intRandom
Dim objFSO
Dim objTextFile
Dim sLine
Dim sMacAddr


'<<<<< OBTAIN CLIENT's IP ADDRESS >>>>>'
sRIPa = Request.ServerVariables("HTTP_X_FORWARDED_FOR")

'<<<<< OBTAIN DATE AND FORMAT FOR APPROPRIATE DHCP LOG EXTENSION >>>>>'
sDate = LEFT(FormatDateTime(Date, 1), 3)


'<<<<< REDIRECT BAD IP RANGES TO APPROPRIATE PAGE >>>>>'
If LEFT(sRIPa,  7) <> "255.255" Then

	Response.Redirect ("error_page.asp")

End If


'<<<<< CREATE TEMP FILE NAME - RANDOMLY GENERATED >>>>>'
Randomize
intRandom = Int((99999 - 11111 + 1) * Rnd + 1)


'<<<<< COPY THE DHCP LOG TO WORKING DIRECTORY>>>>>'
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "C:\winnt\system32\dhcp\DhcpSrvLog." & _
                sDate, "C:\working\"
& intRandom & ".txt"
Set objFSO = Nothing


'<<<<< OBTAIN THE MAC ADDRESS FROM THE COPIED DHCP LOG >>>>>'
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("C:\working\" & _
                  intRandom & ".txt")

Do While Not objTextFile.AtEndOfStream
	sLine = objTextFile.ReadLine 

	If InStr(sLine, sRIPa) Then
		sMacAddr = LCASE(RIGHT(sLine,12))
	End If

Loop


'<<<<< CLEAN UP AND DELETE THE TEMPORARY FILE >>>>>'
objTextFile.Close
Set objTextFile = Nothing
objFSO.DeleteFile ("C:\working\" & intRandom & ".txt")
Set objFSO = Nothing


'<<<<< FORMAT THE MAC ADDRESS >>>>>'
sMacAddr = LEFT(sMacAddr, 4) & "." & MID(sMacAddr, 5, 4) & "." &
RIGHT(sMacAddr, 4)


'<<<<< GENERATE THE HTML OUTPUT >>>>>'
Response.Write ("<HTML><FORM><TABLE BORDER=0 ALIGN=LEFT><TR><TD>")
Response.Write ("<B>IP Address:</B></TD><TD><INPUT TYPE='TEXT'")
Response.Write (" SIZE=15 VALUE='" & sRIPa & "'>")
Response.Write ("</TD></TR>")
Response.Write ("<TR><TD><B>MAC Address:</B>  </TD><TD>")
Response.Write ("<INPUT TYPE=TEXT SIZE=15 VALUE='" & sMacAddr)
Response.Write ("'></TD>")
Response.write ("</TR></TABLE></FORM></HTML>")

%>
Nota: la MAC de los usuarios de Macintosh es más larga que las demás, pero los 12 últimos caracteres son, en sí, la MAC real.
Nota:Los permisos necesarios para el usuario IUSR son LEER en \windows\system32\dhcp y LEER,ESCRIBIR Y BORRAR en el directorio de copia

**traducción libre de un artículo en http://www.4guysfromrolla.com/