在纯 IPv6 网络环境下,宝塔面板的 Java 项目管理功能无法...
本帖最后由 宝塔用户_bkolhc 于 2025-2-27 11:59 编辑基本信息
[*]问题类型:功能性 BUG
[*]影响模块:Java 项目管理
[*]影响版本:9.4.0
[*]问题等级:中等
[*]环境依赖:纯 IPv6 网络环境
问题描述在纯 IPv6 网络环境下,宝塔面板的 Java 项目管理功能无法正常使用,会出现网络不可达错误。这是由于面板在进行网络检测时仅使用 IPv4 地址(8.8.8.8),导致在纯 IPv6 环境下无法建立连接。环境信息
[*]操作系统:Ubuntu 20.04.1 LTS (Focal Fossa) x86_64
[*]Python 版本:3.7.9
[*]宝塔面板版本:9.4.0
[*]网络环境:纯 IPv6,无 IPv4 地址配置
错误日志
REQUEST_DATE: 2025-02-17 07:26:11
VERSION: Ubuntu 20.04.1 LTS (Focal Fossa) x86_64(Py3.7.9) - 9.4.0
REMOTE_ADDR: 2409:895a:2437:11ab:c856:5147:f685:9efb
REQUEST_URI: POST /mod/java/project/project_list?
REQUEST_FORM: {'data': '{"search":"","p":1,"limit":10,"type_id":""}'}
USER_AGENT: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0
Traceback (most recent call last):
File "/www/server/panel/BTPanel/__init__.py", line 2541, in publicObject
res = run_obj.run(toObject, defs, get)
File "/www/server/panel/BTPanel/__init__.py", line 2488, in run
result = getattr(toObject, get.action)(get)
File "/www/server/panel/mod/modController.py", line 89, in model
raise public.PanelError(result['msg'])
public.PanelError: OSError: Network is unreachable
问题定位
[*]错误触发位置:
[*]文件路径:/www/server/panel/mod/project/java/springboot_parser.py
[*]调用链:public.get_network_ip() -> 尝试连接 8.8.8.8:80
[*]根本原因:
[*]网络检测方法仅支持 IPv4
[*]在纯 IPv6 环境下无法建立 IPv4 连接
[*]缺少 IPv6 备选方案
建议改进
[*]网络检测逻辑改进:
[*]优先使用 IPv6 地址(如 2001:4860:4860::8888)进行连接测试
[*]增加 IPv4/IPv6 双栈支持
[*]添加合适的失败回退机制
[*]代码修改建议:
def get_network_ip():
try:
# 优先尝试 IPv6 连接
s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
s.connect(('2001:4860:4860::8888', 80))
ip = s.getsockname()
s.close()
return ip
except:
try:
# 回退到 IPv4
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
ip = s.getsockname()
s.close()
return ip
except:
return '::1'# 返回 IPv6 回环地址
影响范围
[*]受影响的用户群:
[*]使用纯 IPv6 网络的服务器用户
[*]运行在 IPv6 优先网络环境的用户
[*]受影响的功能:
[*]Java 项目管理模块
[*]可能影响其他依赖网络检测的功能
页:
[1]