0

嗨,我试图重新构建一个脚本。在 python 3 中,我使用了 _winreg 并且脚本正在运行,但是我在 python 2 中需要它,现在我得到了这个错误:

File "discoverNetworks.py", line 14, in printNets
guid = _winreg.EnumKey(key, i)
WindowsError: [Error 259] No more data is available

但当然在那个文件夹中有很多文件。

这是代码:

import _winreg
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 = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,net)
    print '\n[*] Networks You have Joined.'
    for i in range(100):
        try:
            guid = _winreg.EnumKey(key, i)
            netKey = _winreg.OpenKey(key, str(guid))
            (n, addr, t) = _winreg.EnumValue(netKey, 5)
            (n, name, t) = EnumValue(netKey, 4)
            macAddr = val2addr(addr)
            netName = str(name)
            print '[+] ' + netName + ' ' + macAddr
            _winreg.CloseKey(guid)
        except WindowsError:
            break
def main():
    printNets()
if __name__ == "__main__":
    main()

谢谢!

4

1 回答 1

0

EnumKey()被设计为被重复调用,直到 aWindowsError被抛出。从文档中

温格。枚举键(键,索引

. . .

每次调用该函数时都会检索一个子键的名称。它通常被重复调用,直到WindowsError引发异常,表明没有更多值可用。

WindowsError但是,在 Python 3 中运行它时没有收到 a 的原因是因为库在 Python 3.3 中更改为抛出 an OSError

事实上,EnvironmentError, IOError, WindowsError, VMSError, socket.error,select.errormmap.error已被合并到OSError3.3 中(来源)。

您可以通过异常处理 ( except WindowsError) 来处理错误,或者通过提前确定值的数量来完全避免它,QueryInfoKey本答案所示

于 2015-08-18T22:04:57.140 回答