吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1876|回复: 41
收起左侧

[原创工具] Python 电脑主机硬件信息推送邮箱以及微信

[复制链接]
vinsion 发表于 2024-11-29 11:32



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:}

Code.zip

4.87 KB, 下载次数: 71, 下载积分: 吾爱币 -2 CB

python源码资源包

免费评分

参与人数 3吾爱币 +9 热心值 +2 收起 理由
qq312155 + 1 我很赞同!
艾爱姆Joker + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

paikia 发表于 2024-12-18 10:16
本帖最后由 paikia 于 2024-12-18 10:49 编辑

用gpt整了个go版本方便跨平台,大家可以互相学习下,本人从事运维工作,楼主的工具太实用了

[Golang] 纯文本查看 复制代码
package main

import (
        "bytes"
        "encoding/json"
        "fmt"
        "net/http"
        "log"
        "os"
        "os/exec"
        "strings"
        "net"
        "github.com/shirou/gopsutil/v3/cpu"
        "github.com/shirou/gopsutil/v3/disk"
        "github.com/shirou/gopsutil/v3/mem"

)

const (
        appToken = ""
        uid      = ""
        wxURL    = "https://wxpusher.zjiecode.com/api/send/message"
)

func wxPusherSend(msg string) error {
        payload := map[string]interface{}{
                "appToken": appToken,
                "content":  msg,
                "summary":  msg[:min(len(msg), 99)],
                "uids":     []string{uid},
        }
        jsonData, err := json.Marshal(payload)
        if err != nil {
                return fmt.Errorf("json marshal failed: %v", err)
        }

        resp, err := http.Post(wxURL, "application/json", bytes.NewBuffer(jsonData))
        if err != nil {
                return fmt.Errorf("http post failed: %v", err)
        }
        defer resp.Body.Close()

        if resp.StatusCode != http.StatusOK {
                return fmt.Errorf("bad response status: %s", resp.Status)
        }
        return nil
}

func min(a, b int) int {
        if a < b {
                return a
        }
        return b
}

// getCpuInfo 使用 wmic 命令获取详细的 CPU 信息。
func getCpuInfo() (string, error) {
        cmd := exec.Command("wmic", "cpu", "get", "Name,NumberOfCores,NumberOfLogicalProcessors")
        var out bytes.Buffer
        var stderr bytes.Buffer
        cmd.Stdout = &out
        cmd.Stderr = &stderr

        err := cmd.Run()
        if err != nil {
                return "", fmt.Errorf("命令执行失败: %v, 错误信息: %s", err, stderr.String())
        }

        lines := strings.Split(out.String(), "\r\n")
        var cpuInfoBuilder strings.Builder

        for _, line := range lines {
                trimmedLine := strings.TrimSpace(line)
                if trimmedLine != "" {
                        cpuInfoBuilder.WriteString(trimmedLine + "\n")
                }
        }

        return strings.TrimSpace(cpuInfoBuilder.String()), nil
}

// getLocalIP 通过连接到外部地址来获取局域网 IP 地址。
func getLocalIP() (string, error) {
        conn, err := net.Dial("udp", "223.5.5.5:53") // 使用 DNS 服务器端口 53
        if err != nil {
                return "", err
        }
        defer conn.Close()

        localAddr := conn.LocalAddr().(*net.UDPAddr)
        ip := localAddr.IP.To4()
        if ip == nil {
                return "", fmt.Errorf("无法获取IPv4地址")
        }
        return ip.String(), nil
}

