我制作了一个简单的脚本,并在 WSL2 (Ubuntu 20.04LTS) 内的随机端口上运行它。
import http.server
import socketserver
PORT = 6999
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print(f"Serving on port {PORT}")
httpd.serve_forever()
现在的问题是,当我尝试使用
localhost:<port>
从主机上的浏览器访问它时,它工作正常,但是当我尝试使用 <WSL_IP>:<port>
访问它时,它不起作用。我尝试设置一些入站规则,但仍然不起作用。
我尝试在命令提示符下
curl
但效果不佳。这里发生了什么?
这里有很多建议
可能与 WSL2 如何处理网络接口或防火墙规则有关。
绑定所有接口 修改您的脚本以显式绑定到所有接口
import http.server
import socketserver
PORT = 6999
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("0.0.0.0", PORT), Handler) as httpd:
print(f"Serving on port {PORT}")
httpd.serve_forever()
如果 UFW 正在运行,请尝试禁用它
sudo ufw disable
再次尝试
检查 iptables 是否阻塞了端口
sudo iptables -L -n
检查您的 WSL IP 是否正确
ip addr show eth0
或者从 Windows powershell
wsl -d Ubuntu-20.04 ip addr show eth0
也在 powershell 中(检查连接)
Test-NetConnection <WSL_IP> -Port 6999
这也可能是您的 WSL 配置
sudo nano /etc/wsl.conf
添加这个
[network]
generateResolvConf = true
如果您尝试从远程系统访问它,也请尝试此操作
打开 Windows 防火墙:控制面板 > 系统和安全 > Windows Defender 防火墙 点击“高级” 为您正在使用的端口创建新的入站规则并允许所有网络的连接