feat: resolve recon device manufacturers locally

This commit is contained in:
2026-08-21 08:15:21 -05:00
parent d149cb13fd
commit 797db1816a
2 changed files with 93 additions and 0 deletions
+52
View File
@@ -896,6 +896,58 @@ class OuiVendorTest(unittest.TestCase):
self.assertEqual(server.oui_vendor(None), 'Unknown')
self.assertEqual(server.oui_vendor('--'), 'Unknown')
def test_oui_identity_prefers_nmap_then_macchanger(self):
server._oui_identity_cache = None
files = {
'/nmap': 'C89E43 Apple Corporation\n',
'/mac': 'C89E43 fallback\n',
}
with mock.patch.object(server, 'OUI_DATA_PATHS', ['/nmap', '/mac']), \
mock.patch('builtins.open', side_effect=lambda p, *a, **k:
mock.mock_open(read_data=files[p]).return_value):
value = server.oui_identity('C89E43648080')
self.assertEqual(value['manufacturer'], 'Apple Corporation')
self.assertEqual(value['source'], 'nmap')
self.assertIsNone(value['model'])
def test_oui_identity_uses_macchanger_when_nmap_is_missing(self):
server._oui_identity_cache = None
files = {'/mac': 'C8-9E-43 fallback\n'}
def open_file(path, *args, **kwargs):
if path not in files:
raise OSError('missing')
return mock.mock_open(read_data=files[path]).return_value
with mock.patch.object(server, 'OUI_DATA_PATHS', ['/nmap', '/mac']), \
mock.patch('builtins.open', side_effect=open_file):
value = server.oui_identity('C89E43648080')
self.assertEqual(value['manufacturer'], 'fallback')
self.assertEqual(value['source'], 'macchanger')
def test_oui_identity_handles_missing_files_unknown_and_local(self):
server._oui_identity_cache = None
with mock.patch.object(server, 'OUI_DATA_PATHS', ['/missing']), \
mock.patch('builtins.open', side_effect=OSError('missing')):
unknown = server.oui_identity('AC:BB:CC:00:00:01')
self.assertEqual(unknown['manufacturer'], 'Unknown')
self.assertEqual(unknown['source'], 'unknown')
self.assertEqual(unknown['oui'], 'ACBBCC')
self.assertIsNone(unknown['model'])
local = server.oui_identity('02:11:22:33:44:55')
self.assertEqual(local['manufacturer'], 'Local/Randomized')
self.assertEqual(local['source'], 'local')
self.assertEqual(local['oui'], '021122')
def test_oui_identity_falls_back_to_builtin_vendors(self):
server._oui_identity_cache = None
with mock.patch.object(server, 'OUI_DATA_PATHS', []):
value = server.oui_identity('B8:27:EB:00:00:00')
self.assertEqual(value['manufacturer'], 'Raspberry Pi')
self.assertEqual(value['source'], 'builtin')
self.assertIsNone(value['model'])
def test_band_of_frequencies(self):
self.assertEqual(server.band_of(2412), '2.4')
self.assertEqual(server.band_of(5200), '5')