注册表 结构

注册表由键(key,或称“项”)、子键(subkey,子项)和值项(value)构成。一个键就是树状数据结构中的一个节点,而子键就是这个节点的子节点,子键也是键。一个值项则是一个键的一条属性,由名称(name)、数据类型(datatype)以及数据(data)组成。一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。

在注册表编辑器(Regedit.exe)中,数据结构显示如下,其中,command键是open键的子键,(默认)表示该值是默认值,值名称为空,其数据类型为REG_SZ,数据值为%systemroot%\system32\NOTEPAD.EXE "%1

_winreg.OpenKey(key,sub_key,res=0,sam=KEY_READ) 打开建,子健

1.读取

读取用的方法是OpenKey方法:打开特定的key

_winreg.OpenKey(key,sub_key,res=0,sam=KEY_READ)

例子:此例子是显示了本机网络配置的一些注册表项

#!/usr/bin/env python

#coding=utf-8

import _winreg

key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{0E184877-D910-4877-B 4C2-04F487B6DBB7}")

#获取该键的所有键值,遍历枚举

try:

i=0

while 1:

#EnumValue方法用来枚举键值,EnumKey用来枚举子键

name,value,type = _winreg.EnumValue(key,i)

print repr(name),value,type

i+=1

except WindowsError:

print

#假如知道键名,也可以直接取值

value,type = _winreg.QueryValueEx(key,"DhcpDefaultGateway")

print "默认网关地址----",value,type

运行的结果如下:

'UseZeroBroadcast' 0 4

'EnableDeadGWDetect' 1 4

'EnableDHCP' 1 4

'IPAddress' [u'0.0.0.0'] 7

'SubnetMask' [u'0.0.0.0'] 7

'DefaultGateway' [] 7

'DefaultGatewayMetric' [] 7

'NameServer' 10.0.0.10 1

'Domain'  1

'RegistrationEnabled' 1 4

'RegisterAdapterName' 0 4

'TCPAllowedPorts' [u'0'] 7

'UDPAllowedPorts' [u'0'] 7

'RawIPAllowedProtocols' [u'0'] 7

'NTEContextList' [u'0x00000004'] 7

'DhcpClassIdBin' None 3

'DhcpServer' 10.104.4.1 1

'Lease' 907200 4

'LeaseObtainedTime' 1264122113 4

'T1' 1264575713 4

'T2' 1264915913 4

'LeaseTerminatesTime' 1265029313 4

'IPAutoconfigurationAddress' 0.0.0.0 1

'IPAutoconfigurationMask' 255.255.0.0 1

'IPAutoconfigurationSeed' 0 4

'AddressType' 0 4

'IsServerNapAware' 0 4

'DhcpIPAddress' 10.104.5.15 1

'DhcpSubnetMask' 255.255.254.0 1

'DhcpRetryTime' 453598 4

'DhcpRetryStatus' 0 4

'DhcpNameServer' 10.0.0.10 1

'DhcpDefaultGateway' [u'10.104.4.1'] 7

'DhcpSubnetMaskOpt' [u'255.255.254.0'] 7

默认网关地址---- [u'10.104.4.1'] 7

2.创建 修改注册表

创建key:_winreg.CreateKey(key,sub_key)

删除key: _winreg.DeleteKey(key,sub_key)

删除键值: _winreg.DeleteValue(key,value)

给新建的key赋值: _winreg.SetValue(key,sub_key,type,value)

例子:

#!/usr/bin/env python

#coding=utf-8

import _winreg

key=_winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Explorer")

#删除键

_winreg.DeleteKey(key, "Advanced")

#删除键值

_winreg.DeleteValue(key, "IconUnderline")

#创建新的

newKey = _winreg.CreateKey(key,"MyNewkey")

#给新创建的键添加键值

_winreg.SetValue(newKey,"ValueName",0,"ValueContent")

python3 对bytes类型不需要ord转换直接可以拿来用

from winreg import *
# python3 不同于python2 bytes类型不需要转换处理
#https://stackoverflow.com/questions/50111345/bytes-like-object-is-required-ord-expected-string-of-length-1-but-int-found
def ord_char(val):
add = ''
for ch in val:
add += ("%02x " %ch)
#add += (str(ch)
add = add.strip().replace(" ",":")[0:17]
return (add) def prints_net():
net = r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged"
# 打开所有的 machine下的net
key = OpenKey(HKEY_LOCAL_MACHINE,net)
print ('[+] Network you have join') for i in range(100):
try:
# 获取 键
guid = EnumKey(key,i)
# 打开machine》net 下所有的建
nekey = OpenKey(key,str(guid))
(name,addr,typ) = EnumValue(nekey,5)
(name,value,typ) = EnumValue(nekey,4)
#print(addr)
macaddr = ord_char(addr)
#print(value)
print ("[+] %s %s" %(value,macaddr))
CloseKey(nekey)
except Exception as e:
pass
def main():
# ord_char("\x00\x11\x50\x24\x68\x7F\x00\x00")
# ord_char("\x00\x11\x50\x24\x68\x7F\x00\x00")
# ord_char("\x00\x11\x50\x24\x68\x7F\x00\x00")
#ord_char(b'\xf4\xee\x14D6\xf6')
prints_net()
if __name__ == '__main__':
main()

  

