83 lines
2.4 KiB
Python
83 lines
2.4 KiB
Python
"""
|
|
Importeer scanresultaten naar Neo4j.
|
|
|
|
Gebruik:
|
|
python import_to_neo4j.py
|
|
python import_to_neo4j.py --password jouw_wachtwoord
|
|
"""
|
|
|
|
import sys
|
|
import logging
|
|
import os
|
|
|
|
logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def main():
|
|
# Password via CLI argument of env var
|
|
password = os.getenv("NEO4J_PASSWORD", "")
|
|
if "--password" in sys.argv:
|
|
idx = sys.argv.index("--password")
|
|
if idx + 1 < len(sys.argv):
|
|
password = sys.argv[idx + 1]
|
|
if not password:
|
|
print("Geef Neo4j wachtwoord mee: NEO4J_PASSWORD=... python import_to_neo4j.py")
|
|
print("Of: python import_to_neo4j.py --password jouw_wachtwoord")
|
|
sys.exit(1)
|
|
|
|
os.environ["NEO4J_PASSWORD"] = password
|
|
|
|
from src.neo4j_client import init_schema, import_scan, get_all_devices, get_network_summary, close
|
|
from src.scan_data import SCAN_RESULTS
|
|
|
|
print("=" * 60)
|
|
print("Neo4j Thuisnetwerk Import")
|
|
print("=" * 60)
|
|
|
|
# Init
|
|
try:
|
|
init_schema()
|
|
except Exception as e:
|
|
logger.error("Kan geen verbinding maken met Neo4j: %s", e)
|
|
logger.error("Check of Neo4j draait op neo4j://192.168.1.211:49153")
|
|
sys.exit(1)
|
|
|
|
# Import
|
|
print(f"\nImporteren van {len(SCAN_RESULTS)} devices...")
|
|
try:
|
|
summary = import_scan(SCAN_RESULTS)
|
|
print(f"\n{summary}")
|
|
except Exception as e:
|
|
logger.error("Import fout: %s", e)
|
|
close()
|
|
sys.exit(1)
|
|
|
|
# Toon resultaten
|
|
print("\n" + "-" * 60)
|
|
network_summary = get_network_summary()
|
|
print(f"Database: {network_summary['total_devices']} devices, "
|
|
f"{network_summary['total_ports']} unieke poorten")
|
|
|
|
devices = get_all_devices()
|
|
print(f"\n{'IP':<16} {'Naam':<32} {'OS':<28} {'Poorten'}")
|
|
print("-" * 90)
|
|
for d in devices:
|
|
ports = d.get("ports") or []
|
|
port_str = ", ".join(str(p["port"]) for p in ports if p and p.get("port"))
|
|
print(f"{d['ip']:<16} {d['hostname'][:31]:<32} {d['os_guess'][:27]:<28} {port_str}")
|
|
|
|
# Categorieen
|
|
print(f"\n--- Categorieen ---")
|
|
from collections import Counter
|
|
cats = Counter(d["os_guess"] for d in devices)
|
|
for cat, count in cats.most_common():
|
|
print(f" {cat:<40} {count}x")
|
|
|
|
close()
|
|
print("\nKlaar! Je netwerk staat nu in Neo4j.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|