允许别的电脑连接我电脑wsl下5001、5002端口
为了使其他电脑能够访问你电脑上WSL中的5001和5002端口,请按照以下步骤操作:
步骤1:在WSL中配置服务
确保你的服务在WSL中监听所有网络接口(0.0.0.0),而不仅仅是本地(127.0.0.1)。例如,使用Python Flask时,启动命令应为:
flask run --host=0.0.0.0 --port=5001
步骤2:允许Windows防火墙入站连接
以管理员身份打开PowerShell,运行以下命令允许端口:
New-NetFirewallRule -DisplayName "允许WSL端口5001-5002" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 5001,5002
步骤3:设置端口转发(手动)
-
获取WSL的IP地址:在WSL终端中执行:
hostname -I | awk '{print $1}'
或从PowerShell中获取:
wsl hostname -I | ForEach-Object { $_.Trim() }
-
设置转发规则(替换
<WSL_IP>
为实际IP):netsh interface portproxy add v4tov4 listenport=5001 listenaddress=0.0.0.0 connectport=5001 connectaddress=<WSL_IP> netsh interface portproxy add v4tov4 listenport=5002 listenaddress=0.0.0.0 connectport=5002 connectaddress=<WSL_IP>
步骤4:处理WSL IP变化(可选)
每次WSL重启后IP可能变化,可通过脚本自动化:
-
创建PowerShell脚本(如
wsl_port_forward.ps1
):$wsl_ip = wsl hostname -I | ForEach-Object { $_.Trim() } netsh interface portproxy reset netsh interface portproxy add v4tov4 listenport=5001 listenaddress=0.0.0.0 connectport=5001 connectaddress=$wsl_ip netsh interface portproxy add v4tov4 listenport=5002 listenaddress=0.0.0.0 connectport=5002 connectaddress=$wsl_ip
-
设置计划任务,在每次登录时运行脚本:
-
任务计划程序中创建新任务,触发器设置为“登录时”。
-
操作设置为启动PowerShell,参数:
-ExecutionPolicy Bypass -File "路径\wsl_port_forward.ps1"
。 -
勾选“使用最高权限运行”。
-
步骤5:测试连接
其他电脑使用Windows主机的IP地址(非WSL的IP)访问服务:
curl http://<Windows_IP>:5001
验证端口转发状态
在PowerShell中运行:
netsh interface portproxy show all
注意事项
-
管理员权限:所有命令需在管理员权限下运行。
-
网络环境:确保设备在同一网络,且无路由器/防火墙阻拦。
-
WSL版本:上述步骤适用于WSL2。若使用WSL1,无需端口转发,直接使用Windows的localhost即可。
完成以上步骤后,外部设备即可通过Windows主机的IP连接到WSL的指定端口。