工作需要,要在电脑上配置多个虚拟网卡,每个网卡上可能要配置多个不同的IP,也会时常对虚拟网卡配置的IP进行大范围的修改。比较麻烦,修改一次要花费不少时间,而且还总是容易少配置一些IP,导致一些程序无法启动,所以动不动就会把心态搞得稀碎。于是想了个办法,用自己不成熟的python技术做了个脚本,解决了上面的问题。因为也算是python的初学者,大部分东西都是需要用哪一块了,就去搜索哪一块的知识,现学现卖。所以可能对于一些大佬来说,我做的东西十分不入眼,这也是没办法的事,不过我是欢迎大佬们能对我写的东西提一些缺点问题啊或者是意见什么的,能够促进我不断进步。费话不多说,亮代码。

# 一键修改IP工具,但是有些电脑可能不太好用,不知道是为什么
import os
import sys
import wmi
import ctypes
import subprocess
# from __future__ import print_functiondef isAdmin():try:return ctypes.windll.shell32.IsUserAnAdmin()except:return Falsedef getWinNetList(net_list):netcardnum = 0net_card = {} wmiservice = wmi.WMI()configs = wmiservice.Win32_NetworkAdapterConfiguration(IPEnabled=True)  # 获取到本地所有有网卡信息,listfor nic in configs:if nic.MACAddress is not None:net_card['num'] = netcardnumnet_card['mac'] = nic.MACAddress# net_card['ip'] = []# if nic.IPAddress is not None:#     for i in range(len(nic.IPAddress)):#         net_card['ip'].append(nic.IPAddress[i])# print('ip:'+ str(nic.IPAddress[i]))net_list.append(net_card)netcardnum += 1net_card = {} return configsdef setIpMask(adapter, iplist, masklist): for i in range(len(iplist)):print('ip:' + str(iplist[i]) + ' mask:' + str(masklist[i])) # 开始执行修改ip、子网掩码、网关ipres = adapter.EnableStatic(IPAddress=iplist, SubnetMask=masklist)if ipres[0] == 0:print('设置IP成功')else:if ipres[0] == 1:print('设置IP成功')else:print('修改IP失败')print(ipres[0])return False# #修改网关# wayres = adapter.SetGateways(DefaultIPGateway=interway, GatewayCostMetric=[1])# if wayres[0] == 0:#     print('设置网关成功')# else:#     print('修改网关失败')#     return False# #修改dns# dnsres = adapter.SetDNSServerSearchOrder(DNSServerSearchOrder=dns)# if dnsres[0] == 0:#     print('设置DNS成功,等待3秒刷新缓存')#     sleep(3)#     # 刷新DNS缓存使DNS生效#     os.system('ipconfig /flushdns')# else:#     print('修改DNS失败')#     return False# 执行windows命令
def execCommand(commands) -> list:"""执行windows命令"""if not commands:return list()# 子进程的标准输出设置为管道对象if isinstance(commands, str):commands = [commands]return_list = []for i in commands:p = subprocess.Popen(i, shell=True, stdout=subprocess.PIPE, universal_newlines=True)# p.wait()res = "".join(p.stdout.readlines())return_list.append(res)return return_listdef getConfigurableNetCard():net_card_data = []res = execCommand("ipconfig /all")temp_dict = {} for x in res[0].splitlines():# 如果发现新的适配器,则重置上一个网卡是否可用的状态if "网适配器" in x:if "以太网适配器" in x:if '蓝牙' in x:continueelse:temp_dict['card_name'] = x.split(" ",  1)[1][:-1]temp_dict['mac'] = []# print("当前网卡 %s" % (temp_dict['card_name']))continueif temp_dict:# # 匹配IP正则# if "IPv4 地址" in x:#     pattern = re.compile(r'((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}')#     ip = pattern.search(x).group()#     temp_dict['ip'].append(ip)#     continue if "物理地址" in x:mac = x.split(': ')[1].replace('-', ':')temp_dict['mac'].append(mac)net_card_data.append(temp_dict)temp_dict = {}else:continuereturn net_card_data def getModifyNetCardMac(netCardName ,configuraList):for i in range(len(configuraList)):if netCardName in configuraList[i]['card_name']:mac = configuraList[i]['mac'][0]breakreturn macdef getModifyNetCardNum(netCardMac, winNetLists):for i in range(len(winNetLists)):if netCardMac in winNetLists[i]['mac']:num = winNetLists[i]['num']breakreturn numdef getNetCardName(str):name = ''if 'netcardname' in str:name =  str.split(':')[1]return namedef getConfigIpMask(str):info = {}if 'ip' in str:ip = str.split('ip:')[1].split(' ')[0]if 'mask' in str:mask = str.split('mask:')[1].split(']')[0]info['ip'] = ipinfo['mask'] = maskreturn infodef ReadConfig(netcardname):data = {}data['ip'] = []data['mask'] = []linenum = 0config = 'config.txt'if True == os.path.exists(config):with open(config,'r') as f: for line in f.readlines():line = line.strip('\n')  #去掉列表中每一个元素的换行符if 0 == linenum:tmpName = getNetCardName(line)netcardname.append(tmpName)print('要配置的网卡:' + str(netcardname))else:tmpinfo = getConfigIpMask(line)data['ip'].append(tmpinfo['ip'])data['mask'].append(tmpinfo['mask'])linenum += 1# print(data)return datadef main():netcardname = []winNetLists = [] datainfo = ReadConfig(netcardname)configuraList = getConfigurableNetCard()configs = getWinNetList(winNetLists)modifyMac = getModifyNetCardMac(netcardname[0], configuraList)modifyNetCardNum = getModifyNetCardNum(modifyMac, winNetLists)setIpMask(configs[modifyNetCardNum], datainfo['ip'], datainfo['mask'])input('按回车退出')if __name__ == '__main__':if isAdmin():print('管理员权限操作')main()else:if sys.version_info[0] == 3:ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)else:#in python2.xctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)

关于config.txt文件的配置要求如下:

第一行必须配置网卡名,
且只可以改“netcardname:”后面的字符
其它几行配置IP和掩码以及注释,须按照
XXXX[ip:xxx.xxx.xxx.xxx mask:xxx.xxx.xxx.xxx]的格式
其中x需要填数字,X可选填汉字也可不填,
注意ip的最后一位与mask字符中间有一个空格.

例如:config.txt

netcardname:ElecOC
设备1[ip:10.16.94.2 mask:255.0.0.0]
设备2[ip:10.16.94.6 mask:255.0.0.0]
设备3[ip:10.24.10.2 mask:255.0.0.0]
设备4[ip:10.24.94.6 mask:255.0.0.0]
设备5[ip:10.24.94.2 mask:255.0.0.0]
设备6[ip:10.24.10.6 mask:255.0.0.0]
设备7[ip:10.28.94.6 mask:255.0.0.0]
设备8[ip:10.28.94.2 mask:255.0.0.0]

python一键配置多个IP相关推荐

  1. linux服务器配置python环境_服务器python环境配置福利,CentOS ,Linux 一键下载python3和环境配置...

    很多新手对于linux 系统很是费解,通常下一个环境就需要大半天,中途还会出现各种这样的问题 ,干脆写一个脚本一键配置python环境 shell 脚本start.sh: #!/bin/bash yu ...

  2. python ip动态代理_Scrapy 配置动态代理IP的实现

    应用 Scrapy框架 ,配置动态IP处理反爬. # settings 配置中间件 DOWNLOADER_MIDDLEWARES = { 'text.middlewares.TextDownloade ...

  3. vscode编辑python_VsCode中编写python环境配置

    1. VsCode中编写python环境配置 1.1. 前言 有过开发经验都知道idea一系列的软件虽然功能比较多,但比较容易卡,电脑不好还真容易上火,这里我想要入门python,还是选了款vscod ...

  4. WIFI 一键配置原理-ESP8266

    1wifi模块可以连接路由器,是不是就能实现远程控制呢? wifi模块可以连接路由器,说明实现路由器的局域网控制没有问题. 2远程控制的过程中,自己家里面搭建服务器可以吗? 远程控制需要服务器,但是用 ...

  5. kali linux查询自己的ip,Kali Linux常用服务配置教程获取IP地址

    Kali Linux常用服务配置教程获取IP地址 下面以Kali Linux为例,演示获取IP地址的方法 (1)设置网络接口为自动获取IP地址.在Kali Linux的收藏夹中单击图标,将显示所有的程 ...

  6. qca4004 linux wifi,物联网 WIFI 一键配置原理(smartconfig) ESP8266/QCA4004

    自从物联网 问世以来,如何使得物 能够联网 有了很多的方式,目前运用非常广的WIFI,今天就总结下自这个方面,也对于有需要的盆友 也希望有抛砖引玉之效果. 物联网: 智能硬件+APP+云 APP 需要 ...

  7. linux环境下单网卡配置多个IP地址(详细)

    1.使用命令进行配置 这就很简单了,首先查看一下当前机器的IP地址,命令如下: [html]  view plain copy #ifconfig eth0       Link encap:Ethe ...

  8. Python一键保存千张表情包图

    表情包这个东西,现在每个人聊天都会看到.有时候自己发完文字后,不配一个表情包都会觉得很不习惯.不止是在聊天,就比如我现在发文章都要配几个表情包. 跟刚认识的朋友在聊天时,是不是的发几个表情包,都感觉能 ...

  9. 蓝桥ROS云课→一键配置←f1tenth和PID绕圈

    虽然是一键配置,但还是需要若干步骤的. 参考: ROS1云课→18一键配置 蓝桥ROS之f1tenth案例学习与调试(成功) 蓝桥ROS之f1tenth简单PID沿墙跑起来(Python) 一键升级脚 ...

