wsl2 访问宿主机解决思路
wsl2 中获取宿主机 ip 可以通过
export WINDOWS_HOST=`cat /etc/resolv.conf | grep nameserver | cut -d ' ' -f 2`
的方式获得宿主机 IP
因为很多地方会需要访问 windows 的代理。比如 git。
可以写一个脚本修改 host 文件:
记得用
sudo chmod 777 /etc/hosts
修改一下权限
$HOME/host.sh:
#!/usr/bin/bash
HOST_NAME="windows_host"
FILE=/etc/hosts
HOST_LINE=$(grep "windows_host" $FILE)
TEMP_FILE=$HOME/hosts_tmp
if [ -n "$HOST_LINE" ]
then
sed "s/$HOST_LINE/$WINDOWS_HOST $HOST_NAME/g" $FILE > $TEMP_FILE
cat $TEMP_FILE > $FILE
rm $TEMP_FILE
else
echo "$WINDOWS_HOST $HOST_NAME" >> $FILE
fi
这样每次执行 $HOME/host.sh
就可以将最新的 windows 宿主机的 IP 地址写进 host 文件,就能通过 windows_host
进行访问。
考虑到 wsl 太特殊,好像仿佛是很难做到开机自启。
我这里只是替换个文件而已,没什么性能考虑,每次打开 terminal 都替换一次是可以接受的。
因此直接在 $HOME/.zshrc
/ $HOME/.bashrc
加入以下两行即可:
export WINDOWS_HOST=`cat /etc/resolv.conf | grep nameserver | cut -d ' ' -f 2`
sh $HOME/host.sh
嗯。。。还凑活。
在配置 git 代理时就可以这样配置了:$HOME/.gitconfig
:
[http "https://github.com"]
proxy = socks5://windows_host:1080
配置一次即可,以后都不用操心了。
访问 windows 里的服务也很方便,大概这样:
curl http://windows_host:8080/api.json
-
wsl2
export WINDOWS_HOST=`cat /etc/resolv.conf | grep nameserver | cut -d ' ' -f 2`sh $HOME/host.sh
这个获取的不是wsl2的网关吗?为啥可以从网关直接访问物理机服务呢?这俩不是独立的吗?
我是这样设置环境变量的`
利用wsl2可以使用宿主机的exe程序的特性来使用宿主机的python程序发送一个udp请求获取宿主机的上网网卡的ip
https://docs.microsoft.com/en-us/windows/wsl/networking#accessing-windows-networking-apps-from-linux-host-ip
官方文档方案
主要是,用这个方法请求到的网关没啥用,所以我用的我前面那个方法
这样的知识对于cv佬的我来说还是太过高深了
牛逼
https://github.com/devcui/bits-essay/blob/master/post/wsl/install_wsl2.md
这样获取的是 网关 的地址,我这里实测不太可行,然后用了下面的方法
https://lixi.fun/2023/06/13/wsl-get-windows-ip/
牛逼
牛逼
流弊
6
考古挖坟,不忘初心~