Python3.10动态修改Windows系统本地IP地址

作者:刘悦的技术博客 时间:2021-07-21 01:10:59 

一般情况下,局域网里的终端比如本地服务器设置静态IP的好处是可以有效减少网络连接时间,原因是过程中省略了每次联网后从DHCP服务器获取IP地址的流程,缺点是容易引发IP地址的冲突,当然,还有操作层面的繁琐,如果想要切换静态IP地址,就得去网络连接设置中手动操作,本次我们使用Python3.10动态地修改电脑的静态IP地址。

获取多网卡配置

一个网卡对应一个静态IP地址,但机器上未必只有一个网卡,所以如果想动态切换,必须要指定网卡名称,Win系统中通过ipconfig命令来获取当前系统的网卡信息:

ipconfig

系统返回:

PS C:\Users\liuyue\h2102-a\videopro> ipconfig  
Windows IP 配置  
以太网适配器 以太网:  
  连接特定的 DNS 后缀 . . . . . . . :  
  本地链接 IPv6 地址. . . . . . . . : fe80::a216:f22a:52a:3388%4  
  IPv4 地址 . . . . . . . . . . . . : 192.168.1.104  
  子网掩码  . . . . . . . . . . . . : 255.255.255.0  
  默认网关. . . . . . . . . . . . . : 192.168.1.1  
以太网适配器 以太网 2:  
  连接特定的 DNS 后缀 . . . . . . . :  
  IPv6 地址 . . . . . . . . . . . . : fdb2:2c26:f4e4:0:7703:1e08:e622:2f0  
  临时 IPv6 地址. . . . . . . . . . : fdb2:2c26:f4e4:0:717c:b59e:b6cd:51b2  
  本地链接 IPv6 地址. . . . . . . . : fe80::2645:f265:ad72:c751%16  
  IPv4 地址 . . . . . . . . . . . . : 192.168.0.118  
  子网掩码  . . . . . . . . . . . . : 255.255.255.0  
  默认网关. . . . . . . . . . . . . :  
以太网适配器 vEthernet (Default Switch):  
  连接特定的 DNS 后缀 . . . . . . . :  
  本地链接 IPv6 地址. . . . . . . . : fe80::3ece:9b38:2572:4e33%18  
  IPv4 地址 . . . . . . . . . . . . : 172.31.16.1  
  子网掩码  . . . . . . . . . . . . : 255.255.240.0  
  默认网关. . . . . . . . . . . . . :

如果想通过Python来获取网卡信息,则需要在脚本中运行ipconfig命令,构建change_ip.py脚本:

import os,re  

class IpManage:  

def __init__(self):  

self.ip_list = self.get_ip()  

def get_ip(self):  

result = os.popen('ipconfig')  
       res = result.read()  

resultlist = re.findall('''(?<=以太网适配器 ).*?(?=:)|(?<=无线局域网适配器 ).*?(?=:)''', res)  

print(resultlist)  

return resultlist  

if __name__ == '__main__':  

IpManage()

这里通过os模块的popen方法来运行ipconfig命令,随后再使用正则来匹配网卡名称,最后将匹配到的网卡列表赋值给实例属性,程序返回:

['以太网', '以太网 2', 'vEthernet (Default Switch)']  
[Finished in 394ms]

至此,三块网卡的名称就获取到了。

动态切换静态IP

接下来就是通过Python脚本来动态切换指定网卡的静态IP地址了,Windows系统通过netsh命令来指定IP地址:

netsh interface ip set address name=以太网 static 192.168.201.137 255.255.248.0 192.168.200.1

这里name参数是网卡名称,后来三个地址分别代表静态IP地址,子网掩码以及网关地址。

这里将第一块网卡的静态IP地址设置为192.168.201.137,子网掩码是255.255.248.0,网关地址为192.168.200.1。

随后在Windows的网络连接设置中进行查看:

Python3.10动态修改Windows系统本地IP地址

发现已经设置好了,随后再手动修改为自动获得IP地址选项。

下面通过Python脚本进行设置:

def set_ip(self,name,ip="192.168.201.137",mask="255.255.248.0",gateway="192.168.200.1"):  

result = os.popen(f"netsh interface ip set address name={name} static {ip} {mask} {gateway}")  
       res = result.read()  

print(res)

这里添加一个实例方法来设置ip地址,同样使用popen方法来运行命令,随后进行调用:

if __name__ == '__main__':  

im = IpManage()  

im.set_ip(im.ip_list[0])

这里将第一块网卡的IP地址进行指定操作。

完整代码:

import os,re  

class IpManage:  

def __init__(self):  

self.ip_list = self.get_ip()  

def set_ip(self,name,ip="192.168.201.137",mask="255.255.248.0",gateway="192.168.200.1"):  

result = os.popen(f"netsh interface ip set address name={name} static {ip} {mask} {gateway}")  
       res = result.read()  

def get_ip(self):  

result = os.popen('ipconfig')  
       res = result.read()  

resultlist = re.findall('''(?&lt;=以太网适配器 ).*?(?=:)|(?&lt;=无线局域网适配器 ).*?(?=:)''', res)  

print(resultlist)  

return resultlist  

if __name__ == '__main__':  

im = IpManage()  

im.set_ip(im.ip_list[0])

来源:https://www.cnblogs.com/v3ucn/p/17383715.html

标签:Python,IP地址
0
投稿

猜你喜欢

  • 多种语言下获取当前页完整URL及其参数

    2022-02-28 23:23:29
  • python 读取文件并把矩阵转成numpy的两种方法

    2023-10-21 23:18:01
  • 一文教你实现Python重试装饰器

    2022-04-23 08:01:07
  • python机器学习高数篇之泰勒公式

    2022-09-08 18:38:48
  • python selenium实现智联招聘数据爬取

    2022-08-30 00:29:02
  • Oracle备库宕机启动的完美解决方案

    2023-07-20 05:28:34
  • wxPython中wx.gird.Gird添加按钮的实现

    2021-07-05 15:13:19
  • C语言实现二叉搜索树的完整总结

    2023-11-26 11:20:43
  • 关于python变量的引用以及在底层存储原理

    2021-06-24 07:37:35
  • 根据表名和索引获取需要的列名的存储过程

    2011-09-30 11:54:42
  • Vue项目服务器部署刷新页面404问题及解决

    2024-04-09 10:47:22
  • Python类和实例的属性机制原理详解

    2022-12-12 19:47:27
  • 图文详解OpenCV中光流以及视频特征点追踪

    2022-12-30 01:45:08
  • Oracle Portal及其门户网站开发概述

    2010-07-20 13:30:00
  • 在Python中使用matplotlib模块绘制数据图的示例

    2023-08-01 01:39:45
  • python中使用docx模块处理word文档

    2023-04-07 18:50:44
  • 如何把ACCESS转成SQL数据库

    2007-08-11 13:51:00
  • Linux下Centos7安装Mysql5.7.19的详细教程

    2024-01-19 11:15:14
  • pip和pygal的安装实例教程 <font color=red>原创</font>

    2021-05-22 18:35:30
  • python抓取京东商城手机列表url实例代码

    2022-11-11 18:23:04
  • asp之家 网络编程 m.aspxhome.com