| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #!/usr/bin/env python3
- """Placeholder helpers: detect TEST-NET, load_botnet_file flags, warn_placeholders per kind."""
- import sys, os, tempfile
- err = []
- from core._botnet import is_placeholder, load_botnet_file, warn_placeholders, GUIDANCE, PLACEHOLDER_NETS
- if not (str(PLACEHOLDER_NETS[0]) == "203.0.113.0/24"):
- err.append("PLACEHOLDER_NETS missing TEST-NET-3")
- cases = [
- ("203.0.113.5", True),
- ("192.0.2.1", True),
- ("198.51.100.99", True),
- ("8.8.8.8", False),
- ("https://example.com/", False),
- ("https://203.0.113.1/path", True),
- ("203.0.113.1:11211", True),
- ("", True),
- ]
- for entry, expected in cases:
- got = is_placeholder(entry)
- if got != expected:
- err.append(f"is_placeholder({entry!r}) = {got}, expected {expected}")
- with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False) as f:
- f.write("")
- empty_path = f.name
- entries, empty, all_ph = load_botnet_file(empty_path)
- if not empty or entries:
- err.append(f"empty file: empty={empty}, entries={entries}")
- with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False) as f:
- f.write("203.0.113.10\n203.0.113.11\n")
- ph_path = f.name
- entries, empty, all_ph = load_botnet_file(ph_path)
- if empty or not all_ph or len(entries) != 2:
- err.append(f"all-placeholders: empty={empty}, all_ph={all_ph}, entries={entries}")
- with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False) as f:
- f.write("8.8.8.8\n203.0.113.99\n")
- mix_path = f.name
- entries, empty, all_ph = load_botnet_file(mix_path)
- if empty or all_ph or len(entries) != 2:
- err.append(f"mixed: empty={empty}, all_ph={all_ph}, entries={entries}")
- for kind in ["open-redirect", "dns", "ntp", "snmp", "memcached", "cldap",
- "ssdp", "qotd", "tftp", "wsdisco", "coap", "mssql",
- "arms", "plex", "netbios", "ripv1", "middlebox", "chargen", "reflector"]:
- if kind not in GUIDANCE:
- err.append(f"missing GUIDANCE for kind: {kind}")
- os.unlink(empty_path); os.unlink(ph_path); os.unlink(mix_path)
- print(f"placeholder cases: {len(cases) - len(err)} / {len(cases)}")
- print(f"GUIDANCE entries: {len(GUIDANCE)}")
- for e in err:
- print("FAIL:", e)
- sys.exit(0 if not err else 1)
|