wsl 网络探究
省流:wsl2能否固定ip地址? - 豆腐干的回答 - 知乎
https://www.zhihu.com/question/387747506/answer/2764445888
割---------------------------
因为长期饱受wsl修改地址的困扰,我打算使用脚本来同步wsl在bashrc文件中配置的代理服务器ip
首先需要检查wsl网络适配器的IP地址
利用python库查看网络的接口识别名,即使用netifaces这个库,文档中的示例是这样的:
>>> netifaces.interfaces()
['lo0', 'gif0', 'stf0', 'en0', 'en1', 'fw0']
这个应该是linux的例子,windows的例子如下
查阅资料这个应该是windows下的guid查看网络适配器(NIC)命令如下:
PS C:\Users\xxx> wmic nicconfig get description,settingid
Description SettingID
Microsoft Kernel Debug Network Adapter {0D90B06D-1F33-423F-96B8-E1E9EA1AA9F5}
Intel(R) Wireless-AC 9560 160MHz {8A87D1BD-4A73-4997-8DCE-AF20EFB339BA}
Realtek Gaming GbE Family Controller {D3BED80F-C4EA-478A-9745-CDFC9B501305}
Microsoft Wi-Fi Direct Virtual Adapter {01D4FDBF-44D2-4016-B680-37192F214412}
Bluetooth Device (Personal Area Network) {E5EAE072-39BE-4A11-9185-4642591946E3}
Microsoft Wi-Fi Direct Virtual Adapter {6C5EF811-C554-4FA0-A840-6B585A9FAF42}
WAN Miniport (SSTP) {CC2E3F02-C30D-4BE1-B65A-08A6DC064F54}
WAN Miniport (IKEv2) {0F8CC9D6-D04E-4B7E-9079-1716D4AA5D9B}
WAN Miniport (L2TP) {BC92FC3D-9F53-4943-AA76-007E4004D6BD}
WAN Miniport (PPTP) {986E0301-1547-4DFC-ADD0-DEB4B83A0D0F}
WAN Miniport (PPPOE) {5B4E25CF-B6AA-4215-931A-10E9DA32D0E2}
WAN Miniport (IP) {711AB5EA-0D23-45DB-9D7F-5A5A7C40E3FC}
WAN Miniport (IPv6) {4CC1C638-3932-4F77-A62C-CD3BDBD8759D}
WAN Miniport (Network Monitor) {6DEF30ED-E921-43C6-9D99-EEF327B133F4}
Hyper-V Virtual Switch Extension Adapter {D592FA15-C07D-48FA-9C2C-22B2DF230575}
RAS Async Adapter {0128B919-E037-4983-A41C-1490D5BB88C5}
经过对比发现这里的guid和前面python库获得的guid并不完全对应,这里找不到wsl的网络适配器
下面我们利用ipconfig可以查看wsl所在的地址,然后对比python中获取的网络适配器接口的地址发现,python库中返回的数组中的最后一个元素,就是wsl的guid
对比:ipconfig和下面python获取的ip
import netifaces
for line in netifaces.interfaces():
print(netifaces.ifaddresses(line))
现在找到了wsl对应的guid,目前的问题就是guid是否会改变,能否在重启之后(也就是通常的ip地址改变之后)通过guid获取网卡的ip地址
尝试关闭wsl在powershell中输入以下命令
wsl --shutdown
接着在powershell中重启wsl,发现此时wsl的网络适配器ip没有变化,所以需要电脑重新启动
重新启动后发现整个网络适配器重新创建了,所以guid发生了改变。。。。
除了使用guid,还可以把ipconfig的内容放到python中进行解析,获取ip并做自动修改
python读取管道输入用这个
sys.stdin.read()
用python处理掩码和ip的运算需要对文件进行读写,但是shell好像不支持逻辑与运算,如果能够在shell脚本里读取python的输出就好了
shell里读取python输出是可以的,具体代码已经写好了,在文章开头的知乎链接里
还可以优化,未完待续
补充:wsl报错不可访问对象时
powershell 管理员权限输入
netsh winsock reset