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的例子如下
image

查阅资料这个应该是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
image

import netifaces

for line in netifaces.interfaces():
  print(netifaces.ifaddresses(line))

image

现在找到了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
posted @ 2022-11-17 23:31  dou_fu_gan  阅读(557)  评论(0编辑  收藏  举报