windows 使用python共享网络给另外一个网卡

# -*- coding: utf-8 -*-
import subprocess

def open_share(to_shared_adapter, from_shared_adapter):
    """
    打开以太网的网络共享
    :return: None
    """
    powershell_script = f"""
    # Register the HNetCfg library (once)
    # regsvr32 hnetcfg.dll

    # Create a NetSharingManager object
    $m = New-Object -ComObject HNetCfg.HNetShare

    # List connections
    $m.EnumEveryConnection |% {{ $m.NetConnectionProps.Invoke($_) }}

    # Find connection
    $c = $m.EnumEveryConnection |? {{ $m.NetConnectionProps.Invoke($_).Name -eq "{to_shared_adapter}" }}
    $c2 = $m.EnumEveryConnection |? {{ $m.NetConnectionProps.Invoke($_).Name -eq "{from_shared_adapter}" }}

    # Get sharing configuration
    $config = $m.INetSharingConfigurationForINetConnection.Invoke($c)
    $config2 = $m.INetSharingConfigurationForINetConnection.Invoke($c2)

    # See if sharing is enabled
    Write-Output $config.SharingEnabled
    Write-Output $config2.SharingEnabled

    # See the role of connection in sharing
    # 0 - public, 1 - private
    # Only meaningful if SharingEnabled is True

    Write-Output $config.SharingType
    Write-Output $config2.SharingType

    $config.EnableSharing(0)
    $config2.EnableSharing(1)
    """

    # 使用subprocess.Popen来执行PowerShell命令
    process = subprocess.Popen(
        ['powershell', '-Command', powershell_script],
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        text=True  # 使用text=True可以直接处理字符串,而不是bytes
    )

    # 等待命令执行完成
    stdout, stderr = process.communicate()


def close_share(to_shared_adapter, from_shared_adapter):
    """
    打开以太网的网络共享
    :return: None
    """
    powershell_script = f"""
    # Register the HNetCfg library (once)
    # regsvr32 hnetcfg.dll

    # Create a NetSharingManager object
    $m = New-Object -ComObject HNetCfg.HNetShare

    # List connections
    $m.EnumEveryConnection |% {{ $m.NetConnectionProps.Invoke($_) }}

    # Find connection
    $c = $m.EnumEveryConnection |? {{ $m.NetConnectionProps.Invoke($_).Name -eq "{to_shared_adapter}" }}
    $c2 = $m.EnumEveryConnection |? {{ $m.NetConnectionProps.Invoke($_).Name -eq "{from_shared_adapter}" }}

    # Get sharing configuration
    $config = $m.INetSharingConfigurationForINetConnection.Invoke($c)
    $config2 = $m.INetSharingConfigurationForINetConnection.Invoke($c2)

    # Enable sharing (0 - public, 1 - private)
    $config.DisableSharing()
    $config2.DisableSharing()
    """

    # 使用subprocess.Popen来执行PowerShell命令
    process = subprocess.Popen(
        ['powershell', '-Command', powershell_script],
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        text=True  # 使用text=True可以直接处理字符串,而不是bytes
    )

    # 等待命令执行完成
    stdout, stderr = process.communicate()

    # # 打印输出
    # print(stdout)
    #
    # # 如果有错误输出,打印错误信息
    # if stderr:
    #     print(stderr)

if __name__ == '__main__':
    # 共享与被共享的网络名
    to_shared_adapter = "以太网"
    from_shared_adapter = "以太网 7"
    # 开启共享
    open_share(to_shared_adapter, from_shared_adapter)
    close_share(to_shared_adapter, from_shared_adapter)

在这里插入图片描述

### Windows系统中使用两个网卡同时连接内外网的配置方法 在Windows系统中,可以实现双网卡同时连接内外网的功能。但需要注意的是,默认情况下,Windows系统的路由表可能会导致冲突,因此需要手动调整路由表以确保内外网能够正常通信[^3]。 #### 配置步骤 1. **检查网络适配器状态** 打开控制面板,进入“网络和共享中心”,点击左侧的“更改适配器设置”。确认两个网卡均已正确安装并连接到相应的网络(内网和外网)。 2. **配置内网网卡** - 右键单击用于连接内网的网卡,选择“属性”。 - 在弹出的窗口中,双击“Internet协议版本4 (TCP/IPv4)”。 - 选择“使用下面的IP地址”,手动输入内网的IP地址、子网掩码,并将默认网关留空。 3. **配置外网网卡** - 同样右键单击用于连接外网的网卡,选择“属性”。 - 双击“Internet协议版本4 (TCP/IPv4)”。 - 选择“自动获取IP地址”或手动配置外网的IP地址、子网掩码及默认网关。 4. **调整路由表** - 以管理员身份打开命令提示符,执行以下命令删除自动生成的默认路由: ```cmd route delete 0.0.0.0 ``` - 然后手动添加一条永久路由,指定内网网段的网关。例如,如果内网网段为`192.168.0.0`,网关为`192.168.46.1`,则执行以下命令: ```cmd route add -p 192.168.0.0 mask 255.255.0.0 192.168.46.1 ``` 5. **验证配置** - 使用`route print`命令查看当前的路由表,确保只有一个默认网关(由外网网卡生成),并且内网网段已正确配置。 - 测试内外网连接是否正常,例如通过`ping`命令测试内网和外网的可达性。 #### 注意事项 - 如果发现网络连接不稳定,可能是由于Windows自带的“死网关监测”功能引起的。可以通过修改注册表禁用该功能:导航至`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters`,新建一个名为`DisableDefaultGatewayMetric`的DWORD值,并将其值设置为`1`[^2]。 - 确保两个网卡的IP地址不会发生冲突,例如内网和外网的子网掩码不应重叠。 ```python # 示例代码:批量添加多个路由 import os def add_route(network, netmask, gateway): command = f"route add -p {network} mask {netmask} {gateway}" os.system(command) # 添加内网路由 add_route("192.168.0.0", "255.255.0.0", "192.168.46.1") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值