mirror of
https://github.com/Horizontal42/netsleuth.git
synced 2026-11-10 21:32:04 +03:00
dns_leak: russian note alongside english
This commit is contained in:
parent
9e5ea923aa
commit
4c2da2e831
2 changed files with 47 additions and 1 deletions
|
|
@ -8,6 +8,10 @@ _LEAK_NOTE = (
|
|||
"This test only sees resolvers configured at the OS level. A browser using DoH "
|
||||
"or DoT bypasses them entirely and is not covered here."
|
||||
)
|
||||
_LEAK_NOTE_RU = (
|
||||
"Этот тест видит только резолверы, настроенные на уровне ОС. Браузер, использующий DoH "
|
||||
"или DoT, полностью обходит их и здесь не учитывается."
|
||||
)
|
||||
|
||||
|
||||
def _unquote(text: str) -> str:
|
||||
|
|
@ -66,16 +70,28 @@ def build_adapter_result(
|
|||
def build_dns_leak(results: list[AdapterLeakResult], ecs_leaked: bool) -> DnsLeak:
|
||||
leaking = [r.adapter for r in results if r.matches_egress_asn is False]
|
||||
parts: list[str] = []
|
||||
parts_ru: list[str] = []
|
||||
if leaking:
|
||||
parts.append(
|
||||
f"DNS queries from {', '.join(leaking)} resolve through a network outside the egress ASN."
|
||||
)
|
||||
parts_ru.append(
|
||||
f"DNS-запросы с {', '.join(leaking)} разрешаются через сеть за пределами egress ASN."
|
||||
)
|
||||
else:
|
||||
parts.append("No adapter resolves DNS outside the egress ASN.")
|
||||
parts_ru.append("Ни один адаптер не резолвит DNS за пределами egress ASN.")
|
||||
if ecs_leaked:
|
||||
parts.append("The resolver forwards your EDNS Client Subnet, exposing your network to authoritative servers.")
|
||||
parts_ru.append("Резолвер пересылает ваш EDNS Client Subnet, раскрывая вашу сеть авторитативным серверам.")
|
||||
parts.append(_LEAK_NOTE)
|
||||
return DnsLeak(per_adapter=results, ecs_leaked=ecs_leaked, note=" ".join(parts))
|
||||
parts_ru.append(_LEAK_NOTE_RU)
|
||||
return DnsLeak(
|
||||
per_adapter=results,
|
||||
ecs_leaked=ecs_leaked,
|
||||
note=" ".join(parts),
|
||||
note_ru=" ".join(parts_ru),
|
||||
)
|
||||
|
||||
|
||||
import asyncio
|
||||
|
|
|
|||
|
|
@ -93,3 +93,33 @@ def test_dns_leak_note_mentions_ecs_when_the_subnet_leaked():
|
|||
leak = build_dns_leak([clean], ecs_leaked=True)
|
||||
assert leak.ecs_leaked is True
|
||||
assert "client subnet" in leak.note.lower()
|
||||
|
||||
|
||||
_CYRILLIC = set("абвгдеёжзийклмнопрстуфхцчшщъыьэюя")
|
||||
|
||||
|
||||
def has_cyrillic(text: str) -> bool:
|
||||
return any(ch in _CYRILLIC for ch in text.lower())
|
||||
|
||||
|
||||
def test_dns_leak_note_ru_names_the_leaking_adapter():
|
||||
leaking = build_adapter_result("Wi-Fi", ["192.168.1.1"], "203.0.113.9", "AS64501", "AS64500")
|
||||
clean = build_adapter_result("wg0", ["10.7.0.1"], "203.0.113.44", "AS64500", "AS64500")
|
||||
leak = build_dns_leak([clean, leaking], ecs_leaked=False)
|
||||
assert leak.note_ru
|
||||
assert has_cyrillic(leak.note_ru)
|
||||
assert "Wi-Fi" in leak.note_ru
|
||||
|
||||
|
||||
def test_dns_leak_note_ru_is_clean_when_every_adapter_agrees():
|
||||
clean = build_adapter_result("wg0", ["10.7.0.1"], "203.0.113.44", "AS64500", "AS64500")
|
||||
leak = build_dns_leak([clean], ecs_leaked=False)
|
||||
assert leak.note_ru
|
||||
assert has_cyrillic(leak.note_ru)
|
||||
|
||||
|
||||
def test_dns_leak_note_ru_mentions_ecs_when_the_subnet_leaked():
|
||||
clean = build_adapter_result("wg0", ["10.7.0.1"], "203.0.113.44", "AS64500", "AS64500")
|
||||
leak = build_dns_leak([clean], ecs_leaked=True)
|
||||
assert leak.note_ru
|
||||
assert has_cyrillic(leak.note_ru)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue