This commit is contained in:
2026-09-14 13:04:56 +08:00
parent 97c24f58c7
commit 09f2c077d5
3 changed files with 33 additions and 71 deletions
+33
View File
@@ -0,0 +1,33 @@
"""utils/ip.py 客户端IP获取测试。"""
import types
from utils.ip import get_client_ip
def _make_request(client_host, xff=None):
"""构造模拟 Request 对象。"""
req = types.SimpleNamespace()
req.client = types.SimpleNamespace(host=client_host)
req.headers = {'X-Forwarded-For': xff} if xff else {}
return req
def test_xff_single_ip():
"""XFF 只有一个 IP → 直接返回"""
assert get_client_ip(_make_request('10.0.0.1', xff='1.2.3.4')) == '1.2.3.4'
def test_xff_multiple_ips_returns_leftmost():
"""XFF 多个 IP → 取最左侧(真实客户端 IP)"""
assert get_client_ip(_make_request('10.0.0.1', xff='1.2.3.4, 10.0.0.1')) == '1.2.3.4'
def test_no_xff_falls_back_to_client_host():
"""无 XFF 头 → 回退到 request.client.host"""
assert get_client_ip(_make_request('203.0.113.9')) == '203.0.113.9'
def test_no_client_falls_back_to_localhost():
"""client 为 None → 回退到 127.0.0.1"""
req = types.SimpleNamespace(client=None, headers={})
assert get_client_ip(req) == '127.0.0.1'