嘿,我试着重建一个剧本。在python 3中,我使用了_winreg,并且脚本正在运行,但是我需要它在python 2中,现在我得到了这个erorr:
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()谢谢!
发布于 2015-08-18 22:04:57
EnumKey()被设计为反复调用,直到抛出WindowsError为止。来自文献资料
winreg.EnumKey(key,指数 。。。 该函数在每次调用时检索一个子键的名称。通常会反复调用它,直到引发
WindowsError异常为止,这表明没有更多的值可用。
但是,在Python3中运行WindowsError时没有收到它的原因是而不是。
事实上,EnvironmentError、IOError、WindowsError、VMSError、socket.error、select.error和mmap.error已在3.3 (来源)中合并为OSError。
您可以通过异常处理(except WindowsError)来处理错误,也可以通过在QueryInfoKey中预先确定值的数量来避免错误,如这个答案所示。
https://stackoverflow.com/questions/32083200
复制相似问题