go采集注册表
package mainimport ("fmt""golang.org/x/sys/windows/registry""log""os""strconv""strings"
)func USBSTOR_Enum() {// 打开注册表键keyPath := `SYSTEM\CurrentControlSet\Services\USBSTOR\Enum`k, err := registry.OpenKey(registry.LOCAL_MACHINE, keyPath, registry.QUERY_VALUE)if err != nil {log.Fatalf("无法打开注册表键 %s: %v", keyPath, err)}defer k.Close()// 获取 U 盘数量count, _, err := k.GetIntegerValue("Count")if err != nil {log.Fatalf("无法获取 U 盘数量: %v", err)}if count < 1 {fmt.Println("没有检测到 U 盘!")os.Exit(0)}// 遍历每个 U 盘的信息fmt.Printf("\n检测到 %d 个 U 盘,按插入顺序输出信息:\n\n", count)for i := 0; i < int(count); i++ {valueName := strconv.Itoa(i)info, _, err := k.GetStringValue(valueName)if err != nil {log.Printf("无法获取键值 %s 的信息: %v", valueName, err)continue}// 提取 SN、VID 和 PIDparts := strings.Split(info, "\\")if len(parts) < 3 {log.Printf("无法解析设备信息: %s", info)continue}sn := parts[2]pvid := parts[1]vid := strings.Split(strings.Split(pvid, "&")[0], "_")[1]pid := strings.Split(strings.Split(pvid, "&")[1], "_")[1]// 打印信息fmt.Printf("U 盘 %d:\n", i+1)fmt.Printf(" SN 码: %s\n", sn)fmt.Printf(" VID: %s\n", vid)fmt.Printf(" PID: %s\n\n", pid)}
}// 采集计算机名称
func getComputerName() {keyPath := `SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName`k, err := registry.OpenKey(registry.LOCAL_MACHINE, keyPath, registry.QUERY_VALUE)if err != nil {log.Printf("无法获取计算机名称: %v", err)return}defer k.Close()name, _, err := k.GetStringValue("ComputerName")if err != nil {log.Printf("无法读取 ComputerName 值: %v", err)return}fmt.Printf("计算机名称: %s\n", name)
}// 采集已安装软件信息
func getInstalledSoftware() {keyPath := `SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall`k, err := registry.OpenKey(registry.LOCAL_MACHINE, keyPath, registry.ENUMERATE_SUB_KEYS)if err != nil {log.Printf("无法打开已安装软件注册表路径: %v", err)return}defer k.Close()subKeys, err := k.ReadSubKeyNames(-1)if err != nil {log.Printf("无法读取子键名称: %v", err)return}fmt.Println("已安装的软件列表:")for _, subKey := range subKeys {subKeyPath := keyPath + `\` + subKeysubK, err := registry.OpenKey(registry.LOCAL_MACHINE, subKeyPath, registry.QUERY_VALUE)if err != nil {continue}name, _, _ := subK.GetStringValue("DisplayName")version, _, _ := subK.GetStringValue("DisplayVersion")if name != "" {fmt.Printf(" 软件名称: %s, 版本: %s\n", name, version)}subK.Close()}
}// 采集 USB 设备信息
func getUSBDevices() {keyPath := `SYSTEM\CurrentControlSet\Enum\USB`k, err := registry.OpenKey(registry.LOCAL_MACHINE, keyPath, registry.ENUMERATE_SUB_KEYS)if err != nil {log.Printf("无法打开 USB 设备注册表路径: %v", err)return}defer k.Close()subKeys, err := k.ReadSubKeyNames(-1)if err != nil {log.Printf("无法读取 USB 设备子键: %v", err)return}fmt.Println("USB 设备信息:")for _, subKey := range subKeys {subKeyPath := keyPath + `\` + subKeydeviceK, err := registry.OpenKey(registry.LOCAL_MACHINE, subKeyPath, registry.ENUMERATE_SUB_KEYS)if err != nil {continue}deviceSubKeys, _ := deviceK.ReadSubKeyNames(-1)for _, deviceSubKey := range deviceSubKeys {deviceInfoPath := subKeyPath + `\` + deviceSubKeyinfoK, err := registry.OpenKey(registry.LOCAL_MACHINE, deviceInfoPath, registry.QUERY_VALUE)if err != nil {continue}deviceDesc, _, _ := infoK.GetStringValue("DeviceDesc")friendlyName, _, _ := infoK.GetStringValue("FriendlyName")if friendlyName == "" {friendlyName = deviceDesc}if friendlyName != "" {fmt.Printf(" 设备名称: %s\n", friendlyName)}infoK.Close()}deviceK.Close()}
}// 采集网络信息
func getNetworkInfo() {keyPath := `SYSTEM\CurrentControlSet\Services\Tcpip\Parameters`k, err := registry.OpenKey(registry.LOCAL_MACHINE, keyPath, registry.QUERY_VALUE)if err != nil {log.Printf("无法获取网络信息: %v", err)return}defer k.Close()hostName, _, _ := k.GetStringValue("Hostname")domain, _, _ := k.GetStringValue("Domain")fmt.Printf("网络信息:\n 主机名: %s\n 域名: %s\n", hostName, domain)
}// 采集硬件信息
func getHardwareInfo() {keyPath := `HARDWARE\DESCRIPTION\System`k, err := registry.OpenKey(registry.LOCAL_MACHINE, keyPath, registry.QUERY_VALUE)if err != nil {log.Printf("无法获取硬件信息: %v", err)return}defer k.Close()systemBiosDate, _, _ := k.GetStringValue("SystemBiosDate")systemBiosVersion, _, _ := k.GetStringValue("SystemBiosVersion")fmt.Printf("硬件信息:\n BIOS 日期: %s\n BIOS 版本: %s\n", systemBiosDate, systemBiosVersion)
}// 主函数:逐一采集信息
func main() {fmt.Println("正在采集系统信息...\n")// 采集各类信息getComputerName()getInstalledSoftware()getUSBDevices()getNetworkInfo()getHardwareInfo()USBSTOR_Enum()fmt.Println("\n信息采集完成。")
}
Windows 注册表是一个分层的配置数据库,存储了系统配置、用户偏好、设备信息等数据。以下是一些常见的注册表路径和对应的信息类别,供你参考和扩展:
1. 系统信息
-
路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control- 描述: 包含系统配置相关的信息。
- 示例:
ComputerName\ActiveComputerName: 当前计算机名称。TimeZoneInformation: 系统时区信息。
-
路径:
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System- 描述: 存储硬件信息。
- 示例:
SystemBiosDate: BIOS 日期。SystemBiosVersion: BIOS 版本信息。
Windows 注册表是一个分层的配置数据库,存储了系统配置、用户偏好、设备信息等数据。以下是一些常见的注册表路径和对应的信息类别,供你参考和扩展:
1. 系统信息
-
路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control- 描述: 包含系统配置相关的信息。
- 示例:
ComputerName\ActiveComputerName: 当前计算机名称。TimeZoneInformation: 系统时区信息。
-
路径:
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System- 描述: 存储硬件信息。
- 示例:
SystemBiosDate: BIOS 日期。SystemBiosVersion: BIOS 版本信息。
2. 软件安装信息
- 路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall- 描述: 存储当前计算机安装的软件信息。
- 示例:
- 每个子键对应一个已安装的软件,其下包含:
DisplayName: 软件名称。DisplayVersion: 软件版本。InstallLocation: 软件安装路径。
- 每个子键对应一个已安装的软件,其下包含:
3. 开机自启动项
-
路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run- 描述: 开机启动的全局程序。
- 示例:
- 每个值表示一个自启动程序:
- 键名:程序名称。
- 键值:程序路径。
- 每个值表示一个自启动程序:
-
路径:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run- 描述: 当前用户的开机启动项。
4. USB 设备历史
- 路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB- 描述: 记录历史插入的 USB 设备信息。
- 示例:
- 子键名称包含设备 VID 和 PID。
FriendlyName: 设备友好名称。DeviceDesc: 设备描述。
5. 网络信息
-
路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters- 描述: 存储网络配置信息。
- 示例:
Hostname: 主机名。Domain: 域名。DhcpIPAddress: DHCP 分配的 IP 地址。
-
路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters- 描述: NetBIOS 网络信息。
6. 电源设置
- 路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power- 描述: 电源管理设置。
- 示例:
HibernateEnabled: 是否启用休眠。CsEnabled: 是否启用连接待机。
7. 用户登录信息
- 路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI- 描述: 存储用户登录界面相关设置。
- 示例:
LastLoggedOnUser: 最近登录的用户名。
8. 计划任务
- 路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree- 描述: 存储计划任务的基本信息。
- 示例:
- 子键名对应任务名称,包含任务的触发条件和配置。
9. 安全与防火墙
- 路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy- 描述: Windows 防火墙相关配置。
- 示例:
StandardProfile: 默认防火墙规则。DomainProfile: 域环境防火墙规则。
10. 硬件信息
- 路径:
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP- 描述: 映射设备与资源的信息。
- 示例:
Scsi: 存储设备的配置信息。VIDEO: 显卡设备信息。
11. 事件日志
- 路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog- 描述: 系统和应用程序事件日志的配置。
- 示例:
- 子键表示不同日志类型(如 Application、System 等)。
注意事项
-
权限问题:
- 某些注册表键需要管理员权限才能访问。如果权限不足,程序会报错。
-
兼容性问题:
- 不同版本的 Windows 系统中,注册表结构可能略有不同。
-
修改注册表的风险:
- 读取注册表通常是安全的,但写入操作可能会对系统稳定性产生影响,请小心使用。
相关文章:
go采集注册表
package mainimport ("fmt""golang.org/x/sys/windows/registry""log""os""strconv""strings" )func USBSTOR_Enum() {// 打开注册表键keyPath : SYSTEM\CurrentControlSet\Services\USBSTOR\Enumk, err : regist…...
软件工程师欧以宁:引领无人机导航与物联网安全的技术革新
在科技日新月异的今天,软件工程师欧以宁凭借卓越的技术能力和前瞻性的创新思维,成为了无人机自主导航和物联网安全领域的佼佼者。作为一名深耕技术前沿的专家,欧以宁不仅推动了无人机导航技术的突破性进展,还为智能家居和物联网的安全架构提供了全新的解决方案。她的研究成果,以…...
从零开始:Gitee 仓库创建与 Git 配置指南
引言 Git 是一款广泛使用的版本控制工具,它能够帮助开发者在开发过程中高效地管理代码的版本。而 Gitee(码云)是国内知名的 Git 托管平台,它提供了强大的代码托管、团队协作和项目管理功能。如果你是 Git 和 Gitee 的新手&#x…...
浅谈计算机网络02 | SDN控制平面
计算机网络控制平面 一、现代计算机网络控制平面概述1.1 与数据平面、管理平面的关系1.2 控制平面的发展历程 二、控制平面的关键技术剖析2.1 网络层协议2.1.1 OSPF协议2.1.2 BGP协议 2.2 SDN控制平面技术2.2.1 SDN架构与原理2.2.2 OpenFlow协议2.2.3 SDN控制器 一、现代计算机…...
在 QNAP NAS中使用 Container Station 运行 Docker 的完整指南
QNAP 为用户提供了一个名为 Container Station 的应用,它在 QNAP NAS 上将 Docker 和 LXC 结合在一起,通过图形化界面,让用户更轻松地在 NAS 上管理容器。本文将带你一步步了解如何在 QNAP NAS 上安装和使用 Container Station,以…...
XML在线格式化 - 加菲工具
XML在线格式化 打开网站 加菲工具 选择“XML 在线格式化” 输入XML,点击左上角的“格式化”按钮 得到格式化后的结果...
大数据学习(34)-mapreduce详解
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦ᾑ…...
代码合并冲突解决push不上去的问题
环境:【IntelliJ IDEA】 【Gerrit】 1、错误信息 代码合并,迭代1合并到迭代2,解决冲突后,依然push不上去,报错信息如下: remote: Processing changes: refs: 1 remote: Processing changes: refs…...
万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用
文章目录 一、引言二、ARINC 653背景三、整体系统架构四、应用/执行(APEX)接口五、ARINC 653 RTOS内部机制六、健康监测功能七、软件应用八、ARINC 653现状九、总结 一、引言 在现代航空领域,综合模块化航空电子设备(IMA…...
MySQL 与 Redis 数据一致性 2
1. 强一致还是最终一致?2. 先写 MySQL 还是先写Redis?case 1 3. 缓存(Redis)更新还是清除?更新策略更新策略会有数据不一致问题?数据不一致的概率与影响如果使用监听binlog更新数据还会出现数据不一致问题?binlog的消费问题 使用消息队列行不行?其他方案总结: 数据不一致…...
MySQL程序之:使用类似URI的字符串或键值对连接到服务器
本节介绍使用类似URI的连接字符串或键值对来指定如何为MySQLShell等客户端建立到MySQL服务器的连接。 以下MySQL客户端支持使用类似URI的连接字符串或键值对连接到MySQL服务器: MySQL Shell实现X DevAPI的MySQL连接器 本节记录了所有有效的类似URI的字符串和键值…...
Docker私有仓库管理工具Registry
Docker私有仓库管理工具Registry 1 介绍 Registry是私有Docker仓库管理工具,Registry没有可视化管理页面和完备的管理策略。可借助Harbor、docker-registry-browser完成可视化和管理。Harbor是由VMware开发的企业级Docker registry服务。docker-registry-browser是…...
若依前后端分离项目部署(使用docker)
文章目录 一、搭建后端1.1 搭建流程:1.2 后端零件:1.2.1 mysql容器创建:1.2.2 redis容器创建:1.2.3 Dockerfile内容:1.2.4 构建项目镜像:1.2.5 创建后端容器: 二、前端搭建:2.1 搭建流程&#x…...
Unity2021.3.13崩溃的一种情况
如果出现如下的报错,可能是软件冲突的原因。自己的原因是使用f.lux这款软件似乎和Unity相互冲突,出现下面报错。 错误信息如上图...
Temp123
MapDB:的持久化机制,以及源码分析和摘取 1、spark streaming--struct streaming 基于 时间间隔 攒批 2、kafka-connect-hdfs 控制 flush.size 和 interval.ms控制 攒批 - 完全自研 攒批机制 - 使用 embeded 版 https://lxblog.com/qianwen/share?shar…...
春秋杯-WEB
SSTI 可以看到主页那里有个登录测试之后为ssti {{4*4}} fenjing梭哈即可得到payload {{((g.pop.__globals__.__builtins__.__import__(os)).popen(cat flag)).read()}}file_copy 看到题目名字为file_copy, 当输入路径时会返回目标文件的大小, 通…...
JavaEE:多线程初阶
JavaEE:多线程初阶 一、线程的原理和进程与线程之间的关系1. 线程的原理线程的基本概念线程的生命周期线程的调度线程的并发与并行 2. 进程与线程的关系进程(Process)线程与进程的关系进程和线程的对比线程的优势线程的缺点 3. 总结 二、多线…...
Linux之文件系统前世今生(一)
Linux在线1 Linux在线2 一、 基本概念 1.1 块(Block) 在计算机存储之图解机械硬盘这篇文章中我们提到过,磁盘读写的最小单位是扇区,也就是 512 Byte;很明显,每次读写的效率非常低。 为了提高IO效率&…...
当设置dialog中有el-table时,并设置el-table区域的滚动,看到el-table中多了一条横线
问题:当设置dialog中有el-table时,并设置el-table区域的滚动,看到el-table中多了一条横线; 原因:el-table有一个before的伪元素作为表格的下边框下,初始的时候已设置,在滚动的时候并没有重新设置…...
Windows远程桌面网关出现重大漏洞
微软披露了其Windows远程桌面网关(RD Gateway)中的一个重大漏洞,该漏洞可能允许攻击者利用竞争条件,导致拒绝服务(DoS)攻击。该漏洞被标识为CVE-2025-21225,已在2025年1月的补丁星期二更新中得到…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
