前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3.10动态修改Windows系统(win10/win11)本地IP地址(静态IP)

Python3.10动态修改Windows系统(win10/win11)本地IP地址(静态IP)

作者头像
用户9127725
发布2023-05-11 10:36:20
5240
发布2023-05-11 10:36:20
举报

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

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

代码语言:javascript
复制
ipconfig

    系统返回:

代码语言:javascript
复制
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脚本:

代码语言:javascript
复制
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命令,随后再使用正则来匹配网卡名称,最后将匹配到的网卡列表赋值给实例属性,程序返回:

代码语言:javascript
复制
['以太网', '以太网 2', 'vEthernet (Default Switch)']
[Finished in 394ms]

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

    动态切换静态IP

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

代码语言:javascript
复制
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的网络连接设置中进行查看:

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

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

代码语言:javascript
复制
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方法来运行命令,随后进行调用:

代码语言:javascript
复制
if __name__ == '__main__':
    
    im = IpManage()

    im.set_ip(im.ip_list[0])

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

    完整代码:

代码语言:javascript
复制
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('''(?<=以太网适配器 ).*?(?=:)|(?<=无线局域网适配器 ).*?(?=:)''', res)

        print(resultlist)

        return resultlist

if __name__ == '__main__':
    
    im = IpManage()

    im.set_ip(im.ip_list[0])

    结语

    藉此,我们就可以通过Python3.10动态地配置本地网卡的静态IP地址,也可以理解为是一种Python自动化流程,静态IP地址可以让IP地址语义化,对于数据中心、网站、银行的结算端口等往往需要静态IP,与此同时,也省却了手动配置静态IP的繁琐过程。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •     动态切换静态IP
  •     结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档