You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中获取Windows网络接口名称并修改IP地址

解决Windows下Python修改静态IP的问题

好问题!要实现这个需求,我们可以分两步走:先获取目标网络接口的名称,再执行IP修改操作。下面给你两种实用的方案:

一、获取网络接口名称的方法

不像socket.gethostname()那么直接,但有几种可靠的方式能拿到netsh识别的接口名称:

1. 解析netsh命令的输出

直接调用netsh interface show interface命令,然后从输出里提取接口名称。这种方法不需要额外安装库,纯Python就能实现:

import subprocess

def get_active_interface_names():
    # 执行netsh命令并获取输出
    result = subprocess.check_output(
        ["netsh", "interface", "show", "interface"],
        encoding="gbk"  # 根据系统编码调整,英文系统可换成utf-8
    )
    lines = result.splitlines()
    active_interfaces = []
    # 跳过表头,遍历每一行提取启用的接口名称
    for line in lines[3:]:
        parts = line.strip().split()
        if len(parts) >= 4 and parts[0] == "已启用":  # 英文系统替换为"Enabled"
            # 接口名称可能包含空格,从第3个元素开始拼接
            interface_name = " ".join(parts[3:])
            active_interfaces.append(interface_name)
    return active_interfaces

# 调用示例
print(get_active_interface_names())

2. 用WMI库查询(更优雅)

WMI是Windows的原生管理接口,能直接获取系统硬件和网络配置信息。先安装wmi库:pip install wmi,然后用下面的代码获取接口名称:

import wmi

def get_interface_names():
    c = wmi.WMI()
    interface_names = []
    # 查询启用了IP功能的网络适配器
    for adapter in c.Win32_NetworkAdapterConfiguration(IPEnabled=True):
        # NetConnectionID就是netsh里显示的接口名称
        if adapter.NetConnectionID:
            interface_names.append(adapter.NetConnectionID)
    return interface_names

# 调用示例
print(get_interface_names())

二、修改静态IP的两种方式

1. 结合subprocess调用netsh命令

拿到接口名称后,直接构造你需要的netsh命令执行即可,注意必须以管理员身份运行脚本:

import subprocess

def set_static_ip(interface_name, ip, subnet_mask, gateway):
    try:
        # 设置IP和子网掩码
        subprocess.run(
            ["netsh", "interface", "ip", "set", "address",
             f'"{interface_name}"', "static", ip, subnet_mask],
            check=True,
            shell=True
        )
        # 设置网关
        subprocess.run(
            ["netsh", "interface", "ip", "set", "address",
             f'"{interface_name}"', "static", ip, subnet_mask, gateway, "1"],
            check=True,
            shell=True
        )
        print(f"静态IP设置成功!")
    except subprocess.CalledProcessError as e:
        print(f"设置失败:{e}")

# 调用示例(替换成你的接口名称和IP参数)
interface = "Wireless Network Connection"
set_static_ip(interface, "192.168.1.3", "255.255.255.0", "192.168.1.1")

2. 用WMI直接修改(无需调用外部命令)

还是用WMI库,直接调用适配器的方法来修改IP,同样需要管理员权限:

import wmi

def set_static_ip_wmi(ip, subnet_mask, gateway):
    c = wmi.WMI()
    for adapter in c.Win32_NetworkAdapterConfiguration(IPEnabled=True):
        # 设置静态IP
        ip_result = adapter.EnableStatic(IPAddress=[ip], SubnetMask=[subnet_mask])
        # 设置网关
        gateway_result = adapter.SetGateways(DefaultIPGateway=[gateway], GatewayCostMetric=[1])
        if ip_result[0] == 0 and gateway_result[0] == 0:
            print(f"已为接口 {adapter.NetConnectionID} 设置静态IP")
        else:
            print(f"接口 {adapter.NetConnectionID} 设置失败")

# 调用示例
set_static_ip_wmi("192.168.1.3", "255.255.255.0", "192.168.1.1")

注意事项

  • 无论哪种方法,必须以管理员身份运行Python脚本,否则会因权限不足失败。
  • 如果是英文系统,要把代码里的“已启用”改成“Enabled”,避免解析错误。

内容的提问来源于stack exchange,提问作者Hrvoje T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:09:08