| 
 
| 先说下我的环境是win11,使用wsl2 安装了 Ubuntu 22.04.1 LTS, 今天更新了宝塔11.2.0后出现了Internal Server Error,更新和修复面板都没用, 查了一下错误日志,发现是AttributeError: 'NoneType' object has no attribute 'split' 
 复制代码During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/www/server/panel/pyenv/lib/python3.7/site-packages/flask/app.py", line 2529, in wsgi_app
response = self.full_dispatch_request()
File "/www/server/panel/pyenv/lib/python3.7/site-packages/flask/app.py", line 1825, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/www/server/panel/pyenv/lib/python3.7/site-packages/flask/app.py", line 1669, in handle_user_exception
return self.handle_http_exception(e)
File "/www/server/panel/pyenv/lib/python3.7/site-packages/flask/app.py", line 1609, in handle_http_exception
return self.ensure_sync(handler)(e)
File "/www/server/panel/BTPanel/__init__.py", line 381, in error_404
return public.error_not_login()
File "class/public.py", line 5755, in error_not_login
client_status = check_client_info()
File "class/public.py", line 8272, in check_client_info
remote_addr = get_client_ip()
File "class/public.py", line 834, in get_client_ip
return GetClientIp()
File "class/public.py", line 807, in GetClientIp
forwarded_ips = request.headers.get('X-Forwarded-For').split(',')
AttributeError: 'NoneType' object has no attribute 'split'
 临时解决方案:
 先备份,然后找到\www\server\panel\class\public.py 的 GetClientIp 方法
 直接覆盖
 
 def GetClientIp():
 from flask import request
 ipaddr = request.remote_addr
 if ipaddr:
 ipaddr = ipaddr.replace('::ffff:', '')
 if ipaddr in ('127.0.0.1', '::1', "localhost"): # 仅信任本地代理,在本地代理时,认为是开启了免端口访问
 x_forwarded_for = request.headers.get('X-Forwarded-For')
 if x_forwarded_for:  # 添加检查,确保 X-Forwarded-For 不为 None
 forwarded_ips = x_forwarded_for.split(',')
 if len(forwarded_ips) > 0:
 ipaddr = forwarded_ips[-1]
 elif "X-Real-Ip" in request.headers:
 ipaddr = request.headers.get('X-Real-Ip')
 
 if not isinstance(ipaddr, str):
 return '未知IP地址'
 
 ipaddr = ipaddr.replace('::ffff:', '')
 
 if not check_ip(ipaddr): return '未知IP地址'
 return ipaddr
 
 
 
 
 
 | 
 |