diff --git a/src/webui/webui_server.py b/src/webui/webui_server.py index bf6b404d..6e6bff0e 100644 --- a/src/webui/webui_server.py +++ b/src/webui/webui_server.py @@ -201,9 +201,21 @@ class WebUIServer: self._server = UvicornServer(config=config) logger.info("🌐 WebUI 服务器启动中...") - logger.info(f"🌐 访问地址: http://{self.host}:{self.port}") - if self.host == "0.0.0.0": - logger.info(f"本机访问请使用 http://localhost:{self.port}") + + # 根据地址类型显示正确的访问地址 + if ':' in self.host: + # IPv6 地址需要用方括号包裹 + logger.info(f"🌐 访问地址: http://[{self.host}]:{self.port}") + if self.host == "::": + logger.info(f"💡 IPv6 本机访问: http://[::1]:{self.port}") + logger.info(f"💡 IPv4 本机访问: http://127.0.0.1:{self.port}") + elif self.host == "::1": + logger.info(f"💡 仅支持 IPv6 本地访问") + else: + # IPv4 地址 + logger.info(f"🌐 访问地址: http://{self.host}:{self.port}") + if self.host == "0.0.0.0": + logger.info(f"💡 本机访问: http://localhost:{self.port} 或 http://127.0.0.1:{self.port}") try: await self._server.serve() @@ -221,14 +233,24 @@ class WebUIServer: raise def _check_port_available(self) -> bool: - """检查端口是否可用""" + """检查端口是否可用(支持 IPv4 和 IPv6)""" import socket + # 判断使用 IPv4 还是 IPv6 + if ':' in self.host: + # IPv6 地址 + family = socket.AF_INET6 + test_host = self.host if self.host != "::" else "::1" + else: + # IPv4 地址 + family = socket.AF_INET + test_host = self.host if self.host != "0.0.0.0" else "127.0.0.1" + try: - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + with socket.socket(family, socket.SOCK_STREAM) as s: s.settimeout(1) # 尝试绑定端口 - s.bind((self.host if self.host != "0.0.0.0" else "127.0.0.1", self.port)) + s.bind((test_host, self.port)) return True except OSError: return False diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index 50a44071..f8e3c889 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -262,6 +262,9 @@ enable = true enabled = true # 是否启用WebUI mode = "production" # 模式: development(开发) 或 production(生产) host = "127.0.0.1" # WebUI 服务器监听地址 + # IPv4: 0.0.0.0 (所有IPv4接口) / 127.0.0.1 (仅本地) + # IPv6: :: (所有接口,支持IPv4+IPv6双栈) / ::1 (仅本地IPv6) + # 推荐使用 :: 实现双栈支持 port = 8001 # WebUI 服务器端口 # 防爬虫配置