66 lines
3.0 KiB
Python
66 lines
3.0 KiB
Python
import unittest
|
|
from pathlib import Path
|
|
from unittest.mock import patch
|
|
|
|
from librenet_scanner.fastscan import parse_naabu_json_line
|
|
from librenet_scanner.privileged_helper import command_for
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
|
|
|
|
class NaabuParser0418Tests(unittest.TestCase):
|
|
def test_jsonl_port_becomes_librenet_host(self):
|
|
host = parse_naabu_json_line('{"ip":"192.168.10.20","port":8006}')
|
|
self.assertIsNotNone(host)
|
|
self.assertEqual(host.ip, "192.168.10.20")
|
|
self.assertEqual(host.ports[0].port, 8006)
|
|
self.assertEqual(host.ports[0].service, "Proxmox VE")
|
|
self.assertEqual(host.device_type, "Hyperviseur Proxmox")
|
|
|
|
def test_invalid_json_is_ignored(self):
|
|
self.assertIsNone(parse_naabu_json_line("[INF] starting scan"))
|
|
self.assertIsNone(parse_naabu_json_line('{"ip":"not-an-ip","port":443}'))
|
|
self.assertIsNone(parse_naabu_json_line('{"ip":"192.168.1.2","port":70000}'))
|
|
|
|
|
|
class NaabuPrivilege0418Tests(unittest.TestCase):
|
|
def test_privileged_naabu_uses_fixed_syn_profile(self):
|
|
with patch("librenet_scanner.privileged_helper._trusted_binary", return_value="/usr/local/bin/naabu"):
|
|
cmd = command_for("naabu-standard", ["192.168.10.10", "192.168.10.11"])
|
|
self.assertEqual(cmd[0], "/usr/local/bin/naabu")
|
|
self.assertIn("-scan-type", cmd)
|
|
self.assertEqual(cmd[cmd.index("-scan-type") + 1], "s")
|
|
self.assertIn("-json", cmd)
|
|
self.assertIn("-disable-update-check", cmd)
|
|
self.assertEqual(cmd[cmd.index("-config") + 1], "/dev/null")
|
|
self.assertIn("192.168.10.10,192.168.10.11", cmd)
|
|
|
|
def test_privileged_naabu_rejects_network_in_host_list(self):
|
|
with patch("librenet_scanner.privileged_helper._trusted_binary", return_value="/usr/local/bin/naabu"):
|
|
with self.assertRaises(ValueError):
|
|
command_for("naabu-standard", ["192.168.10.0/24"])
|
|
|
|
|
|
class Pipeline0418Tests(unittest.TestCase):
|
|
def test_standard_and_deep_signatures_changed(self):
|
|
text = (ROOT / "src/librenet_scanner/scanner.py").read_text(encoding="utf-8")
|
|
self.assertIn('standard-v9:adaptive-nmap-small-naabu-large:', text)
|
|
self.assertIn('deep-v10:adaptive-standard-baseline-nmap-enrichment:', text)
|
|
|
|
def test_standard_uses_fast_engine_with_nmap_fallback(self):
|
|
text = (ROOT / "src/librenet_scanner/scanner.py").read_text(encoding="utf-8")
|
|
self.assertIn("if len(ips) < NAABU_ACTIVE_HOST_THRESHOLD", text)
|
|
self.assertIn("port_hosts = self._naabu_ports", text)
|
|
self.assertIn('args = privileged_command("nmap-standard", *ips)', text)
|
|
self.assertIn('"nmap", "-Pn", "-n", "-sT"', text)
|
|
|
|
def test_deep_keeps_nmap_service_and_os_enrichment(self):
|
|
text = (ROOT / "src/librenet_scanner/scanner.py").read_text(encoding="utf-8")
|
|
self.assertIn('privileged_command("nmap-deep-hosts", *ips)', text)
|
|
self.assertIn('"-sV"', text)
|
|
self.assertIn('"--top-ports", "1000"', text)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|