文章目录
1. 从主机访问wsl的服务2. 从wsl访问主机的服务3. 通过远程ip连接wsl中的服务(局域网)进行以下操作之前,请关掉主机上的防火墙和360。
防火墙关闭之后是这个样子:
1. 从主机访问wsl的服务
在wsl子系统中,使用以下命令,获取wsl的ip
ip addr | grep eth0
我这里的显示是:
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000inet 172.30.64.232/20 brd 172.30.79.255 scope global eth0
wsl的ip即为inet后面的一串,也就是172.30.64.232。
然后找一个目录,新建一个index.html文件,内容为:
<html><head><meta charset="UTF-8"></head><body><h1>点个赞再走</h1><p>这么好的文章还不点赞</p><h2>一键三连关注一下</h2><p>不点赞不许白嫖</p></body></html>
在这个目录下,输入python -m http.server 8080
来启动一个服务。
回到主机,打开浏览器,输入172.30.64.232:8080,应该可以看到这个界面:
2. 从wsl访问主机的服务
首先,在主机上用管理员身份打开powershell,具体来说,可以点击windows左下角的“小窗户”,然后输入powershell进行搜索,点击以管理员身份运行。
输入命令
New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
然后在wsl中输入命令:
cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'
就会出现一个ip,这个ip可以用ping + ip测试一下,应该可以连通
在主机上随便找一个文件夹,创建上面的index.html,运行python -m http.server 8080
来启动一个服务。
由于wsl中没有浏览器,我们用curl命令来测试访问网络服务。输入curl http://{IP}:8080
,比如我这里ip是172.30.64.1,那么结果如下图所示:
3. 通过远程ip连接wsl中的服务(局域网)
我们知道,如果多台机器位于同一局域网下,访问的时候可以使用http://ip:port的方式来访问,那如果我们的服务启动在wsl中,同一局域网下的其他机器该怎么访问呢?分为3步:
(注意:以下步骤对防火墙很敏感,尽量确保自己的设备像文章开头那样,关闭了所有的防火墙)
在wsl子系统中,使用以下命令,获取wsl的ip
ip addr | grep eth0
inet后面跟着的就是wsl的ip,复制一下
在windows中,用管理员方式打开powershell,输入命令,这里我的wsl的ip为172.30.64.232,要启动服务的端口为2345,这里因为8080端口限制比较多,所以换了一个普通的端口,因此命令如下:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2345 connectaddress=172.30.64.232 connectport=2345
记得在使用的时候,替换connectaddress和listenport、connectport为你需要的值。
还是和上面的方法一样,在wsl中输入python -m http.server 2345
,启动一个python的服务,端口2345。
然后在Windows的powershell中,输入ipconfig,找到无线局域网适配器 WLAN:
的IPV4地址
,我这里为10.46.84.134:
在同一局域网下的另一台设备上,打开浏览器,输入http://10.46.84.134:2345,即可看到我们期待的网页:
经过测试,用手机去访问也没有问题的。
如果觉得《同一局域网下windows主机和wsl子系统相互网络服务访问》对你有帮助,请点赞、收藏,并留下你的观点哦!