Benötige Perl- bzw. Modul- Hilfe

Begonnen von supernova1963, 05 Juni 2017, 13:13:03

Vorheriges Thema - Nächstes Thema

supernova1963

Vorab, dies sind meinen ersten Geh-Versuche mit Perl. Ich bitte um Nachsicht und bin für jeden Rat und jede Tat dankbar.
Ich weiß auch, dass das Thema Netzwerk-Scanner nicht neu ist. igami hat z.B. das offizielles Nmap - Modul dafür entwickelt. Es funktioniert hervorragend und ich bewundere seine Fähigkeiten ein solches Modul zu entwicklen.
Die readingsgroup Aufbereitungen für das Nmap Modul und die Möglichkeiten des overlook fing Tools inspirierten mich zu nachstehendem alternativen Ansatz. 

Auf Basis eines im Hintergrund laufenden "fing-Discovery-Scans" werden

  • Dummies = NetClients in fhem angelegt und
  • deren Status (Geräte, die sich verbinden werden unmittelbar angezeigt, alle 60 Sekunden werden Veränderungen aufgespürt, also z.B. wenn ein Gerät "down" ist) und
  • Readings automatisch aktualisiert werden.
Diese Dummies (NetClients) werden auf Basis ihrer MAC-Adresse benannt und erhalten

  • Userattribute mit readingsList und setList (Scan:off,Quick,Deep Interval [WOL] [Ping]),
  • room - Voreinstellungen
  • group - Voreinstellungen, sowie
  • ein Überwachungs - Notify mit entsprechendem Namen [devicename]_notify.
Stellt das Notify fest, dass Scan von off auf Quick geändert wurde, wird, wenn ein Interval in Sekunden angegeben wurde ein relatives "at" definiert, dass in den angegebenen Zeitintervallen, einen "QuickScan" ausführt, um für diesen NetClient weitere Informationen zu holen (fing-Scan). Ist das Interval = 0, dann wird der QuickScan nur einmalig ausgeführt. Für den, - noch nicht abgeschlossenen -, DeepThought-Scan (z.B. auf Basis von nmap) soll das Handling vergleichbar erfolgen.

