Ankündigung

Einklappen
Keine Ankündigung bisher.

Laptop Status über ARP (anstelle von Ping)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Laptop Status über ARP (anstelle von Ping)

    Ich habe bisher den Aktivitätsstatus meiner Windows Geräte ganz gut über
    Code:
    eval: sh.tools.ping('xxx.xxx.xxx.xxx')
    umgesetzt.

    Jetzt wurde allerdings durch eine Unternehmensrichtlinie mein Firmenlaptop so konfiguriert, daß er nicht mehr auf 'Pings' antwortet.

    Ich habe daraufhin mal versucht, alternativ über die ARP Tabelle den Status der IP Adresse im Netzwerk durch eine Logik abzufragen:

    Code:
    import os
    
    with os.popen('arp -a') as arp_data:
    
        ip = 'xxx.xxx.xxx.xxx'
        if ip in str(arp_data.read()):
            value = True
        else:
            value = False
        sh.devices.laptop.status(value)​
    In Windows funktioniert das problemlos, in SHNG mit Debian Bullseye bleibt der output von arp_data leer.

    Hat jemand einen Tip, wie ich das in der Logik hinbekomme?

    Gruß
    Marcus
    Zuletzt geändert von SMarcus; 10.07.2023, 07:16.

    #2
    Hilft Dir vielleicht ip neigh show weiter anstelle arp -a?

    Kommentar


      #3
      oder zumindest mal ein arp -an angeben. Das -n sorgt dafür das keine Namensauflösung gemacht wird. Vermutlich dauert das einfach zu lange. Aber arp ist sowieso obsolete. ip neigh show sollt wirklich das mittel der Wahl sein
      OpenKNX www.openknx.de | OpenKNX-Wiki (Beta)

      Kommentar


        #4
        Also dann könnte sowas funktionieren:

        Code:
        import os
        
        with os.popen('ip neigh show') as result:
            # permanent, noarp, reachable, stale, none, incomplete, delay, probe, failed
            ip = 'xxx.xxx.xxx.xxx'
            mac = "b4:b6:2f:cd:6d:21"
            value = False
            lines = str(result.read()).splitlines()
            for line in lines:
                if (ip in line or mac in line) and ("REACHABLE" in line or "STALE" in line):
                    value = True
                    break
            sh.devices.laptop.status(value)​

        Kommentar


          #5
          Ich hätte es vermutlich so gebaut, so dass ich nicht vom pyhton abhängig bin:

          Code:
          ip n s | egrep  "lladdr xx:xx:xx:xx:xx:xx (STALE|REACHABLE)" > /dev/null  && echo "1" || echo "0"
          Das liefert dann eine 1 oder eine 0.
          OpenKNX www.openknx.de | OpenKNX-Wiki (Beta)

          Kommentar


            #6
            Danke, mit den Tips habe ich es hinbekommen. So läuft es jetzt (In dem Beispiel werte ich LAN und WLAN IP eines Gerätes getrennt aus):

            Code:
            import subprocess
            
            process = subprocess.Popen(["ip", "neigh", "show"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            (process_cache, process_err) = process.communicate()
            entries = process_cache.decode().splitlines()
            
            # Item: sh.devices.laptop.status_wlan()
            ip = 'xxx.xxx.xxx.xx5'
            value = False
            for data_line in entries:
                if ip in data_line and "REACHABLE" in data_line:
                    value = True
            sh.devices.laptop.status_wlan(value)
            
            # Item: sh.devices.laptop.status_lan()
            ip = 'xxx.xxx.xxx.xx8'
            value = False
            for data_line in entries:
                if ip in data_line and "REACHABLE" in data_line:
                    value = True
            sh.devices.laptop.status_lan(value)​
            Ist halt echt praktisch, wenn die Jalousien runterfahren, sobald der Laptop im Büro an ist....

            Danke nochmal.

            Kommentar

            Lädt...
            X