mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2025-12-07 09:36:05 -08:00
94 lines
3.4 KiB
Python
Executable File
94 lines
3.4 KiB
Python
Executable File
""" module to import db and leases from PiHole """
|
|
|
|
import sqlite3
|
|
|
|
import conf
|
|
from const import piholeDB, piholeDhcpleases
|
|
from logger import mylog
|
|
|
|
#-------------------------------------------------------------------------------
|
|
def copy_pihole_network (db):
|
|
"""
|
|
attach the PiHole Database and copy the PiHole_Network table accross into the PiAlert DB
|
|
"""
|
|
|
|
sql = db.sql # TO-DO
|
|
# Open Pi-hole DB
|
|
mylog('debug', '[PiHole Network] - attach PiHole DB')
|
|
|
|
try:
|
|
sql.execute ("ATTACH DATABASE '"+ piholeDB +"' AS PH")
|
|
except sqlite3.Error as e:
|
|
mylog('none',[ '[PiHole Network] - SQL ERROR: ', e])
|
|
|
|
|
|
# Copy Pi-hole Network table
|
|
|
|
try:
|
|
sql.execute ("DELETE FROM PiHole_Network")
|
|
|
|
# just for reporting
|
|
new_devices = []
|
|
sql.execute ( """SELECT hwaddr, macVendor, lastQuery,
|
|
(SELECT name FROM PH.network_addresses
|
|
WHERE network_id = id ORDER BY lastseen DESC, ip),
|
|
(SELECT ip FROM PH.network_addresses
|
|
WHERE network_id = id ORDER BY lastseen DESC, ip)
|
|
FROM PH.network
|
|
WHERE hwaddr NOT LIKE 'ip-%'
|
|
AND hwaddr <> '00:00:00:00:00:00' """)
|
|
new_devices = sql.fetchall()
|
|
|
|
# insert into PiAlert DB
|
|
sql.execute ("""INSERT INTO PiHole_Network (PH_MAC, PH_Vendor, PH_LastQuery,
|
|
PH_Name, PH_IP)
|
|
SELECT hwaddr, macVendor, lastQuery,
|
|
(SELECT name FROM PH.network_addresses
|
|
WHERE network_id = id ORDER BY lastseen DESC, ip),
|
|
(SELECT ip FROM PH.network_addresses
|
|
WHERE network_id = id ORDER BY lastseen DESC, ip)
|
|
FROM PH.network
|
|
WHERE hwaddr NOT LIKE 'ip-%'
|
|
AND hwaddr <> '00:00:00:00:00:00' """)
|
|
sql.execute ("""UPDATE PiHole_Network SET PH_Name = '(unknown)'
|
|
WHERE PH_Name IS NULL OR PH_Name = '' """)
|
|
# Close Pi-hole DB
|
|
sql.execute ("DETACH PH")
|
|
|
|
except sqlite3.Error as e:
|
|
mylog('none',[ '[PiHole Network] - SQL ERROR: ', e])
|
|
|
|
db.commitDB()
|
|
|
|
mylog('debug',[ '[PiHole Network] - completed - found ', len(new_devices), ' devices'])
|
|
return str(sql.rowcount) != "0"
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
#-------------------------------------------------------------------------------
|
|
def read_DHCP_leases (db):
|
|
"""
|
|
read the PiHole DHCP file and insert all records into the DHCP_Leases table.
|
|
"""
|
|
mylog('debug', '[PiHole DHCP] - read DHCP_Leases file')
|
|
# Read DHCP Leases
|
|
# Bugfix #1 - dhcp.leases: lines with different number of columns (5 col)
|
|
data = []
|
|
reporting = False
|
|
with open(piholeDhcpleases, 'r') as f:
|
|
for line in f:
|
|
reporting = True
|
|
row = line.rstrip().split()
|
|
if len(row) == 5 :
|
|
data.append (row)
|
|
|
|
# Insert into PiAlert table
|
|
db.sql.executemany ("""INSERT INTO DHCP_Leases (DHCP_DateTime, DHCP_MAC,
|
|
DHCP_IP, DHCP_Name, DHCP_MAC2)
|
|
VALUES (?, ?, ?, ?, ?)
|
|
""", data)
|
|
db.commitDB()
|
|
|
|
mylog('debug', ['[PiHole DHCP] - completed - added ',len(data), ' devices.'])
|
|
return reporting |