是否有一种编程方式可以在 Windows 中创建自定义网络配置文件并为其分配虚拟网络适配器?

Posted

技术标签:

【中文标题】是否有一种编程方式可以在 Windows 中创建自定义网络配置文件并为其分配虚拟网络适配器?【英文标题】:Is there an programmatic way to create a custom network profile in Windows and assign a virtual network adapter to it? 【发布时间】:2021-03-11 22:42:48 【问题描述】:

我想以编程方式创建一个新的网络配置文件(除了HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles 下列出的那些)。然后我想以编程方式为其分配一个特定的网络适配器(例如,vEthernet (WSL)),并将配置文件设置为Private 网络模式以遵循防火墙规则,类似于我们可以为 Wi-Fi 网络执行的操作。是否有 Windows 或 PowerShell API 可以帮助解决这个问题?

最终,目标是access Windows network from WSL2 Linux 无需手动调整 Windows 防火墙设置。

More context 的问题,包括我迄今为止尝试过的一些事情。

目前,我的解决方案是每次需要从 WSL2 访问 Windows 主机网络时手动调用 New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)"

【问题讨论】:

你也许可以用 pinvoke 做到这一点我几年前创建了一个脚本来创建一个配置文件在这个要点中:gist.github.com/crshnbrn66/7e81bf20408c05ddb2b4fdf4498477d8 @thomschumacher 谢谢我试试看! 这可能也有帮助github.com/adamdriscoll/pinvoke 【参考方案1】:

就我个人而言,如果可能,我会避免使用 P/Invoke - 这通常是最复杂的方法。

我建议使用 netsh 并解析文本。 Netsh 在后台使用 Win32 API,因此将您的问题从 P/Invoke 更改为正则表达式(我认为这通常是更容易使用的工具)。

This 可能是 netsh 调用的有用指针。重点:

netsh lan show profiles
netsh lan export profile folder=PATH_TO_FOLDER interface="INTERFACE_NAME"
netsh lan add profile filename="PATH_AND_FILENAME.xml" interface="INTERFACE_NAME"

IIUC,您不需要每次都创建新的配置文件,您只需定义一次。根据我对 WSL 的了解,您在每次启动时都会获得一个新 IP,因此问题在于将其分配给您为该任务创建的一个配置文件。

如果正确,那么我会将现有配置文件的配置文件导出到 XML,手动编辑一次,然后在您看到 WSL 适配器时自动应用该 XML。

不确定是否要以交互方式执行此操作,但为了实现完全自动化,我想到的方法是将任务附加到事件查看器中的相关事件。在我的盒子上,我没有发现任何明显的 WSL 事件源,但 Hyper-V-VmSwitch 源看起来很有希望。这是一个示例事件:

Log Name:      System
Source:        Microsoft-Windows-Hyper-V-VmSwitch
Date:          02/08/2021 09:59:40
Event ID:      264
Task Category: None
Level:         Information
Keywords:      (128)
User:          SYSTEM
Computer:      ******************
Description:
Port D76B3365-5A23-4960-B044-066E05FF3F2D (Friendly Name: A7DB3628-B2A6-4605-AAED-229DB96E064E) successfully created on switch 5EE23C35-0881-4967-A447-FF22139BE1F4 (Friendly Name: WSL).

为了简洁起见,我省略了很多,但很高兴回答后续问题。

【讨论】:

以上是关于是否有一种编程方式可以在 Windows 中创建自定义网络配置文件并为其分配虚拟网络适配器?的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中创建自定义 JButton

如何在 Libra 测试网中创建自定义代币?

是否可以在 iOS 中创建自签名证书?

是否可以在使用内置字典的android中创建自定义键盘[关闭]

有没有办法在 android 中创建自定义应答机?

在 Android 中创建自定义视图