localhost:<port>可以工作,但<WSL_IP>:<port>不起作用

问题描述 投票:0回答:1

我制作了一个简单的脚本,并在 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>
访问它时,它不起作用。
该问题与端口和脚本无关,因为我尝试在多个端口上运行它。我还在 WSL 上运行了具有公开端口的其他应用程序。但它们都不起作用。

我尝试设置一些入站规则,但仍然不起作用。
我尝试在命令提示符下

curl
但效果不佳。
我多次尝试卸载 ubuntu 并重新安装,但效果并不好。

这里发生了什么?

configuration windows-subsystem-for-linux
1个回答
0
投票

这里有很多建议

可能与 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 防火墙 点击“高级” 为您正在使用的端口创建新的入站规则并允许所有网络的连接

© www.soinside.com 2019 - 2024. All rights reserved.