func main() {
        var msgBuilder strings.Builder

        // 获取主机名
        hostName, _ := os.Hostname()
        msgBuilder.WriteString(fmt.Sprintf("主机名:%s\n", hostName))

        // 获取当前用户名
        userName := os.Getenv("USERNAME")
        msgBuilder.WriteString(fmt.Sprintf("用户名:%s\n", userName))

        
        // 获取局域网IP
        ip, err := getLocalIP()
        if err != nil {
                log.Printf("无法获取局域网IP: %v\n", err)
        } else {
                msgBuilder.WriteString(fmt.Sprintf("局域网IP:%s\n", ip))
        }
        
        // 获取公网IP
        publicIPResp, err := http.Get("http://ip-api.com/json")
        if err != nil {
                msgBuilder.WriteString(fmt.Sprintf("无法获取公网IP地址: %v\n", err))
        } else {
                defer publicIPResp.Body.Close()
                var publicIPResult map[string]interface{}
                if err := json.NewDecoder(publicIPResp.Body).Decode(&publicIPResult); err == nil {
                        if query, ok := publicIPResult["query"].(string); ok {
                                msgBuilder.WriteString(fmt.Sprintf("公网IP地址:%s\n", query))
                        } else {
                                msgBuilder.WriteString("无法解析公网IP地址。\n")
                        }
                } else {
                        msgBuilder.WriteString(fmt.Sprintf("解析公网IP地址失败: %v\n", err))
                }
        }

        // 获取CPU信息
        //cpuInfo, err := cpu.Info()
        //if err != nil {
        //        msgBuilder.WriteString(fmt.Sprintf("无法获取CPU信息: %v\n", err))
        //        fmt.Printf("无法获取CPU信息: %v\n", err)
        //} else if len(cpuInfo) > 0 {
        //        msgBuilder.WriteString(fmt.Sprintf("CPU名称:%s\n", cpuInfo[0].ModelName))
        //} else {
        //        msgBuilder.WriteString("未找到CPU信息。\n")
        //}

        // 获取CPU信息(使用 wmic)
        cpuInfo, err := getCpuInfo()
        if err != nil {
                log.Printf("无法获取CPU信息: %v\n", err)
        } else {
                msgBuilder.WriteString(fmt.Sprintf("CPU信息:\n%s\n", cpuInfo))
        }

        cpuCount, err := cpu.Counts(true)
        if err != nil {
                msgBuilder.WriteString(fmt.Sprintf("无法获取CPU个数: %v\n", err))
        } else {
                msgBuilder.WriteString(fmt.Sprintf("物理CPU个数:%d\n", cpuCount))
        }

        // 获取内存信息
    memInfo, err := mem.VirtualMemory()
    if err != nil {
            log.Printf("无法获取内存信息: %v\n", err)
    } else {
            // 手动计算并格式化内存总量和可用内存
            totalMemGB := float64(memInfo.Total) / (1024 * 1024 * 1024)
            availableMemGB := float64(memInfo.Available) / (1024 * 1024 * 1024)
    
            msgBuilder.WriteString(fmt.Sprintf("内存总量:%.2f GB\n", totalMemGB))
            msgBuilder.WriteString(fmt.Sprintf("可用内存:%.2f GB\n", availableMemGB))
    }

    // 获取硬盘信息
    diskPartitions, err := disk.Partitions(true)
    if err != nil {
            log.Printf("无法获取硬盘分区信息: %v\n", err)
    } else {
            for _, dp := range diskPartitions {
                    diskUsage, err := disk.Usage(dp.Mountpoint)
                    if err != nil {
                            log.Printf("无法获取磁盘使用情况(%s): %v\n", dp.Device, err)
                            continue
                    }
                    // 手动计算并格式化磁盘大小、已用空间和剩余空间
                    totalDiskGB := float64(diskUsage.Total) / (1024 * 1024 * 1024)
                    usedDiskGB := float64(diskUsage.Used) / (1024 * 1024 * 1024)
                    freeDiskGB := float64(diskUsage.Free) / (1024 * 1024 * 1024)
    
                    msgBuilder.WriteString(fmt.Sprintf("盘符:%s\n磁盘大小:%.2f GB\n已用空间:%.2f GB\n剩余空间:%.2f GB\n磁盘使用百分比:%.2f%%\n\n",
                            dp.Device,
                            totalDiskGB,
                            usedDiskGB,
                            freeDiskGB,
                            diskUsage.UsedPercent))
            }
    }
        
        // 发送消息
        err = wxPusherSend(msgBuilder.String())
        if err != nil {
                fmt.Printf("Failed to send message: %v\n", err)
        } else {
                fmt.Println("Message sent successfully.")
        }
}

cqlong2020 发表于 2024-12-2 17:17
不会用
Error
Failed to load Python DLL
'C:Users\ADMINI~ 1\AppData\L ocalTempL MEI71562\python312.dll
LoadLibrary: < FormatMessageW failed.>
nice911 发表于 2024-11-30 21:13
AG9000 发表于 2024-11-30 21:24
很实用感谢分享
waishr 发表于 2024-11-30 21:59
感谢分享
xinyang110 发表于 2024-11-30 22:27
谢谢分享!
havealook 发表于 2024-11-30 22:41

感谢分享
WWBoy 发表于 2024-11-30 23:50
感谢分享
kashliu 发表于 2024-12-1 08:04
谢谢分享.........

echoofw 发表于 2024-12-1 09:03
很好的软件
goldharp 发表于 2024-12-1 09:13

谢谢分享.........
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 02:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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