mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2025-12-07 01:26:11 -08:00
103 lines
3.1 KiB
Python
Executable File
103 lines
3.1 KiB
Python
Executable File
|
|
import subprocess
|
|
|
|
from const import pialertPath, vendorsDB
|
|
from helper import timeNow, updateState
|
|
from logger import mylog
|
|
|
|
|
|
#===============================================================================
|
|
# UPDATE DEVICE MAC VENDORS
|
|
#===============================================================================
|
|
|
|
|
|
|
|
def update_devices_MAC_vendors (db, pArg = ''):
|
|
sql = db.sql # TO-DO
|
|
# Header
|
|
updateState(db,"Upkeep: Vendors")
|
|
mylog('verbose', ['[', timeNow(), '] Upkeep - Update HW Vendors:' ])
|
|
|
|
# Update vendors DB (iab oui)
|
|
mylog('verbose', [' Updating vendors DB (iab & oui)'])
|
|
update_args = ['sh', pialertPath + '/update_vendors.sh', pArg]
|
|
|
|
try:
|
|
# try runnning a subprocess
|
|
update_output = subprocess.check_output (update_args)
|
|
except subprocess.CalledProcessError as e:
|
|
# An error occured, handle it
|
|
mylog('none', [' FAILED: Updating vendors DB, set LOG_LEVEL=debug for more info'])
|
|
mylog('none', [e.output])
|
|
|
|
# Initialize variables
|
|
recordsToUpdate = []
|
|
ignored = 0
|
|
notFound = 0
|
|
|
|
# All devices loop
|
|
mylog('verbose', [' Searching devices vendor'])
|
|
for device in sql.execute ("""SELECT * FROM Devices
|
|
WHERE dev_Vendor = '(unknown)'
|
|
OR dev_Vendor =''
|
|
OR dev_Vendor IS NULL""") :
|
|
# Search vendor in HW Vendors DB
|
|
vendor = query_MAC_vendor (device['dev_MAC'])
|
|
if vendor == -1 :
|
|
notFound += 1
|
|
elif vendor == -2 :
|
|
ignored += 1
|
|
else :
|
|
recordsToUpdate.append ([vendor, device['dev_MAC']])
|
|
|
|
# Print log
|
|
mylog('verbose', [" Devices Ignored: ", ignored])
|
|
mylog('verbose', [" Vendors Not Found:", notFound])
|
|
mylog('verbose', [" Vendors updated: ", len(recordsToUpdate) ])
|
|
|
|
|
|
# update devices
|
|
sql.executemany ("UPDATE Devices SET dev_Vendor = ? WHERE dev_MAC = ? ",
|
|
recordsToUpdate )
|
|
|
|
# Commit DB
|
|
db.commitDB()
|
|
|
|
if len(recordsToUpdate) > 0:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
#-------------------------------------------------------------------------------
|
|
def query_MAC_vendor (pMAC):
|
|
try :
|
|
# BUGFIX #6 - Fix pMAC parameter as numbers
|
|
pMACstr = str(pMAC)
|
|
|
|
# Check MAC parameter
|
|
mac = pMACstr.replace (':','')
|
|
if len(pMACstr) != 17 or len(mac) != 12 :
|
|
return -2
|
|
|
|
# Search vendor in HW Vendors DB
|
|
mac = mac[0:6]
|
|
grep_args = ['grep', '-i', mac, vendorsDB]
|
|
# Execute command
|
|
try:
|
|
# try runnning a subprocess
|
|
grep_output = subprocess.check_output (grep_args)
|
|
except subprocess.CalledProcessError as e:
|
|
# An error occured, handle it
|
|
mylog('none', ["[Mac Vendor Check] Error: ", e.output])
|
|
grep_output = " There was an error, check logs for details"
|
|
|
|
# Return Vendor
|
|
vendor = grep_output[7:]
|
|
vendor = vendor.rstrip()
|
|
return vendor
|
|
|
|
# not Found
|
|
except subprocess.CalledProcessError :
|
|
return -1
|
|
|