[求助] 0.0.0.0 和 127.0.0.1 端口监听问题

在 win10 中安装了一个 wsl2, 并且在 wsl2 中部署了一个 mysql5.7
结果在 win10 中也能正常访问 3306 端口进入 mysql5.7

在 win10 上输入 netstat -ano | findstr 3306 得到了
在这里插入图片描述
可以看到,这个就是 wls2 中的 mysql5.7, 就比较奇怪,3306端口直接穿透到了win10中

于是想,如果再在 win10 中部署一个 mysql, 按道理说应该会端口冲突无法启动,结果在 win10 上下载了一个 mysql8.0 并部署,竟然成功了。
在这里插入图片描述
红色的是刚才那个 wsl2 的 mysql5.7 , 第一个是 win10 的 mysql8.0

很奇怪为什么都是 3306 ,没有造成冲突呢?在 win10 用客户端默认连接的是本地的 mysql8.0 , 如果停服,则连接的是 wsl2 的 mysql5.7,就非常奇怪。

已知:127.0.0.1 只能本机访问的地址, 0.0.0.0 是所有网络都能访问的地址。

求玩过 wsl2 的大佬请指点。

### Java 应用程序中获取 IP 地址 当应用程序运行于本地环境时,可能会遇到获取到 `0:0:0:0:0:0:0:1`(即 IPv6 的回环地址)而非预期中的 `127.0.0.1` (IPv4 回环地址)[^1]。这种情况通常发生在以下几个方面: - **网络配置差异**:现代操作系统默认启用 IPv6 支持,因此即使未显式配置 IPv6 地址,也可能存在一个自动分配的链接本地地址或回环地址。 - **浏览器行为不同**:某些情况下,特别是开发环境中,浏览器可能优先选择 IPv6 协议栈来发起请求。 对于具体实现而言,假设有一个名为 `IpUtils` 工具类用于提取远程主机 IP 地址,则其内部逻辑可能是基于 Servlet API 来读取 HTTP 请求头字段如 `X-Forwarded-For`, `WL-Proxy-Client-IP` 等以确定最终来源 IP[^2]。然而,在测试环境下,由于缺乏实际代理转发过程,这些头部信息往往为空;此时,默认返回的是服务器自身的回环地址作为 fallback 结果。 ```java public class IpUtils { public static String getIpAddress(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); // WebLogic specific header } if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; } } ``` 上述代码片段展示了如何尝试从多个常见的 HTTP 头部中解析出真实的客户端 IP 地址。但在没有外部流量进入的情况下,调用 `request.getRemoteAddr()` 将仅能获得来自同一台机器上进程间通信所使用的回环接口地址——这便是为何有时会看到类似于 `::1`(IPv6) 或 `127.0.0.1`(IPv4)的结果[^3]。 为了确保始终能够得到期望格式的回环地址 (`127.0.0.1`) ,可以考虑修改应用设置使其强制使用 IPv4 协议栈处理入站连接,或者调整工具方法使之兼容多种情况下的合理输出形式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值