windows 注册表值返回为长整数

windows registry values coming back as long integers

我正在研究 Violent Python,在第 3 章的第一个程序中遇到了问题。

想法是打印 HKEY_LOCAL_MACHINE../unmanaged 中每个网络的名称及其分配的 DefaultGateWayMac

我已经在 SO 上检查了各种问题,因为我最初在设置脚本时遇到了问题(Violen Python 变得很老..)。

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

我已经检查了 machine 的 mac 地址的注册表项,其中大部分看起来都很好(其中一些是空的)。但如上所述,其中 none 似乎打印良好。

这是我的脚本:

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"+\
          "\NetworkList\Signatures\Unmanaged"
    print(str(HKEY_LOCAL_MACHINE) + net)
    key = OpenKey(HKEY_LOCAL_MACHINE, net, 0, (KEY_WOW64_64KEY + KEY_READ))
    print('\n[*] Networks You have Joined:\n')

    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):

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

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

[*] 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 的转化率:

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

和 python3

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

尝试使用此版本的 val2addr:

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