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)
我正在研究 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)