Python 电脑主机硬件信息推送邮箱以及微信

[复制链接]
98 |11
发表于 昨天 17:55 | 显示全部楼层 |阅读模式

Python 实现邮箱以及微信WxPusher消息平台推送电脑主机硬件信息
1.项目简介:

获取个人电脑主机相关CPU、GPU、内存、硬盘以及公私网IP地址等相关信息。getInfo1.0版本为邮件推送主机硬件信息,2.0版本由邮件通知升级为微信WxPusher消息推送,可通过更改config.ini配置文件中Token以及Uid等相关参数来更改推送人,可以同时设置程序自启动来知晓电脑开机时间及其他信息,具体文件资源中有相关说明文档。
2.运行效果:


2.1 邮箱信息推送:


2.2 微信信息推送:






程序下载资源网盘链接:https://pan.baidu.com/s/1cg8go4DrddVphZLqoANjng?pwd=52pj
源码放附件了,大家需要的话可以自取{:301_998:}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

发表于 昨天 17:56 | 显示全部楼层
用gpt整了个go版本方便跨平台,大家可以互相学习下,本人从事运维工作,楼主的工具太实用了

[Golang]  
  1. package main
  2. import (
  3.         "bytes"
  4.         "encoding/json"
  5.         "fmt"
  6.         "net/http"
  7.         "log"
  8.         "os"
  9.         "os/exec"
  10.         "strings"
  11.         "net"
  12.         "github.com/shirou/gopsutil/v3/cpu"
  13.         "github.com/shirou/gopsutil/v3/disk"
  14.         "github.com/shirou/gopsutil/v3/mem"
  15. )
  16. const (
  17.         appToken = ""
  18.         uid      = ""
  19.         wxURL    = "https://wxpusher.zjiecode.com/api/send/message"
  20. )
  21. func wxPusherSend(msg string) error {
  22.         payload := map[string]interface{}{
  23.                 "appToken": appToken,
  24.                 "content":  msg,
  25.                 "summary":  msg[:min(len(msg), 99)],
  26.                 "uids":     []string{uid},
  27.         }
  28.         jsonData, err := json.Marshal(payload)
  29.         if err != nil {
  30.                 return fmt.Errorf("json marshal failed: %v", err)
  31.         }
  32.         resp, err := http.Post(wxURL, "application/json", bytes.NewBuffer(jsonData))
  33.         if err != nil {
  34.                 return fmt.Errorf("http post failed: %v", err)
  35.         }
  36.         defer resp.Body.Close()
  37.         if resp.StatusCode != http.StatusOK {
  38.                 return fmt.Errorf("bad response status: %s", resp.Status)
  39.         }
  40.         return nil
  41. }
  42. func min(a, b int) int {
  43.         if a < b {
  44.                 return a
  45.         }
  46.         return b
  47. }
  48. // getCpuInfo 使用 wmic 命令获取详细的 CPU 信息。
  49. func getCpuInfo() (string, error) {
  50.         cmd := exec.Command("wmic", "cpu", "get", "Name,NumberOfCores,NumberOfLogicalProcessors")
  51.         var out bytes.Buffer
  52.         var stderr bytes.Buffer
  53.         cmd.Stdout = &out
  54.         cmd.Stderr = &stderr
  55.         err := cmd.Run()
  56.         if err != nil {
  57.                 return "", fmt.Errorf("命令执行失败: %v, 错误信息: %s", err, stderr.String())
  58.         }
  59.         lines := strings.Split(out.String(), "\r\n")
  60.         var cpuInfoBuilder strings.Builder
  61.         for _, line := range lines {
  62.                 trimmedLine := strings.TrimSpace(line)
  63.                 if trimmedLine != "" {
  64.                         cpuInfoBuilder.WriteString(trimmedLine + "\n")
  65.                 }
  66.         }
  67.         return strings.TrimSpace(cpuInfoBuilder.String()), nil
  68. }
  69. // getLocalIP 通过连接到外部地址来获取局域网 IP 地址。
  70. func getLocalIP() (string, error) {
  71.         conn, err := net.Dial("udp", "223.5.5.5:53") // 使用 DNS 服务器端口 53
  72.         if err != nil {
  73.                 return "", err
  74.         }
  75.         defer conn.Close()
  76.         localAddr := conn.LocalAddr().(*net.UDPAddr)
  77.         ip := localAddr.IP.To4()
  78.         if ip == nil {
  79.                 return "", fmt.Errorf("无法获取IPv4地址")
  80.         }
  81.         return ip.String(), nil
  82. }
  83. func main() {
  84.         var msgBuilder strings.Builder
  85.         // 获取主机名
  86.         hostName, _ := os.Hostname()
  87.         msgBuilder.WriteString(fmt.Sprintf("主机名:%s\n", hostName))
  88.         // 获取当前用户名
  89.         userName := os.Getenv("USERNAME")
  90.         msgBuilder.WriteString(fmt.Sprintf("用户名:%s\n", userName))
  91.         
  92.         // 获取局域网IP
  93.         ip, err := getLocalIP()
  94.         if err != nil {
  95.                 log.Printf("无法获取局域网IP: %v\n", err)
  96.         } else {
  97.                 msgBuilder.WriteString(fmt.Sprintf("局域网IP:%s\n", ip))
  98.         }
  99.         
  100.         // 获取公网IP
  101.         publicIPResp, err := http.Get("http://ip-api.com/json")
  102.         if err != nil {
  103.                 msgBuilder.WriteString(fmt.Sprintf("无法获取公网IP地址: %v\n", err))
  104.         } else {
  105.                 defer publicIPResp.Body.Close()
  106.                 var publicIPResult map[string]interface{}
  107.                 if err := json.NewDecoder(publicIPResp.Body).Decode(&publicIPResult); err == nil {
  108.                         if query, ok := publicIPResult["query"].(string); ok {
  109.                                 msgBuilder.WriteString(fmt.Sprintf("公网IP地址:%s\n", query))
  110.                         } else {
  111.                                 msgBuilder.WriteString("无法解析公网IP地址。\n")
  112.                         }
  113.                 } else {
  114.                         msgBuilder.WriteString(fmt.Sprintf("解析公网IP地址失败: %v\n", err))
  115.                 }
  116.         }
  117.         // 获取CPU信息
  118.         //cpuInfo, err := cpu.Info()
  119.         //if err != nil {
  120.         //        msgBuilder.WriteString(fmt.Sprintf("无法获取CPU信息: %v\n", err))
  121.         //        fmt.Printf("无法获取CPU信息: %v\n", err)
  122.         //} else if len(cpuInfo) > 0 {
  123.         //        msgBuilder.WriteString(fmt.Sprintf("CPU名称:%s\n", cpuInfo[0].ModelName))
  124.         //} else {
  125.         //        msgBuilder.WriteString("未找到CPU信息。\n")
  126.         //}
  127.         // 获取CPU信息(使用 wmic)
  128.         cpuInfo, err := getCpuInfo()
  129.         if err != nil {
  130.                 log.Printf("无法获取CPU信息: %v\n", err)
  131.         } else {
  132.                 msgBuilder.WriteString(fmt.Sprintf("CPU信息:\n%s\n", cpuInfo))
  133.         }
  134.         cpuCount, err := cpu.Counts(true)
  135.         if err != nil {
  136.                 msgBuilder.WriteString(fmt.Sprintf("无法获取CPU个数: %v\n", err))
  137.         } else {
  138.                 msgBuilder.WriteString(fmt.Sprintf("物理CPU个数:%d\n", cpuCount))
  139.         }
  140.         // 获取内存信息
  141.     memInfo, err := mem.VirtualMemory()
  142.     if err != nil {
  143.             log.Printf("无法获取内存信息: %v\n", err)
  144.     } else {
  145.             // 手动计算并格式化内存总量和可用内存
  146.             totalMemGB := float64(memInfo.Total) / (1024 * 1024 * 1024)
  147.             availableMemGB := float64(memInfo.Available) / (1024 * 1024 * 1024)
  148.    
  149.             msgBuilder.WriteString(fmt.Sprintf("内存总量:%.2f GB\n", totalMemGB))
  150.             msgBuilder.WriteString(fmt.Sprintf("可用内存:%.2f GB\n", availableMemGB))
  151.     }
  152.     // 获取硬盘信息
  153.     diskPartitions, err := disk.Partitions(true)
  154.     if err != nil {
  155.             log.Printf("无法获取硬盘分区信息: %v\n", err)
  156.     } else {
  157.             for _, dp := range diskPartitions {
  158.                     diskUsage, err := disk.Usage(dp.Mountpoint)
  159.                     if err != nil {
  160.                             log.Printf("无法获取磁盘使用情况(%s): %v\n", dp.Device, err)
  161.                             continue
  162.                     }
  163.                     // 手动计算并格式化磁盘大小、已用空间和剩余空间
  164.                     totalDiskGB := float64(diskUsage.Total) / (1024 * 1024 * 1024)
  165.                     usedDiskGB := float64(diskUsage.Used) / (1024 * 1024 * 1024)
  166.                     freeDiskGB := float64(diskUsage.Free) / (1024 * 1024 * 1024)
  167.    
  168.                     msgBuilder.WriteString(fmt.Sprintf("盘符:%s\n磁盘大小:%.2f GB\n已用空间:%.2f GB\n剩余空间:%.2f GB\n磁盘使用百分比:%.2f%%\n\n",
  169.                             dp.Device,
  170.                             totalDiskGB,
  171.                             usedDiskGB,
  172.                             freeDiskGB,
  173.                             diskUsage.UsedPercent))
  174.             }
  175.     }
  176.         
  177.         // 发送消息
  178.         err = wxPusherSend(msgBuilder.String())
  179.         if err != nil {
  180.                 fmt.Printf("Failed to send message: %v\n", err)
  181.         } else {
  182.                 fmt.Println("Message sent successfully.")
  183.         }
  184. }
复制代码
回复

使用道具 举报

发表于 昨天 17:56 | 显示全部楼层
不会用
Error
Failed to load Python DLL
'C:Users\ADMINI~ 1\AppData\L ocalTempL MEI71562\python312.dll
LoadLibrary: < FormatMessageW failed.>

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

发表于 昨天 17:57 | 显示全部楼层
赶紧不错,多谢分享
回复

使用道具 举报

发表于 昨天 17:57 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

发表于 昨天 17:58 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 昨天 17:59 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 昨天 17:59 | 显示全部楼层
谢谢分享.........
回复

使用道具 举报

发表于 昨天 18:00 | 显示全部楼层
这个东东不错啊!感谢分享。
回复

使用道具 举报

发表于 昨天 18:00 | 显示全部楼层
感谢分享,支持有源码的原创。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表