吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3812|回复: 18
收起左侧

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

[复制链接]
糊涂虫晓晓 发表于 2022-5-19 09:47
本帖最后由 糊涂虫晓晓 于 2022-5-30 23:10 编辑

利用wmi获取本机的配置信息
主要是硬件配置信息和网络配置信息
这也是新手作品,大家可以即拿即用,懒人必备
解说
1、两个配置信息分别放在两个字典中了,方便后期使用,包括存数据库等
2、当然,不喜欢的可以把字典改为列表,用列表的append()直接把获取到的放进列表中,汉字一块存进列表也行但不建议
3、硬盘和显卡加了判断是因为我本意是要存入数据库里的,字段都是设置好的,所以有了else:后面的东西
废话不多说,直接上代码,自行修改使用吧
[Python] 纯文本查看 复制代码
#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[0]}'
			dict01["子网掩码"]=f'{interface.IPSubnet[0]}'
			dict01["网关"]=f'{interface.DefaultIPGateway[0]}'
			dict01["首选DNS服务器"]=f'{interface.DNSServerSearchOrder[0]}'
			try:
				dict01["备选DNS服务器"]=f'{interface.DNSServerSearchOrder[1]}'
			except:
				dict01["备选DNS服务器"]='没有备选DNS服务器'
			dict01["MAC地址"]=f'{interface.MACAddress}'

	return dict01
def System_spec():
	os_info=pc.Win32_OperatingSystem()[0]
	processor=pc.Win32_Processor()[0]
	#Gpu=pc.Win32_VideoController()[0]
	dict02={}
	os_name=os_info.Name.encode('utf-8').split(b'|')[0].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()[0].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[i].Caption.split()) + "容量:" + str(round(int(disk[i].Size) / 1000 / 1000 / 1000)) + "GB"
	else:
		dict02["硬盘" + str(i)] = ' '.join(disk[0].Caption.split()) + "容量:" + str(round(int(disk[0].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)


免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
xie8xie + 1 + 1 谢谢@Thanks!
人二 + 1 用心讨论,共获提升!

查看全部评分

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

 楼主| 糊涂虫晓晓 发表于 2022-5-30 22:33
mygaryge 发表于 2022-5-25 08:26
48行逻辑有点问题吧?j的循环在if中,else没有j啊

[Python] 纯文本查看 复制代码
dict02["硬盘" + str(i)] = ' '.join(pc.Win32_DiskDrive()[0].Caption.split()) + "容量:" + str(round(int(pc.Win32_DiskDrive()[0].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啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 22:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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