NEWS

Ports auf Online Verfügbarkeit prüfen wie ?


  • Starter

    Hallo,

    Gibt es vielleicht eine möglichkeit nicht nur IP-Adressen per ping port 80 zu überwachen sondern auch
    andere port`s wie zb.:
    port 443, 21, 22, 53, ....

    oder vielleicht sogar einen offiziellen oder GitHub Adapter der dies ermöglicht ?

    Spielchen wie snmp hab ich am laufen, fordert aber eingriff ins server system was ich für simple Online Status abfragen vermeiden möchte. ( Ausser Prio. Server )

    Vielen Dank


  • Developer

    @pmunz
    Ping überwacht nicht Port 80.

    Du kannst doch einfach mit einem socket Verbinden. Also aus dem Kopf so ein Skript:

    const net = require('net');
    
    const ip = 192.168.0.1;
    const port = 443;
    
    const connection = net.createConnection({host: ip, port: port, timeout: 10000}, (err) => {
        if (err) {
            if (err.code === 'ECONNREFUSED') {
               //port ist zu
            } else if (err.code === 'ETIMEDOUT') {
               //gerät offline (oder firewall doof konfiguriert, dass sie nicht antwortet)
            }
        } else {
             //port ist offen
        }
        connection .destroy(); //wieder zu machen :-)
    });
    

  • Starter

    @Garfonso
    Hallo, sorry hab ich mich falsch ausgedrückt, ich meinte der " ping Adapter " kann nur port 80 pingen und prüfen ob verfügbar.
    vielen dank für deine info , ich werd des mal testen.
    Danke


  • Starter

    @Garfonso sagte in Ports auf Online Verfügbarkeit prüfen wie ?:

    onst net = require('net');

    hmm irgendwie bekomm ich da immer einen script fehler den ich aber mangels unwissenheil nicht finden kann:

    22:50:07.870 error javascript.0 (1203) script.js.Javascript.ping compile failed:
    at script.js.Javascript.ping:5


  • Developer

    @pmunz
    Ja, sorry, war, wie gesagt, "aus dem Kopf". Die IP muss natürlich in Anführungszeichen, also const ip = "192.168.0.1";


  • Starter

    @Garfonso
    Hallo Garfonso,
    Danke ist ja kein problem ich bin dankbar für deine hilfe.
    Ja das mit den Anführungszeichen hätte ich auch als anfänger checken können , sorry.

    Jetzt tritt das problem auf das alle 10 sekunden auch andere Javascripts mitgezogen werden und einen reload machen und ich zb Telegram meldungen aus einem anderen script bekomme.
    das wird aber der fall sein wenn:
    solange ein Port Online ist zb.: 80 ist alles ok , ist dieser aber offline bricht die Instanz komplett ab und wird deaktiviert.

    Wo ist es mir den ersichtlich ob Online oder Offline ? ( true bei Online - false bei Offline ) unter Pbjekte / Javascript.
    Aber ich denke mal das "false" nicht kommt weil sich ja das Script / die Instanz beendet.
    Den Port 8090 hab ich nur eingetragen um zu sehen was passiert wenn der port nicht anspricht.

    Fehlermeldungen aus dem log :

    instance system.adapter.javascript.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
    Caught by controller[0]: at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16)
    Caught by controller[0]: Error: connect ECONNREFUSED 10.10.80.25:8090
    (25987) uncaught exception: connect ECONNREFUSED 10.10.80.25:8090



  • @pmunz unter Linux in der Konsole macht man das normal mit nmap ...


  • Developer

    @pmunz

    komisch... das Problem hatte ich hier nicht. Also der Port war nie online?
    //Edit: Ok, auf der Konsole hatte ich das Problem nicht, da ging das mit dem Fehler abfangen so. Im Adapter hab ich dasselbe Problem. Spanned. Mal untersuchen. 😉

    Eigentlich sollte das auch nicht passieren. Kannst du mir sagen, welche Version von js-controller und javascript Adapter du hast?


  • Developer

    @pmunz
    Ok, nachdem ich den Fehler auch sehen konnte, geht es nun so (mein ursprüngliches Skript war falsch):

    const net = require('net');
    
    const ip = "192.168.0.1";
    const port = 80;
    
    const connection = net.createConnection({host: ip, port: port, timeout: 10000});
    connection.on('ready', () => {
        log("Port offen");
        connection .destroy(); //wieder zu machen :-)
    });
    connection.on('error', (e) => {
        log("Error: " + e.code);
        if (e.code === 'ECONNREFUSED') {
            log("Port zu");
        } if (e.code === 'EHOSTUNREACH') {
            log("Gerät offline 2");
        } else {
            log("Anderer Fehler, vermutlich Gerät nicht da?");
        }
        connection .destroy(); //wieder zu machen :-)
    });
    connection.on('timeout', () => {
        log("Gerät offline");
        connection .destroy(); //wieder zu machen :-)
    });
    

    Den "timout" Fall hatte ich bisher nicht. Könnte aber theoretisch auftreten. Ich hatte im Fall, dass es an der IP gar kein Gerät gab den "EHOSTUNREACH" fall. Am besten wäre für den Fall, dass das Gerät gar nicht da ist eine Funktion zu definieren und die aufzurufen (falls der Fall für dich überhaupt relevant ist).

    //Edit:
    achja, damit das sinnvoll ist, also ein Status überwacht wird oder so, müsstest du den ganzen "connection" Block noch regelmäßig aufrufen also mit setTimeout oder schedule oder sowas (keine Ahnung, was du genau vorhast.. ggf. kannst du auch aus einem anderen Skript heraus das Skript aktivieren und am Ende des Skripts es sich selber deaktivieren lassen, das mache ich hin und wieder).


  • Starter

    @Garfonso
    Hallo,
    Ich habe mir vor Jahren ein PHP Scrip geschrieben das nichts anderes macht als Ports zu Pingen um zu sehen ob der Service läuft oder nicht, ich weis das ist nicht die perfekte lösung nur für die kleinen Devices extra einen snmp zu installiren ( am zu überwachenden Device ) macht keinen sinn.
    Ich bin Jahrelang mit dem php script durch gekommen wollte es halt jetzt einfach in den iobroker übernehmen.
    Vielen dank für deine Hilfe


  • Developer

    @pmunz
    Gerne. 🙂
    Du könntest auch mit exec das PHP Skript aus ioBroker raus aufrufen. Aber das ist ein gewisses Sicherheitsrisiko (weil man das Skript theoretisch austauschen könnte, je nach Berechtigungen).

    Wenn du noch weitere Hilfe brauchst, frag ruhig.


Log in to reply
 

Suggested Topics

2.1k
Online

32.0k
Users

38.7k
Topics

525.1k
Posts