windows registry values coming back as long integers
我正在通过暴力的Python工作,在第3章的第一个程序中遇到了一个问题。
其目的是打印
我已经在这里检查了各种各样的问题,所以在最初设置脚本时遇到了问题(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地址的十进制表示。
转换
对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)))) |
尝试使用此版本的
1 2 | def val2addr(val): return ':'.join('{:02X}'.format(b) for b in val) |