UUID -> getnode()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
smoovn
User
Beiträge: 8
Registriert: Mittwoch 21. November 2007, 09:05

Hallo,


Ich habe gerade nochmal nachgedacht und eine Lösung gefunden ich werde mich wieder melden wenn ich es habe.

ich würde für ein kleines Tool gerne alle MAC-Adressen des Rechners auslesen.

Ich habe da auch schon die passende Funktion gefunden, nur weiß ich sie nicht für meine bedürfnisse umzuschreiben. Und da dachte ich, dass ihr mir vieleicht einen kleinen Denkanstoß bekommen könnte:

Code: Alles auswählen

def _ipconfig_getnode():
    """Get the hardware address on Windows by running ipconfig.exe."""
    import os, re
    dirs = ['', r'c:\windows\system32', r'c:\winnt\system32']
    try:
        import ctypes
        buffer = ctypes.create_string_buffer(300)
        ctypes.windll.kernel32.GetSystemDirectoryA(buffer, 300)
        dirs.insert(0, buffer.value.decode('mbcs'))
    except:
        pass
    for dir in dirs:
        try:
            pipe = os.popen(os.path.join(dir, 'ipconfig') + ' /all')
        except IOError:
            continue
        for line in pipe:
            value = line.split(':')[-1].strip().lower()
            if re.match('([0-9a-f][0-9a-f]-){5}[0-9a-f][0-9a-f]', value):
                return int(value.replace('-', ''), 16)
Es wird ipconfig ausgeführt und von der ausgabe die erste MAC zurück gegeben. Aber ich z.B habe 2x Virtuelle und 2x Physikalische Adapter. Wie könnte ich denn alle MAC-Adressen von allen Adaptern zurück geben lassen?

Das ist hier vieleicht nicht richtig plaziert aber mir ist aufgefallen das die Funktion "_netbios_getnode()" in UUID einen Tipp fehlen enthält.

Code: Alles auswählen

def _netbios_getnode():
    """Get the hardware address on Windows using NetBIOS calls.
    See http://support.microsoft.com/kb/118623 for details."""
    import win32wnet, netbios
    ncb = netbios.NCB()
    ...
Der Fokus liegt hier auf "win32wnet". Oder liege ich da falsch???



Patrick
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

An die MAC-Adressen kommt man mit WMI recht einfach (die Win32-Extensions vorausgesetzt):

Code: Alles auswählen

import win32com.client

wmi = win32com.client.GetObject("winmgmts:")
for interface in wmi.ExecQuery('Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=1'):
    print interface.MACAddress
Antworten