How to get the local mac address?

bonono at gmail.com bonono at gmail.com
Thu Dec 15 04:50:52 CET 2005


Daniel Crespo wrote:
> Hi, I tried:
>
> import ctypes
> import socket
> import struct
>
> def get_macaddress(host):
>     """ Returns the MAC address of a network host, requires >= WIN2K.
> """
>
>     # Check for api availability
>     try:
>         SendARP = ctypes.windll.Iphlpapi.SendARP
>     except:
>         raise NotImplementedError('Usage only on Windows 2000 and
> above')
>
>     # Doesn't work with loopbacks, but let's try and help.
>     if host == '127.0.0.1' or host.lower() == 'localhost':
>         host = socket.gethostname()
>
>     # gethostbyname blocks, so use it wisely.
>     try:
>         inetaddr = ctypes.windll.wsock32.inet_addr(host)
>         if inetaddr in (0, -1):
>             raise Exception
>     except:
>         hostip = socket.gethostbyname(host)
>         inetaddr = ctypes.windll.wsock32.inet_addr(hostip)
>
>     buffer = ctypes.c_buffer(6)
>     addlen = ctypes.c_ulong(ctypes.sizeof(buffer))
>     if SendARP(inetaddr, 0, ctypes.byref(buffer), ctypes.byref(addlen))
> != 0:
>         raise WindowsError('Retreival of mac address(%s) - failed' %
> host)
>
>     # Convert binary data into a string.
>     macaddr = ''
>     for intval in struct.unpack('BBBBBB', buffer):
>         if intval > 15:
>             replacestr = '0x'
>         else:
>             replacestr = 'x'
>         macaddr = ''.join([macaddr, hex(intval).replace(replacestr,
> '')])
>
>     return macaddr.upper()
>
> if __name__ == '__main__':
>     print 'Your mac address is %s' % get_macaddress('localhost')
>
> It works perfect under W2K and above. But I would like to run it on
> Win98 too. Any help?
>
Sorry that I can't help you in any way but have a question myself.  Is
there an OS independent way to get this thing(regardless of how to
format it) in Python ? I know this may not matter if all you want is
Windows but there is just another thread talking about one should write
programs that is OS independent.

Is this a problem of the network library of python ?




More information about the Python-list mailing list