关于python:windows注册表值返回为长整数

windows registry values coming back as long integers

我正在通过暴力的Python工作,在第3章的第一个程序中遇到了一个问题。

其目的是打印HKEY_LOCAL_MACHINE../unmanaged中每个网络的名称以及它们分配的DefaultGateWayMac

我已经在这里检查了各种各样的问题,所以在最初设置脚本时遇到了问题(Violen python已经很老了..)。

我面临的问题是,当我试图打印MAC地址时,我得到了一堆整数。我最初的想法是,有些组合可能是ASCII值,但即使试图转换它们也无法创建正确的MAC地址。

我已经检查了我机器的注册表项中的MAC地址,其中大多数看起来都很好(其中一些是空的)。但如上所述,它们似乎没有一个打印得很好。

这是我的剧本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from winreg import *

def val2addr(val):
    if val:
        address =""
        for ch in val:
            if(not int(ch)):
                address +="%02x" % ord(ch)
                address = address.strip(' ').replace(' ', ':')[0: 17]
            else:
                address += str(ch)
        return address
    return"[!] No MAC [!]"

def print_networks():
    net = u"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"+\
         "\
etworkList\\Signatures\\Unmanaged"

    print(str(HKEY_LOCAL_MACHINE) + net)
    key = OpenKey(HKEY_LOCAL_MACHINE, net, 0, (KEY_WOW64_64KEY + KEY_READ))
    print('
[*] Networks You have Joined:
'
)

    for network in range(100):
        try:
            guid = EnumKey(key, network)
            netkey = OpenKey(key, str(guid))
            mac = QueryValueEx(netkey, 'DefaultGatewayMac')[0]
            mac = val2addr(mac)
            network_name = QueryValueEx(netkey, 'Description')[0]
            print("[+] Network Name:" + network_name +"[+] Mac:" + mac)
            CloseKey(netkey)
        except Exception as e:
            print(e)
            break

def main():
    print_networks()

if __name__ == '__main__':
    main()

如您所见,我做了一些更改(特别是对val2addr):

1
2
3
4
5
6
def val2addr(val):
    addr = ''
    for ch in val:
        addr += '%02x '% ord(ch)
        addr = addr.strip(' ').replace(' ', ':')[0:17]
    return addr

以下是我的程序打印的一些示例输出:

1
2
3
4
5
6
7
8
[*] Networks You have Joined:

[+] Network Name: DIRECT-HUJABERO059243[+] Mac: [!] No MAC [!]
[+] Network Name: Network  2[+] Mac: 72906311290171
[+] Network Name: Network  3[+] Mac: 1447774159240
[+] Network Name: Network[+] Mac: 200205114121180123
[+] Network Name: BTHub3-JZM3[+] Mac: 20451187180235148
[WinError 259] No more data is available


它是你的MAC地址的十进制表示。

转换72906311290171,我得到424ED2C94D3B,这是一个MAC地址(42:4E:D2:C9:4D:3B)

对python2的转换:

1
2
dec_mac = 72906311290171
print ':'.join(s.encode('hex') for s in str(dec_mac).decode('hex'))

对于Python 3

1
2
dec_mac = 72906311290171
print(':'.join(format(s, '02x') for s in bytes.fromhex(str(dec_mac))))

尝试使用此版本的val2addr

1
2
def val2addr(val):
    return ':'.join('{:02X}'.format(b) for b in val)