python winreg总结的更多相关文章

  1. python学习之winreg模块

    winreg模块将Windows注册表API暴露给了python. 常见方法和属性 winreg.OpenKey(key,sub_key,reserved = ,access = KEY_READ) ...

  2. python,winreg,获取当前系统的桌面绝对路径

    import winreg import os def main(): new_path = os.path.join(desktop_path(), 'aaa.xlsx') # 结果为:C:\\Us ...

  3. python至winreg模块

    _winreg模块在python3中已经改名了 https://blog.csdn.net/zhangxiaoyang0/article/details/72236305?fps=1&loca ...

  4. python基础

    内容概要: 一.python2 or python3 目前大多使用python2.7,随着时间的推移,python3将会成为python爱好者的主流. python2和3区别: 1.PRINT IS ...

  5. 【Python五篇慢慢弹(4)】模块异常谈python

    模块异常谈python 作者:白宁超 2016年10月10日12:08:31 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondo ...

  6. Python基础1

    本节内容2016-05-30 Python介绍 发展史 Python 2 0r 3? 安装 Hello word程序 变量 用户输入 模块初识 .pyc? 数据类型初识 数据运算 if...else语 ...

  7. Python之路,Day1 - Python基础1

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  8. Python基础语法

    学习一门编程语言,通常是学习该语言的以下几个部分的内容: 基础语法:如,变量的声明与调用.基本输出语句.代码块语法.注释等: 数据类型:通常都为 数字.字符串.布尔值.数组.链表.Map.Set等: ...

  9. python日期格式化与绘图

    画一个量随着时间变化的曲线是经常会遇到的需求,比如画软件用户数的变化曲线.画随时间变化的曲线主要用到的函数是matplotlib.pyplot.plot_date(date,num).由于其第一个变量 ...

随机推荐

  1. 如何使用thrift 服务引擎组件

    在本文中将介绍如果通过thrift 组件集成到surging 微服务引擎中,然后可以选择dotnetty 或thrift作为服务远程调用RPC,也可以通过其它语言的thrift 调用surging 服 ...

  2. 单元测试中使用Spring的ReflectionTestUtils更方便

    1 简介 ReflectionUtils是Spring中一个常用的类,属于spring-core包:ReflectionTestUtils则属于spring-test包.两者功能有重叠的地方,而Ref ...

  3. 201771010113 李婷华 《面向对象程序设计(java)》

    一.理论知识部分 设计模式(Design pattern)是设计者一种流行的思考设计问题的方法,是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结.使用设计模式是为了可重用代码.让代码 ...

  4. 【Hadoop离线基础总结】MapReduce入门

    MapReduce入门 Mapreduce思想 概述 MapReduce的思想核心是分而治之,适用于大量复杂的任务处理场景(大规模数据处理场景). 最主要的特点就是把一个大的问题,划分成很多小的子问题 ...

  5. 一阶RC低通滤波器详解(仿真+matlab+C语言实现)

    文章目录 1 预备知识 2 simulink 仿真 3 simulink 运行结果 4 matlab实现 5 matlab运行结果 6 C语言实现 7 C语言运行结果 如果本文帮到了你,帮忙点个赞: ...

  6. Python 的缩进是不是反人类的设计?

    前些天,我写了<Python为什么使用缩进来划分代码块?>,文中详细梳理了 Python 采用缩进语法的 8 大原因.我极其喜欢这种简洁优雅的风格,所以对它赞美有加. 然而文章发出去后,非 ...

  7. Android CodeReview 些许总结

    CodeReview些许总结 1:使用Handler的时候,使用handler.post(Runnable);,hanler与类尽量保持弱引用关系,或者使用静态的handler对象 public Ha ...

  8. 自动配置的Springboot内junit测试单元不能运行

    解决测试单元不能运行 问题:测试单元的 @Test 前面没有运行图标 解决 IDEA内:File - Setting - Plugins:搜到JUnitGenerator2.0,安装,重启IDEA 光 ...

  9. 关于 Blob

    博客地址:https://ainyi.com/88 对于 Blob,前端开发中可能比较少遇到:数据库中可使用 Blob 概念,例如 Mysql 存储二进制数据的类型就是 Blob,也就是说图片可存储于 ...

  10. 00005-js 获取uuid

    admin.guid = function () { function S4() { return (((1+Math.random())*0x10000)|0).toString(16).subst ...