python设置本机(windows系统)IP地址、子网掩码、DNS,获取本机IP地址、子网掩码、DNS、MAC

权限

  • 一定要以管理员权限运行
  • 本案例修改的是首选以太网、次选无线网的修改
# -*- coding: utf-8 -*-
import uuid

import wmi

# IP地址
arrIPAddresses = ['172.16.102.33']
# 子网掩码
arrSubnetMasks = ['255.255.255.0']

# 默认网关
arrDefaultGateways = ['172.16.102.1']
arrGatewayCostMetrics = [1]

# DNS列表
arrDNS = ['114.114.114.114', '114.114.115.115']


class InternetDef(object):
    """python设置本机IP地址、子网掩码、DNS,获取本机IP地址、子网掩码、DNS、MAC"""
    intReboot = 0

    def __init__(self, arrIPAddressesServer, arrSubnetMasksServer,
                 arrDefaultGatewaysServer, arrGatewayCostMetricsServer, arrDNSServers,
                 wmiService, colNicConfigs, objNicConfig):
        """初始化"""
        self.arrIPAddressesServer = arrIPAddressesServer  # 本机IP地址
        self.arrSubnetMasksServer = arrSubnetMasksServer  # 子网掩码
        self.arrDefaultGatewaysServer = arrDefaultGatewaysServer  # 默认网关
        self.arrGatewayCostMetricsServer = arrGatewayCostMetricsServer
        self.arrDNSServers = arrDNSServers
        self.wmiService = wmiService
        self.colNicConfigs = colNicConfigs
        self.objNicConfig = objNicConfig
        self.strMACAddress = "00-00-00-00-00-00"  # 本机MAC地址

    def start_wmi_service(self):
        """启动WMI服务"""
        # 创建WMI服务对象
        self.wmiService = wmi.WMI()
        # 调用网络适配器配置
        self.colNicConfigs = self.wmiService.Win32_NetworkAdapterConfiguration(IPEnabled=True)
        print(self.colNicConfigs)
        if len(self.colNicConfigs) < 1:
            print("没有找到可用的网络适配器!")
            return False
        else:
            # self.objNicConfig = self.colNicConfigs[0]
            # return True
            nic_config_list = [v for v in self.colNicConfigs if 'Family' in v.Caption]
            if not nic_config_list:
                nic_config_list = [v for v in self.colNicConfigs if 'Wi-Fi' in v.Caption]
            self.objNicConfig = nic_config_list[0] if nic_config_list else None
            if not self.objNicConfig:
                print('没有需要的网络')
                return False
            return True

    def set_ip_servers(self):
        """设置IP服务"""
        return_value = self.objNicConfig.EnableStatic(IPAddress=self.arrIPAddressesServer,
                                                      SubnetMask=self.arrSubnetMasksServer)
        if return_value[0] == 0:
            print("修改IP成功")
        elif return_value[0] == 1:
            print("修改IP成功")
            InternetDef.intReboot += 1
        else:
            print("修改IP失败")
            exit()

    def set_gateways_server(self):
        """设置默认网关服务"""
        return_value = self.objNicConfig.SetGateways(DefaultIPGateway=self.arrDefaultGatewaysServer,
                                                     GatewayCostMetric=self.arrGatewayCostMetricsServer)
        if return_value[0] == 0:
            print("修改网关成功")
        elif return_value[0] == 1:
            print("修改网关成功")
            InternetDef.intReboot += 1
        else:
            print("修改网关失败")
            exit()

    def set_dns_servers(self):
        """设置DNS服务"""
        return_value = self.objNicConfig.SetDNSServerSearchOrder(DNSServerSearchOrder=self.arrDNSServers)
        if return_value[0] == 0:
            print("修改DNS成功")
        elif return_value[0] == 1:
            print("修改DNS成功")
            InternetDef.intReboot += 1
        else:
            print("修改DNS失败")
            exit()

    def set_internet_server(self):
        """设置Internet服务"""
        if self.start_wmi_service():  # 启动WMI服务,如果返回True,则设置Internet
            self.set_ip_servers()
            self.set_gateways_server()
            self.set_dns_servers()
        else:
            exit()

    def get_ip_info(self):
        """获取IP信息"""
        print("本机IP:\n", self.objNicConfig.IPAddress[0])

    def get_subnet_info(self):
        """获取子网掩码信息"""
        print("子网掩码:\n", self.objNicConfig.IPSubnet[0])

    def get_gateways_info(self):
        """获取网关信息"""
        print("默认网关:\n", self.objNicConfig.DefaultIPGateway[0])

    def get_dns_info(self):
        """获取DNS信息"""
        print("本机DNS:\n" + '\n'.join(self.objNicConfig.DNSServerSearchOrder))

    def get_mac_address(self):
        """获取本机MAC信息"""
        mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
        temp_mac_str = ":".join([mac[e:e + 2] for e in range(0, 11, 2)])
        self.strMACAddress = temp_mac_str.replace(':', '-').upper()
        print("本机MAC:\n", self.strMACAddress)

    def get_internet_info(self):
        """获取Internet所有信息函数"""
        if InternetDef.intReboot > 0:
            print("需要重新启动计算机!")
        if self.start_wmi_service():  # 重新启动WMI服务,如果返回True,则获取internet信息
            self.get_ip_info()
            self.get_subnet_info()
            self.get_gateways_info()
            self.get_dns_info()
            self.get_mac_address()
        else:
            exit()


if __name__ == '__main__':
    # 定义internet对象
    internet1 = InternetDef(arrIPAddresses, arrSubnetMasks, arrDefaultGateways,
                            arrGatewayCostMetrics, arrDNS, None, None, None)

    # 设置Internet
    internet1.set_internet_server()
    # 获取internet信息
    internet1.get_internet_info()
    # Python程序运行结束后不关闭控制台命令
    input("\n请按任意键退出。。。")

    """
    # 定义internet对象
    internet2 = InternetDef([""], [""], [""], [1], ["", ""], None, None, None)
    # 获取internet信息
    internet2.getInternetInfo()
    # Python程序运行结束后不关闭控制台命令
    input("\n请按任意键退出。。。")
    """
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值