Created
July 6, 2013 06:12
-
-
Save xavierskip/5938867 to your computer and use it in GitHub Desktop.
Get MAC and IP address
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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') | |
print socket.gethostbyname(socket.gethostname()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment