当前位置:论坛首页 > BUG提交 > Linux面板

在纯 IPv6 网络环境下,宝塔面板的 Java 项目管理功能无法...

发表在 BUG提交昨天 11:57 [复制链接] 0 33

本帖最后由 宝塔用户_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: [Errno 101] 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()[0]
        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()[0]
            s.close()
            return ip
        except:
            return '::1'  # 返回 IPv6 回环地址

影响范围
  • 受影响的用户群:

    • 使用纯 IPv6 网络的服务器用户
    • 运行在 IPv6 优先网络环境的用户

  • 受影响的功能:

    • Java 项目管理模块
    • 可能影响其他依赖网络检测的功能


使用道具 举报 只看该作者 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

立即付费处理

工作时间:09:00至24:00

快速回复 返回顶部 返回列表