0

我正在尝试打印保存在 Windows 注册表中的网络历史记录,但遇到了麻烦。

我有两个功能。一是转换二进制文本,二是获取实际数据。

这是我所拥有的:

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

def printNets():
    net = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged"
    key = OpenKey(HKEY_LOCAL_MACHINE, net)
    print key
    print '\n[*] Networks You have Joined.'
    for i in range(100):
        try:
            guid = EnumKey(key, i)
            netKey = OpenKey(key, str(guid))
            (n, addr, t) = EnumValue(netKey, 5)
            macAddr = val2addr(addr)
            netName = str(name)
            print '[+] ' + netName + ' ' + macAddr
            CloseKey(netKey)
        except:
            break

我相信错误出在这个 guid 值中:

for i in range(100):
    try:
        guid = EnumKey(key, i)
        netKey = OpenKey(key, str(guid))
        (n, addr, t) = EnumValue(netKey, 5)

当我自己运行“try”子代码时,它会抛出一个:

[错误 259] 没有更多可用数据

指向指导值。

我认为这就是我卡住的地方。我很难找到错误,因为它只是被抛出到异常代码中,因此没有给我任何反馈。

请帮忙!!!

编辑:从我挖掘的内容来看,这可能是由于在 64 位系统上运行 32 位 Python 所致。不过还在挖。

4

1 回答 1

1

当我遇到 32/64 位问题时,我使用类似于此的代码解决了它

import winreg
HKLM =winreg.HKEY_LOCAL_MACHINE
bb = r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged"
abc = winreg.OpenKeyEx(HKLM, bb,0,(winreg.KEY_WOW64_64KEY + winreg.KEY_ALL_ACCESS))
efg = winreg.EnumKey(abc,0)
z = winreg.OpenKeyEx(abc,str(efg))
q = winreg.QueryValueEx(z,"Description")[0]
print (q)
q = winreg.QueryValueEx(z,"DefaultGatewayMac")[0]
print (q)

希望这有助于为您指明正确的方向

于 2014-06-19T17:36:11.363 回答