最新文章

  1. 百度重置页面自动跳转脚本
  2. libdgl.dll WinError 126
  3. 为什么你的问题总是没人回答
  4. SourceInsight 4.0 之二 项目文件关联
  5. Cocos2dx学习笔记(1) Ref类型数据 垃圾回收机制
  6. JAVA中protected的作用
  7. python链表节点的插入p.next curnode_leetcode刷题总结之链表
  8. [转]在这新站如何在一天内被Google和百度收录
  9. 网页php如何判断登录手机串号_php判断是否是手机登陆
  10. jemalloc 编译
  11. GC回收算法--当女友跟你提分手!
  12. exmail邮件被退回
  13. 判断今天是星期几 暴力枚举
  14. https安全证书过期失效的原因以及解决方法
  15. python正则表达式面试_python-面试题
  16. 再见牛根生,再见英雄时代
  17. 供应商寄售过程的实现
  18. 机器人强化学习——Comparing Task Simplifications to Learn Closed-Loop Object Picking Using DRL(2019 RAL)
  19. 大三寒假实习了半个月很困惑
  20. 创业公司如何分配股份与期权?

热门文章

  1. 工作后,同学关系渐渐疏远了,心里莫名有些失落,怎么办?
  2. u8信息服务器,U8开启服务器
  3. 用户留存分析的几种方法
  4. 十分钟清除西门子C65手机密码
  5. 通达信VOL实战监测,很实用 可以替代成交量指标公式 源码 效果图
  6. EI、SCI、CSCI、CPCI 分别是什么?
  7. 电脑重启后鼠标和键盘不好使解决方案
  8. linux下安装ab压力测试工具及ab命令详解
  9. mysql replication 监控_MySQL之-Replication监控及自动故障切换的详细分析
  10. mysql约束简单理解