golang获取windows版本和详细信息
场景:
将木马丢到感染机运行后回连时希望返回感染机的操作系统信息.golang 可以通过runtime.OS获取到操作系统类型,但是无法获取详细的版本信息,如win7 win10等,
解决方案;
下面是chatgpt的写法;
package main
import (
"fmt"
"os"
"syscall"
"unsafe"
)
func main() {
version, err := getWindowsVersion()
if err != nil {
fmt.Println("Failed to get Windows version:", err)
return
}
fmt.Println("Windows version:", version)
}
func getWindowsVersion() (string, error) {
kernel32, err := syscall.LoadDLL("kernel32.dll")
if err != nil {
return "", err
}
proc, err := kernel32.FindProc("GetVersion")
if err != nil {
return "", err
}
version, _, _ := proc.Call()
major := byte(version & 0xFF)
minor := byte((version >> 8) & 0xFF)
build := uint16((version >> 16) & 0xFFFF)
var info syscall.RtlOsVersionInfoEx
info.OSVersionInfoSize = uint32(unsafe.Sizeof(info))
err = syscall.RtlGetVersion(&info)
if err != nil {
return "", err
}
switch {
case major == 10 && build >= 22000:
return "Windows 11", nil
case major == 10 && build >= 19041:
return "Windows 10 Version 2004 or later", nil
case major == 10 && build >= 18362:
return "Windows 10 Version 1903 or later", nil
case major == 10 && build >= 17763:
return "Windows 10 Version 1809 or later", nil
case major == 10 && build >= 17134:
return "Windows 10 Version 1803 or later", nil
case major == 10 && build >= 16299:
return "Windows 10 Version 1709 or later", nil
case major == 10 && build >= 15063:
return "Windows 10 Version 1703 or later", nil
case major == 10 && build >= 14393:
return "Windows 10 Version 1607 or later", nil
case major == 10 && build >= 10586:
return "Windows 10 Version 1511 or later", nil
case major == 10:
return "Windows 10 or later", nil
case major == 6 && minor == 3:
return "Windows 8.1", nil
case major == 6 && minor == 2:
return "Windows 8", nil
case major == 6 && minor == 1:
return "Windows 7", nil
case major == 6 && minor == 0:
return "Windows Vista", nil
case major == 5 && minor == 2:
return "Windows Server 2003", nil
case major == 5 && minor == 1:
return "Windows XP", nil
default:
return fmt.Sprintf("Windows %d.%d (Build %d)", major, minor, build), nil
}
}
golang获取windows版本和详细信息的更多相关文章
- 获取windows版本信息的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 个人不建议用 GetVersion 或GetVersionEx 之类的 API 来获取系统版本号.注意微软也说过,这个 ...
- php反射机制获取未知类的详细信息
使用ReflectionClass就可以获取未知类的详细信息 demo: require("hello.php"); $class = new ReflectionClass(&q ...
- [C语言](二)01 获取Windows图形构件大小信息
SYSMETS.c #include <windows.h> #include "SYSMETS.H"//自定义的单元,所以用"",不是用<& ...
- android笔记---百度地图api应用 (二) 获取公交路线的详细信息
package com.example.bdtest; import com.baidu.mapapi.MKEvent; import com.baidu.mapapi.MKPlanNode; imp ...
- 使用GetLogicalProcessorInformation获取逻辑处理器的详细信息(NUMA节点数、物理CPU数、CPU核心数、逻辑CPU数、各级Cache)
不过必须XP SP3以上才行.所有API大全: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363804(v=vs.85).a ...
- PHP怎么获取系统信息和服务器详细信息
https://zhidao.baidu.com/question/1435990326608475859.html 获取系统类型及版本号: php_uname() (例:Windows NT COM ...
- Python使用WMI模块获取Windows系统的硬件信息,并使用pyinstaller库编译打包成exe的可执行文件
由于公司现阶段大多数应用软件都是基于Windows系统开发和部署,很多软件安装部署都是在windows server 2012.windows server 2008之类的服务器上,部门同事每次测试一 ...
- 怎样快速免费获取Windows版本的ZBrush
ZBrush是一款专业的3D绘制软件及数字雕刻软件,随着3D技术的不断进步,ZBrush也是越来越受到业内欢迎,在世界拥有了众多的粉丝和爱好者.相信很多用户对软件的体验就是从使用的版本开始的,本文就教 ...
- 获取windows版本信息
procedure TForm1.Button1Click(Sender: TObject); Var OSVI:OSVERSIONINFO; begin OSVI.dwOSversi ...
- sigar获取Windows系统的硬件信息进行JAVA后台系统资源监控
windows下,将sigar-amd64-winnt.dll复制到jdk的bin目录下或者拷贝到WEB-INF/lib下 linux下,将libsigar-amd64-linux.so拷贝到jdk的 ...
随机推荐
- [转帖]How fast are Unix domain sockets?
https://blog.myhro.info/2017/01/how-fast-are-unix-domain-sockets Jan 3, 2017 • Tiago Ilieve Warning: ...
- [转帖]TiDB系统调参实战经验
https://tidb.net/blog/c9466c40#TiDB%E7%B3%BB%E7%BB%9F%E8%B0%83%E5%8F%82%E5%AE%9E%E6%88%98%E7%BB%8F%E ...
- [转帖]使用 sed 处理文本文件
https://www.cnblogs.com/wx2020/p/16269905.html 前言 sed 是一款 GNU 流编辑器,可以按照指定的规则去处理文本文件或流,其强大的功能使用户在命令中快 ...
- [转帖]BIS出口管制新规说明会,进一步明确十大问题
https://zhuanlan.zhihu.com/p/573765504 10月13日晚9点,BIS就出口管制新规举行电话会议简报,出口执法助理副部长Thea Kendler主持会议.小白总结要点 ...
- [转帖]oom-killer错误排查过程
https://www.cnblogs.com/hphua/p/16395893.html 1.遇到的问题:应用在hi3536上跑一段不固定的时间,随之就会出现重启的现象:打印如下: app-run ...
- Linux下面rsync 实现 完全一致的同步方法
1. 在某些特殊的linux机器上面, 比如龙芯后者是飞腾服务器,部分工具不太好用, 需要使用x86弄好之后进行同步过去, 这个时候scp 最简单但是网络流量非常大, 不如使用rsync, rsync ...
- Linux查看登录用户记录信息
Linux查看登录用户记录信息 登录成功的信息 last 可以简单统计一下: last |awk '{print $3}' |sort |uniq -c |sort -k1nr 登录失败的 就是 la ...
- 机器学习从入门到放弃:卷积神经网络CNN(一)
一.前言 在上一篇中我们使用全连接网络,来构建我们的手写数字图片识别应用,取得了很好的效果.但是值得注意的是,在实验的最后,最后我们无论把 LOSS 优化到如何低,似乎都无法在测试数据集 test d ...
- 【K哥爬虫普法】不要沾边!涉案 7k 合判 6 年!
我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...
- 使用telnet来调试游戏
telnet是什么 Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户提供了在本地计算机上完成远程主机工作的能力 但是,telnet因为采用明文 ...