MAC Adresse auslesen
Verfasst: 16.03.2010 16:21
Hier ersteinmal mein Code, mit dem ich unter Linux die MAC Adresse auslese:
Das funktioniert auch super, aber da es kein Problem ist, die MAC zu ändern, wollte ich fragen, ob man nicht auch direkt aus der Hardware die MAC auslesen kann, um solche Manipulationen vorzubeugen? Würde es evtl. mit SOCK_RAW anstelle von SOCK_DGRAM funktionieren? Wenn ja, was müsste ich machen, dass ich das auch so nutzen kann, da soweit ich weiß, der Prozess als EUID=0 laufen muss. (Hab keine Ahnung was das mit EUID aufsich hat, nutze Linux noch nicht so lange)
Code: Alles auswählen
#PF_INET = 2
#SOCK_DGRAM = 2
#SIOCGIFHWADDR = $8927
#SIOCGIFCONF=$8912
Structure sockaddr
sa_family.w ; address family, AF_xxx
sa_data.c[8] ; 14 bytes of protocol address
EndStructure
Structure ifreq
ifr_name.c[16]
StructureUnion
ifr_addr.sockaddr
ifr_dstaddr.sockaddr
ifr_broadaddr.sockaddr
ifr_netmask.sockaddr
ifr_hwaddr.sockaddr
ifr_flags.w
ifr_ifindex.l
ifr_metric.l
ifr_mtu.l
*ifmapifr_map
ifr_slave.s
ifr_newname.s
ifr_data.s
EndStructureUnion
EndStructure
Procedure.s getMAC()
Protected socket.l
Protected i.b
Protected mac.s
Protected buffer.ifreq
socket = SOCKET_(#PF_INET, #SOCK_DGRAM, 0)
If socket
PokeS(@buffer\ifr_name,"eth0")
If ioctl_(socket, #SIOCGIFHWADDR, @buffer) <> -1
For i = 0 To 5
If i = 0
mac = RSet(Hex(buffer\ifr_hwaddr\sa_data[i]), 2, "0")
Else
mac = mac + ":" + RSet(Hex(buffer\ifr_hwaddr\sa_data[i]), 2, "0")
EndIf
Next
EndIf
close_(socket)
ProcedureReturn mac
EndIf
EndProcedure
Debug getMac()