Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Was ist in meinen Netzwerk los?

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    705

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    5.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

Was ist in meinen Netzwerk los?

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
security
1 Beiträge 1 Kommentatoren 197 Aufrufe 4 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • sissiwupS Offline
    sissiwupS Offline
    sissiwup
    schrieb am zuletzt editiert von sissiwup
    #1

    Hallo,
    ich möchte gerne wissen, was in meinen Netzwerk los ist, d.h. wann kommt ein neues Devices hinzu, wann wird eine neue IP-Adresse generiert etc.
    Ich generiere mir bei neuen devices eine Push-Nachricht.

    Bildschirmfoto 2019-11-08 um 16.02.14.png

    Bildschirmfoto 2019-11-08 um 16.02.31.png

    Bildschirmfoto 2019-11-08 um 16.02.55.png

    Dafür braucht mein ein wenig Skript (hier python):

    from getmac import get_mac_address
    import csv
    import socket
    import pandas as pd
    import threading
    import datetime
    import os
    import requests
    
    akt = datetime.datetime.now()
    
    
    def get_vendor(mac):
        sst = mac[0:8]
        name = names.get(sst)
        if name is None:
            return "? => ?"
        return name
    
    
    def pushOver(txt):
        title = "Geraet ! "
        message = "Neues Geraet im Haus \n" + txt + "\n" + akt.strftime("%Y-%m-%d %H:%M:%S") + " !"
        r = requests.post("https://api.pushover.net/1/messages.json", data={
            "token": "--token--",
            "user": "--user--",
            "title": title,
            "message": message,
            "priority": 1
        })
    
    
    names = {}
    
    with open('oui.csv') as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=',')
        for ar in csv_reader:
            search = ar[1][0:2] + ":" + ar[1][2:4] + ":" + ar[1][4:6]
            search = search.lower()
            names[search] = ar[2] + " => " + ar[3]
    
    aktip = {}
    macetc = {}
    allmac = {}
    with open('my.csv') as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=',')
        for ar in csv_reader:
            aktip[ar[0]] = ar[1]
            macetc[ar[1]] = ar
    
    with open('mymac.csv') as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=',')
        for ar in csv_reader:
            allmac[ar[0]] = ar
    
    
    class ip_check(threading.Thread):
        def __init__(self, ip):
            threading.Thread.__init__(self)
            self.ip = ip
            self.__name = ""
            self.__company = ""
            self.__mac = ""
            self.__newdev = True
            self.__newip = True
            self.__newmac = True
            self.__newipmac = True
    
        def run(self):
            self.__mac = get_mac_address(ip=self.ip)
            if (self.__mac is not None) and (self.__mac != "00:00:00:00:00:00"):
                self.__company = get_vendor(self.__mac)
                try:
                    self.__name = socket.gethostbyaddr(self.ip)[0]
                except:
                    self.__name = "?.local"
                smac = aktip.get(self.ip)
                if smac is not None:
                    self.__newdev = False
                    self.__newip = False
                    if smac == self.__mac:
                        self.__newipmac = False
                line = allmac.get(self.__mac)
                if line is not None:
                    self.__newmac = False
                    if line[3] == self.ip:
                        self.__newipmac = False
                        self.__newip = False
    
        def status(self):
            if self.found():
                return "" + self.ip + " " + self.__mac + " " + self.__name + " " + self.__company
    
            else:
                return "?"
    
        def getLanList(self):
            if self.found():
                txt = self.ip + " " + self.__name
                txt = txt + " " + self.__name.split(".")[0]
    
                return txt
            else:
                return ""
    
        def devStat(self):
            stat = "old mac+ip";
            if self.__newdev:
                stat = "new       "
            if self.__newmac:
                stat = "new mac   "
                if self.__newip:
                    stat = "new mac+ip"
            else:
                if self.__newip:
                    stat = "new     ip"
            return stat
    
        def devOk(self):
            return self.devStat() == "old mac+ip"
    
        def doPush(self):
            if self.devStat() == "new mac   ":
                return True
            if self.devStat() == "new mac+ip":
                return True
            return False
    
        def getmac(self):
            return self.__mac
    
        def getcsv(self):
            if self.found():
                return [self.ip, self.__mac, self.__name, self.__company]
            else:
                return []
    
        def getAllMac(self):
            if self.found():
                return [self.__mac, self.__name, self.__company, self.ip]
            else:
                return []
    
        def found(self):
            if (self.__mac is None) or (self.__mac == "00:00:00:00:00:00"):
                return False
            else:
                return True
    
    
    check_results = []
    for i in range(1, 255):
        ip = "192.168.1." + str(i)
        ipp = "192.168.1." + ("000" + str(i))[-3:]
        current = ip_check(ip)
        check_results.append(current)
        current.start()
    
    with open('my.csv', 'w') as csv_file:
        csv_writer = csv.writer(csv_file, delimiter=',', quoting=csv.QUOTE_ALL)
        for el in check_results:
            el.join()
            if el.found():
                allmac[el.getmac()] = el.getAllMac()
                try:
                    macetc.pop(el.getmac())
                except Exception as e:
                    sub = 0
                if el.devOk() == False:
                    print(akt.strftime("%Y-%m-%d %H:%M:%S") + ":" + el.devStat() + " " + el.status())
                if el.doPush() == True:
                    pushOver(el.status())
                csv_writer.writerow(el.getcsv())
                # print(el.getLanList())
    for el in macetc:
        if el is not None:
            val = macetc.get(el)
            print(akt.strftime("%Y-%m-%d %H:%M:%S") + ":DEL        " + " ".join(val) + "<br>")
    
    if os.path.exists("mymac.csv"):
        os.remove("mymac.csv")
    with open('mymac.csv', 'w') as csv_file:
        csv_writer = csv.writer(csv_file, delimiter=',', quoting=csv.QUOTE_ALL)
        for ar in allmac:
            val = allmac.get(ar)
            csv_writer.writerow(val)
    
    # ende = datetime.datetime.now()
    # print("Start: " + akt.strftime("%Y-%m-%d %H:%M:%S") + " Dauer:" + str(ende - akt))
    
    df = pd.read_csv('my.csv', names=['IP', 'MAC', 'Name', 'Hersteller'])
    
    # Save to file
    df.to_html('mydev.html')
    

    Hier die DB für MAC->Hersteller:
    oui.csv

    Und hier ein wenig Shell-Skript, um die Ergebnisse aufzuhübschen:

    #!/bin/bash
    
    logfile=/var/skripte/startGetNet.log
    
    
    echo "$(date) Starte getNet" >> $logfile
    
    cd /var/skripte
    python3 -u getnet.py >> $logfile
    
    echo "<html><head>" > /var/www/html/mydev.html
    echo "<title>WH:Devices</title>" >> /var/www/html/mydev.html
    echo "<meta http-equiv='refresh' content='60'>" >> /var/www/html/mydev.html
    echo "</head><body>" >> /var/www/html/mydev.html
    echo "<h2>Devices - $(date)</h2>" >> /var/www/html/mydev.html
    #more mydev.html >> /var/www/html/mydev.html
    #grep -v getNet $logfile | tail -100 | sort -r >> /var/www/html/mydev.html
    
    if [ -f "${logfile}" ]
    then
    	printf "<h3>NEW Logfile</h3><table border=\"1\">" >> /var/www/html/mydev.html
    	printf "<tr><th>Datum</th><th>Zeit</th><th>OP</th><th>IP</th><th>MAC</th><th>Name</th><th>Hersteller</th></tr>" >> /var/www/html/mydev.html
    	grep "new mac\|new     ip" $logfile | tail -10 | sort -r | sed "s/\(^[0-9-]*\) \([0-9:]*\):\([ a-zA-Z+]*\)\([0-9.]*\) \([0-9a-z:]*\) \([.?a-zA-Z0-9_-]*\) /\1<\/td><td>\2<\
    /td><td>\3<\/td><td>\4<\/td><td>\5<\/td><td>\6<\/td><td>/g" | while read line
    	do
    		printf "<tr><td>${line}</td></tr>" >> /var/www/html/mydev.html
    	done
    	printf "</table>" >> /var/www/html/mydev.html
    fi
    
    echo "<h3>Liste</h3>" >> /var/www/html/mydev.html
    more mydev.html >> /var/www/html/mydev.html
    if [ -f "${logfile}" ]
    then
    	printf "<h3>CHANGE Logfile</h3><table border=\"1\">" >> /var/www/html/mydev.html
    	printf "<tr><th>Datum</th><th>Zeit</th><th>OP</th><th>IP</th><th>MAC</th><th>Name</th><th>Hersteller</th></tr>" >> /var/www/html/mydev.html
    	grep -v getNet $logfile | tail -100 | sort -r | sed "s/\(^[0-9-]*\) \([0-9:]*\):\([ a-zA-Z+]*\)\([0-9.]*\) \([0-9a-z:]*\) \([.?a-zA-Z0-9_-]*\) /\1<\/td><td>\2<\/td><td>\3<
    \/td><td>\4<\/td><td>\5<\/td><td>\6<\/td><td>/g" | while read line
    	do
    		printf "<tr><td>${line}</td></tr>" >> /var/www/html/mydev.html
    	done
    	printf "</table>" >> /var/www/html/mydev.html
    fi
    
    echo "</body></html>" >> /var/www/html/mydev.html
    

    Was ist anzupassen:
    Verzeichnisse in Shell-Skipt
    Token für pushover
    Die python Datei und das oui,csv liegen im gleichen Verzeichnis.

    Ist mit python 3.7 erstellt worden.

    MfG

    Sissi

    –-----------------------------------------

    1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


    1 Antwort Letzte Antwort
    0

    Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

    Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

    Mit deinem Input könnte dieser Beitrag noch besser werden 💗

    Registrieren Anmelden
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen


    Support us

    ioBroker
    Community Adapters
    Donate

    579

    Online

    32.7k

    Benutzer

    82.6k

    Themen

    1.3m

    Beiträge
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
    ioBroker Community 2014-2025
    logo
    • Anmelden

    • Du hast noch kein Konto? Registrieren

    • Anmelden oder registrieren, um zu suchen
    • Erster Beitrag
      Letzter Beitrag
    0
    • Home
    • Aktuell
    • Tags
    • Ungelesen 0
    • Kategorien
    • Unreplied
    • Beliebt
    • GitHub
    • Docu
    • Hilfe