糊涂虫晓晓 发表于 2022-5-19 09:47

Python获取本机硬件信息及网络信息(IP地址、网关等)

本帖最后由 糊涂虫晓晓 于 2022-5-30 23:10 编辑

利用wmi获取本机的配置信息
主要是硬件配置信息和网络配置信息
这也是新手作品,大家可以即拿即用,懒人必备
解说
1、两个配置信息分别放在两个字典中了,方便后期使用,包括存数据库等
2、当然,不喜欢的可以把字典改为列表,用列表的append()直接把获取到的放进列表中,汉字一块存进列表也行但不建议
3、硬盘和显卡加了判断是因为我本意是要存入数据库里的,字段都是设置好的,所以有了else:后面的东西
废话不多说,直接上代码,自行修改使用吧
#code:UTF-8
import wmi
import os
import pyodbc

pc = wmi.WMI()
def get_network():
        dict01={}
        for interface in pc.Win32_NetworkAdapterConfiguration(IPEnabled=1):
                if not "Virtual" in interface.Caption:
                        dict01["IP地址"]=f'{interface.IPAddress}'
                        dict01["子网掩码"]=f'{interface.IPSubnet}'
                        dict01["网关"]=f'{interface.DefaultIPGateway}'
                        dict01["首选DNS服务器"]=f'{interface.DNSServerSearchOrder}'
                        try:
                                dict01["备选DNS服务器"]=f'{interface.DNSServerSearchOrder}'
                        except:
                                dict01["备选DNS服务器"]='没有备选DNS服务器'
                        dict01["MAC地址"]=f'{interface.MACAddress}'

        return dict01
def System_spec():
        os_info=pc.Win32_OperatingSystem()
        processor=pc.Win32_Processor()
        #Gpu=pc.Win32_VideoController()
        dict02={}
        os_name=os_info.Name.encode('utf-8').split(b'|').decode('utf-8')#操作系统
        ram=float(os_info.TotalVisibleMemorySize)/1048576#内存
        #print(f'操作系统:{os_name}')
        #print(f'CPU:{processor.Name}')
        dict02["操作系统"]=f'{os_name}'
        dict02["CPU"]=f'{processor.Name}'
        if len(pc.Win32_VideoController())>1:
                for i in range(0, len(pc.Win32_VideoController())):
                        for j in pc.Win32_VideoController():#显卡
                                dict02["显卡"+str(i)]=' '.join(j.Caption.split())
        else:
                dict02["显卡0"] = ' '.join(pc.Win32_VideoController().Caption.split())
                dict02["显卡1"]="没有其他显卡"
        #print(f'内存:{round(ram)}GB')
        dict02["内存"]=f'{round(ram)}GB'
        #print(f'显卡{Gpu.Name}')
        disk=pc.Win32_DiskDrive()
        disk_len=len(disk)
        if disk_len>1:
                for i in range(0, disk_len):# 硬盘
                        dict02["硬盘" + str(i) ]=' '.join(disk.Caption.split()) + "容量:" + str(round(int(disk.Size) / 1000 / 1000 / 1000)) + "GB"
        else:
                dict02["硬盘" + str(i)] = ' '.join(disk.Caption.split()) + "容量:" + str(round(int(disk.Size) / 1000 / 1000 / 1000)) + "GB"
                dict02["硬盘1"]="没有第二块硬盘"
        dict02["计算机名"] = f'{os.environ.get("COMPUTERNAME")}'
        dict02["用户名"] = f'{os.getlogin()}'
        return dict02
def sqlconn(text):
        conn = pyodbc.connect('driver={sql server};server=192.168.1.180,1433;database=driveinfo;uid=sa;pwd=123456')
        #conn = pyodbc.connect('driver={sql server};server=192.168.6.4,1433;database=driveinfo;uid=sa;pwd=123456')
        cursor = conn.cursor()# 获取游标
        dict01=get_network()
        dict02=System_spec()
        network_sql = "insert into networkinfo(MACID,IP,MASK,GATEWAY,FRIST_DNS,SECOND_DNS,MAC) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}')".format(dict01["MAC地址"].replace(":",""),dict01["IP地址"], dict01["子网掩码"], dict01["网关"], dict01["首选DNS服务器"], dict01["备选DNS服务器"],dict01["MAC地址"])
        System_sql = "insert into configinfo(MACID,name,username,computername,systemname,CPU,RAM,Graphics0,Graphics1,Harddisk0,Harddisk1) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}')".format(dict01["MAC地址"].replace(":",""),text, dict02["用户名"], dict02["计算机名"],dict02["操作系统"],dict02["CPU"], dict02["内存"],dict02["显卡0"],dict02["显卡1"],dict02["硬盘0"],dict02["硬盘1"])
        #sql = "insert into networkinfo(MACID,IP,MASK,GATEWAY,FRIST_DNS,SECOND_DNS,MAC) values('8C164591B40A','192.168.6.2','255.255.254.0','192.168.6.1','192.168.6.213','114.114.114.114','8C:16:45:91:B4:0A')"
        cursor.execute(network_sql)
        conn.commit()
        select_sql = "Select * from networkinfo"
        cursor.execute(select_sql)
        result = cursor.fetchall()# fetchall()返回多行记录
        cursor.execute(System_sql)
        conn.commit()
        conn.close()



if __name__ == "__main__":
        dict001=System_spec()
        dict002=get_network()
        print(dict001)
        print(dict002)

糊涂虫晓晓 发表于 2022-5-30 22:33

mygaryge 发表于 2022-5-25 08:26
48行逻辑有点问题吧?j的循环在if中,else没有j啊

dict02["硬盘" + str(i)] = ' '.join(pc.Win32_DiskDrive().Caption.split()) + "容量:" + str(round(int(pc.Win32_DiskDrive().Size) / 1000 / 1000 / 1000)) + "GB"
确实是,我只把前面改了,后面的J忘记改了,嘿嘿

糊涂虫晓晓 发表于 2022-5-22 22:03

jshon 发表于 2022-5-19 13:25
用这个获取网络信息的目的是什么?用来备份的吗?

再做个py写数据库录入,录入的信息就是上面这些东西,整成exe分发下去,让他们运行一下,运维的时候,我能用的上。(换言之,我们单位现在IP地址管理比较差,我也才刚去没半年,之前搞了别的东西,下一步该搞IP地址了)

jshon 发表于 2022-5-19 13:25

用这个获取网络信息的目的是什么?用来备份的吗?

g5cc 发表于 2022-5-19 14:23

硬盘应该除以1024,这才是正确的容量。除以1000是硬盘的计算方法,不是系统的计算方法,所以应该以1024为准。

alongzhenggang 发表于 2022-5-19 15:36

小小学习下

糊涂虫晓晓 发表于 2022-5-22 22:05

g5cc 发表于 2022-5-19 14:23
硬盘应该除以1024,这才是正确的容量。除以1000是硬盘的计算方法,不是系统的计算方法,所以应该以1024为准 ...

硬盘容量也就是个大体数,你一看到round( )就知道我遇到了小数点的问题

adm471808 发表于 2022-5-23 23:21

谢谢分享。

fengqihua2022 发表于 2022-5-24 08:45

学习了,谢谢分享

lt-219 发表于 2022-5-24 16:53

谢谢分享。。

mygaryge 发表于 2022-5-25 08:26

48行逻辑有点问题吧?j的循环在if中,else没有j啊
页: [1] 2
查看完整版本: Python获取本机硬件信息及网络信息(IP地址、网关等)