Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Ports auf Online Verfügbarkeit prüfen wie ?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Ports auf Online Verfügbarkeit prüfen wie ?

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      pmunz last edited by pmunz

      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

      Garfonso ? 2 Replies Last reply Reply Quote 0
      • Garfonso
        Garfonso Developer @pmunz last edited by Garfonso

        @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 :-)
        });
        
        P 2 Replies Last reply Reply Quote 0
        • P
          pmunz @Garfonso last edited by

          @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

          1 Reply Last reply Reply Quote 0
          • P
            pmunz @Garfonso last edited by

            @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

            Garfonso 1 Reply Last reply Reply Quote 0
            • Garfonso
              Garfonso Developer @pmunz last edited by

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

              P 1 Reply Last reply Reply Quote 0
              • P
                pmunz @Garfonso last edited by pmunz

                @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

                Garfonso 2 Replies Last reply Reply Quote 0
                • ?
                  A Former User @pmunz last edited by

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

                  1 Reply Last reply Reply Quote 0
                  • Garfonso
                    Garfonso Developer @pmunz last edited by Garfonso

                    @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?

                    1 Reply Last reply Reply Quote 0
                    • Garfonso
                      Garfonso Developer @pmunz last edited by Garfonso

                      @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).

                      P M 2 Replies Last reply Reply Quote 0
                      • P
                        pmunz @Garfonso last edited by

                        @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

                        Garfonso 1 Reply Last reply Reply Quote 0
                        • Garfonso
                          Garfonso Developer @pmunz last edited by

                          @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.

                          1 Reply Last reply Reply Quote 0
                          • M
                            michihorn @Garfonso last edited by michihorn

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

                            @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).

                            Hallo, ich möchte gerne wisssen, wie ich permanent die Port prüfen kann. Das Script oben läuft offenbar nur einmal, oder? Ich habe das mal mit Schedule gemacht.

                            schedule("*/1 * * * *", function () {
                            

                            Gruß Michael

                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            568
                            Online

                            31.9k
                            Users

                            80.2k
                            Topics

                            1.3m
                            Posts

                            blockly javascript
                            4
                            12
                            786
                            Loading More Posts
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes
                            Reply
                            • Reply as topic
                            Log in to reply
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            The ioBroker Community 2014-2023
                            logo