Warum ich overlook fing gewählt habe:

  • es ist schnell und klein (den Discovery Scan starte ich als init.d - Service)
  • es ist flexibel anpassbar (in /etc/fing befinden sich 'properties - Dateien, wo man tcp-/udp- Ports, Hersteller usw. einstellen kann)
  • ich kann es bedienen (nicht so komplex, wie nmap)
Warum ich das hier überhaupt einstelle:

  • es ist nicht mehr einfach und schnell nachvollziehbar (ich bin mir nicht mehr sicher, ob die Umsetzung in my_Utils noch sinnvoll ist)
  • ich bin mir sicher, dass der Code für Perl - Profi's und Programmierer eine einzige "Katastrophe" ist und
  • ich die Hoffnung habe, dass ein Profi bzw. Programmierer mal drüber schaut oder
  • sich erbarmt, ein Modul mit vergleichbarer bzw. erweiterter Funktionalität der Allgemeinheit zur Verfügung zustellen

Damit ich es von PC, iPDA usw. dokumentieren konnte , - und aus purer Neugier -, habe ich den derzeit aktuellen Stand hier: https://github.com/supernova1963/fhem-netClients abgelegt.

Für Anregungen, Ratschläge und Tips wäre ich dankbar,

Gernot 


KernSani

Hi,

danke, dass du hier dein Modul vorstellst. Dabei handelt es sich aber nicht um eine Anfängerfrage, sondern um einen "Codeschnipsel". Verschiebst du den Post dahin? (Button ganz unten links)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

igami

Ich habe es mir noch nicht angeguckt, sondern nur deinen Text hier gelesen. Da es ja recht ähnlich zum Nmap Modul ist kann ich dir gerne dabei helfen ein Modul daraus zu machen.

Soweit ich verstanden habe wird für jede MAC Adresse im Netzwerk ein eigenes Device angelegt.
In diesem device gibt es dann Readings über den Status (up|down) und offene Ports?
Es gibt ein set für WOL?

Versuch doch bitte mal noch ein bisschen mehr zu beschreiben, was man mit fing machen kann.
In dem Nmap Modul nutze ich ja auch nur einen ganz kleinen Teil von Nmap um einen Netzwerkstatus in FHEM abzubilden
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

supernova1963

Hallo igami,

du kennst wahrscheinlich fing für iOS oder Android. Das ist grafisch aufbereitet die Funktionen von fing für die Befehlszeile ( windows, OS X, Linux).
Das Besondere ist die Geschwindigkeit und der geringe Ressourcenbedarf, sowie die Möglichkeiten der Pflege über die .properties unter Ubuntu im Verzeichnis /etc/fing.
Da ich keine geeignete Beschreibung gefunden habe, hier eine Möglichkeit den Befehl zu konfigurieren über die --interactive Option:


fhem@FHEM:~$ sudo fing --interactive

=== overlook fing 3.0 - www.overlooksoft.com ===

  This interactive procedure will guide you through available options.
  When multiple choices are presented, press one of the letters in brackets.
  Press <CTRL^C> to exit, press <Enter> for default answer and <?> to ask
  for help.

Do you want to (D)iscover, (S)can, (F)ingbox, (P)ing or display (I)nfos?
> D
Which network shall be monitored? Type a letter or a network.
  (A) enp0s5
      192.168.1.11/24 - Ethernet
>
How many rounds?
>
Do you want to discover domain names, (Y)es or (N)o?
> Y
Choose the file name to persist your discovery session.
You may specify absolute paths. Type <Enter> for none.
>
Do you want a (L)og or (T)able output?
> L
Which format do you prefer (csv, text)?
> csv
Do you want to send the output to the (C)onsole or a (F)ile?
> C           
Do you want to add another output, (Y)es or (N)o?
> N

=== You have completed the procedure ===

  The equivalent command is:
  fing -o log,csv,console

Do you execute it now, (Y)es or (N)o?
>

supernova1963

#4
Hallo igami,

hier eine etwas ausführlichere Beschreibung.
Dein Angebot zur Unterstützung bei der Erstellung eines Moduls wird wohl an meinen bescheidenen Fähigkeiten scheitern. Die Beschreibung zur Erstellung habe ich bereits vergeblich versucht zu verstehen. Mit allen Verständnis für die Notwendigkeit, haben mir neben dem ganzen "ge-hash-e" die restriktiven Anforderungen an Aufbau, Stil und Sprache so imponiert, dass ich es verworfen habe, einen weiteren Gedanken daran zu verlieren.
Mein Plan war 2 Module zu verwenden.
Das erste "NetClientControl - Modul" sollte alles rund um den

  • Discover - Scan
  • Netzwerkinformationen
  • Vorgabe-Einstellungen, usw.
  • Start/Stop/Restart/Status des Hintergrundprozesses "fingService.pl"
    (ohne init.d, war nur eine Notlösung, weil ich blocking bzw. subprocess nicht auf Anhieb verstanden habe)
zur Verfügung stellen und steuerbar sein.
Das zweite Modul wäre dann das eigentliche "NetClient - Modul" mit Voreinstellungen

  • zu stateFormat, userAttribute, userReadings, setlist, ...
  • Überwachungen (Interval gesteuertes Scanen Quick/Deep)
  • Basisfunktionen URI Generierung zu bekannten Ports/Services
  • in weiteren Ausbaustufen Schablonenangebote für erkannte bekannte Devices (MQTT, ESP, Harmony Hub, CCU2, ...

Also, ich, Modulentwickler, nicht vorstellbar, aber -tester, gerne.
Wenn es für derartige Funktionen genügend Interessent gibt, wird sich hoffentlich ein "Wissender" finden, der es so oder ganz anders umsetzt.

LG

Gernot


overlook fing - Funktionen:

fhem@FHEMDEV:~$ sudo fing --help

=== overlook fing 3.0 - www.overlooksoft.com ===

Command line options:
  -h [ --help ]            show this help message
  -v [ --version ]         show fing version
  -i [ --info ]            show network informations
  -n [ --netdiscover ] arg run network discovery
  -s [ --servicescan ] arg run service scan on host/network
  -o [ --output ] arg      use output setup for discovery/scan/ping
  -P [ --profile ] arg     use specific discovery/scan/ping profile
  -d [ --rdns ] arg        enable/disable reverse DNS lookups
  -r [ --rounds ] arg      number of rounds (network discovery)
  --session arg            use specific discovery session file
  --silent                 force to silent mode
  --interactive            start the interactive mode
  -p [ --ping ] arg        run icmp ping on the hosts
  --sentinel               run Fingbox Sentinel
  -w [ --wol ] arg         send wake on lan on targets



(D)iscover

  • Durchsucht das angegebene (bzw. ohne Angabe das zuerst gefundene) Netzwerk nach Geräten,
  • auf Wunsch mit Hostnamen des DNS
  • endlos, wenn keine Anzahl Rounds eingegeben wurden
  • Ausgabetyp Log = Logdatei, die alle Veränderungen dokumentiert und als csv oder text ausgibt.
    Die text Ausgabe zeigt nur bei jeder Runde, also nach einer Minute, die Veränderungen.
    Bei csv werden alle neu hinzugekommenen Geräte unmittelbar angezeigt (Beispiel 1). Die Ausgabe kann als Datei oder auf die Console erfolgen
  • Ausgabetyp table = Tabelle, die in den Ausgabeformaten: html, csv, text, stext, xml, json, jeweils als Datei oder Console bei jeder Runde die den aktuellen Gersamt - Status dokumentiert. Besonderheit html: Hier werden zusätzlich Änderungen live separat dokumentiert.
  • Einstellungen können in den Dateien (Ubuntu 17.04) /etc/fing/discover.properties und ./ethernet-ouis.properties (Vendor) und hosts.properties (Liste bekannte Hosts für Name) vorgenommen werden.
Beispiel: Discover, Log, Hostnames, csv, console
fhem@FHEMDEV:~$ sudo fing -o log,csv,console
13:53:10 > Discovery profile: Default discovery profile
13:53:10 > Discovery class:   data-link (data-link layer)
13:53:10 > Discovery on:      192.168.178.0/24

13:53:10 > Discovery round starting.
2017/06/06 13:53:10;up;192.168.178.33;;FHEMDEV;00:1C:42:00:00:00;Parallels, Inc.
2017/06/06 13:53:10;up;192.168.178.1;;fritz.box;BC:05:43:00:00:00;AVM GmbH
13:53:10 > Discovery progress 25%
2017/06/06 13:53:10;up;192.168.178.145;;MacBook.fritz.box;9C:F3:00:00:00:00;Apple, Inc.
2017/06/06 13:53:10;up;192.168.178.179;;Gernots-Air.fritz.box;2C:F0:00:00:0:00;Apple, Inc.
2017/06/06 13:53:10;up;192.168.178.159;;iPhone-Gerd.fritz.box;CC:08:00:00:00:00;Apple, Inc.
13:53:12 > Discovery progress 50%
2017/06/06 13:53:12;up;192.168.178.50;;;1C:1A:C0:00:00:00;Apple, Inc.
13:53:12 > Discovery progress 75%
13:53:14 > Discovery round completed in 4.840 seconds.
13:53:14 > Network 192.168.178.0/24 has 6/6 hosts up.

13:53:14 > Next round starting at 13:54:10. Press Ctrl^C to exit.

2017/06/06 13:53:22;up;192.168.178.139;iPhone_Gernot;iPhone-Gernot.fritz.box;80:BE:05:00:00:00;Apple, Inc.
13:54:10 > Discovery round starting.
13:54:10 > Discovery progress 25%
13:54:12 > Discovery progress 50%
13:54:13 > Discovery progress 75%
13:54:15 > Discovery round completed in 4.967 seconds.
13:54:15 > Network 192.168.178.0/24 has 7/7 hosts up.

13:54:15 > Next round starting at 13:55:10. Press Ctrl^C to exit.


(S)can

  • Führt einen einmaligen Service-Scan (Ports, ...) für das/die angegebene Gerät(e) durch.
  • Ausgabeformate: html, csv, text, xml, json
  • Einstellungen zu den Services können in der Datei (Ubuntu 17.04) /etc/fing/ip-services.properties vorgenommen werden
Beispiel 2: Scan, csv, console
fhem@FHEMDEV:~$ sudo fing -s 192.168.178.1 -o csv,console
14:51:30 > Service scan on: 192.168.178.1

14:51:30 > Service scan starting.
14:51:30 > Detected MAC address: BC:05:43:00:00:00
14:51:30 > Detected service:    21 (ftp)
14:51:30 > Detected service:    53 (domain)
14:51:30 > Detected service:    80 (http)
14:51:30 > Detected service:   139 (netbios-ssn)
14:51:30 > Detected service:   445 (microsoft-ds)
14:51:30 > Detected service:  5060 (sip)
14:51:31 > Service scan completed in 1.003 seconds.

192.168.178.1;21;TCP;ftp;File Transfer Protocol
192.168.178.1;53;TCP;domain;Domain Name Server
192.168.178.1;80;TCP;http;World Wide Web HTTP
192.168.178.1;139;TCP;netbios-ssn;NETBIOS Session Service
192.168.178.1;445;TCP;microsoft-ds;SMB directly over IP
192.168.178.1;5060;TCP;sip;Session Initiation Protocol (SIP)


Beispiel 3: (P)ing:
fhem@FHEMDEV:~$ sudo fing -p 192.168.178.1 -o csv,console
14:55:09 > Ping reply from 192.168.178.1 in 17 ms
14:55:09 > Ping reply from 192.168.178.1 in 27 ms
14:55:09 > Ping reply from 192.168.178.1 in 46 ms
14:55:10 > Ping reply from 192.168.178.1 in 79 ms
14:55:10 > Ping reply from 192.168.178.1 in 79 ms

192.168.178.1;49;;17;79


Beispiel 4: (I)nfos:
fhem@FHEMDEV:~$ sudo fing -i
Local network interfaces:
enp0s5:
Type:             Ethernet
Hardware address: 00:1C:42:00:00:00
Vendor:           Parallels, Inc.
IP address:       192.168.178.33/24 [192.168.178.255]
IP address:       FE80:0000:0000:0000:021C:42FF:0000:0000/128

Default gateway:
192.168.178.1


Beispiel 5: (W)ake on lan: fhem@FHEM:~$ sudo fing -w ?

16:23:21 > Error: invalid MAC address in ?

Wake On Lan syntax:
  MACAddress[@network[:port]]
  MACAddress[@host[:port]]

E.g.:
  fing --wol 010203040506
  fing --wol 01:02:03:04:05:06@192.168.0.1/24
  fing --wol 010203040506@myremoterouter.com:9


Ich lege eine aktualisierte Herstellerliste, ein Beispiel für an FHEM angepaßte Services und Discover-Einstellungen mit Musterangaben von zu scannenden Ports an.
Ich möchte aber unbedingt darauf hinweisen, dass

  • Fing nur eine Notlösung von mir war, da ich die Hintergrundüberwachung mit nmap nicht hinbekommen habe
  • Es ist schon eher betagt
  • Ein neues Developementtool ist seit langem angekündigt.
    (Registrierungen auf der Hersteller-Site bleiben unbeantwortet)
  • Zur Zeit steht scheinbar das Projekt "FingBox" im Vordergrund
  • IPV6 wird meines Wissens nach nicht unterstützt
  • ...