在WSL2中获取宿主机IP的最佳实践

WSL2 开发中的代理访问问题

最近,我一直在使用 WSL2 进行开发,结合 VSCode 的体验非常不错。然而,偶尔在 Linux 环境中访问 Google 时,遇到了一些麻烦。因此,我想在 Linux 中访问 Windows 11 的代理,但获取宿主机的 IP 地址成了一个问题。(在这里,我们假设你已经参考了一些网上的教程,解决了防火墙的问题。)

我尝试使用类似以下的脚本来获取宿主机的 IP 地址:

1
2
3
4
5
export hostip=$(cat /etc/resolv.conf | grep -oP '(?<=nameserver\ ).*')
export https_proxy="http://${hostip}:7890"
export http_proxy="http://${hostip}:7890"
echo $http_proxy
echo $https_proxy

通过解析 /etc/resolv.conf 来获取宿主机的 IP 地址,但这并不是最佳实践。有时你可能会发现无法获取到有效的值,或者得到的是一个公网的 nameserver,例如 223.5.5.5 或 8.8.8.8。

那么,正确的做法是使用以下命令来获取宿主机的 IP 地址:

1
hostip=$(wsl.exe hostname -I)

不过,这样仍然有可能返回多个 nameserver。为了解决这个问题,可以使用以下命令:

1
hostip=$(ipconfig.exe | grep 'vEthernet (WSL)' -A4 | cut -d":" -f 2 | tail -n1 | sed -e 's/\s*//g')

通过这种方式,你可以准确地获取到宿主机的 IP 地址,从而顺利地在 Linux 环境中访问 Windows 11 的代理。


在WSL2中获取宿主机IP的最佳实践
https://hawli.cn/2023/02/28/在WSL2中获取宿主机IP/
作者
李科燃
发布于
2023年2月28日
许可协议