first commit

This commit is contained in:
2026-08-23 09:52:32 +02:00
commit 1a7ed8ef94
94 changed files with 10489 additions and 0 deletions
+65
View File
@@ -0,0 +1,65 @@
import tempfile
import unittest
from pathlib import Path
from librenet_scanner.diagnostics import arp_scan_succeeded, parse_getcap_output
from librenet_scanner.network import parse_neighbor_json
from librenet_scanner.vendors import load_vendor_table, lookup_mac_vendor, parse_vendor_text
class NeighborTests(unittest.TestCase):
def test_neighbor_json_filters_unusable_entries(self):
payload = r'''[
{"dst":"192.168.10.2","lladdr":"aa:bb:cc:dd:ee:ff","state":["REACHABLE"]},
{"dst":"192.168.10.3","lladdr":"11:22:33:44:55:66","state":["STALE"]},
{"dst":"192.168.10.4","state":["INCOMPLETE"]},
{"dst":"192.168.10.5","lladdr":"bad-mac","state":["REACHABLE"]}
]'''
entries = parse_neighbor_json(payload)
self.assertEqual(len(entries), 2)
self.assertEqual(entries[0].ip, "192.168.10.2")
self.assertEqual(entries[0].mac, "AA:BB:CC:DD:EE:FF")
self.assertEqual(entries[1].state, "STALE")
def test_invalid_neighbor_json_is_empty(self):
self.assertEqual(parse_neighbor_json("not-json"), [])
class VendorTests(unittest.TestCase):
def test_parse_common_oui_formats(self):
text = '''
# comment
00-11-22 (hex) Example Networks
001122 (base 16) Example Networks Base
AA:BB:CC Another Vendor
AABBCCDDEE Precise Vendor
'''
table = parse_vendor_text(text)
self.assertEqual(table["001122"], "Example Networks Base")
self.assertEqual(table["AABBCC"], "Another Vendor")
self.assertEqual(table["AABBCCDDEE"], "Precise Vendor")
def test_load_vendor_table(self):
with tempfile.TemporaryDirectory() as tmp:
p1 = Path(tmp) / "oui.txt"
p2 = Path(tmp) / "mac-vendor.txt"
p1.write_text("AABBCC Vendor Generic\n")
p2.write_text("AABBCCDDEE Vendor Precise\n")
table = load_vendor_table((p1, p2))
self.assertEqual(table["AABBCC"], "Vendor Generic")
self.assertEqual(table["AABBCCDDEE"], "Vendor Precise")
class DiagnosticTests(unittest.TestCase):
def test_getcap_parser(self):
self.assertTrue(parse_getcap_output("/usr/sbin/arp-scan cap_net_raw=p\n"))
self.assertFalse(parse_getcap_output(""))
def test_arp_scan_exit_code(self):
self.assertTrue(arp_scan_succeeded(0))
self.assertFalse(arp_scan_succeeded(1))
self.assertFalse(arp_scan_succeeded(2))
if __name__ == "__main__":
unittest.main()