Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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. JavaScript
  5. Host + Port auf Erreichbarkeit prüfen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Host + Port auf Erreichbarkeit prüfen

Geplant Angeheftet Gesperrt Verschoben JavaScript
12 Beiträge 4 Kommentatoren 653 Aufrufe 4 Watching
  • Ä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.
  • CodierknechtC Online
    CodierknechtC Online
    Codierknecht
    Developer Most Active
    schrieb am zuletzt editiert von
    #1

    Ich brauche mal wieder etwas Schützenhilfe bei JS.

    Wie kann ich am einfachsten (mit möglichst wenig Overhead) prüfen, ob ein Host über einen bestimmten Port erreichbar ist.

    function isPortReachable(host, port) {
      ???
    }
    

    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

    Proxmox 9.1.1 LXC|8 GB|Core i7-6700
    HmIP|ZigBee|Tasmota|Unifi
    Zabbix Certified Specialist
    Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

    Jey CeeJ M 2 Antworten Letzte Antwort
    0
    • CodierknechtC Codierknecht

      Ich brauche mal wieder etwas Schützenhilfe bei JS.

      Wie kann ich am einfachsten (mit möglichst wenig Overhead) prüfen, ob ein Host über einen bestimmten Port erreichbar ist.

      function isPortReachable(host, port) {
        ???
      }
      
      Jey CeeJ Online
      Jey CeeJ Online
      Jey Cee
      Developer
      schrieb am zuletzt editiert von
      #2

      @codierknecht net-tools adapter und dort den port in den dp portList eintragen der gescannt werden soll. Falls der Port erreichbar ist wird er in ports angezeigt.

      Persönlicher Support
      Spenden -> paypal.me/J3YC33

      CodierknechtC 1 Antwort Letzte Antwort
      0
      • CodierknechtC Online
        CodierknechtC Online
        Codierknecht
        Developer Most Active
        schrieb am zuletzt editiert von
        #3

        @jey-cee
        Hmmm, ich dachte an ein paar Zeilen Code. Mit axios oder was man da sonst so nimmt.
        Irgendwas in Richtung HTTP.HEAD, um einfach nur die Erreichbarkeit zu prüfen.

        mit möglichst wenig Overhead

        JS ist halt nicht so meine Welt ;-)

        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

        Proxmox 9.1.1 LXC|8 GB|Core i7-6700
        HmIP|ZigBee|Tasmota|Unifi
        Zabbix Certified Specialist
        Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

        1 Antwort Letzte Antwort
        0
        • Jey CeeJ Jey Cee

          @codierknecht net-tools adapter und dort den port in den dp portList eintragen der gescannt werden soll. Falls der Port erreichbar ist wird er in ports angezeigt.

          CodierknechtC Online
          CodierknechtC Online
          Codierknecht
          Developer Most Active
          schrieb am zuletzt editiert von
          #4

          @jey-cee
          Ich sehe, Du machst das mit "evilscan".
          Vielleicht kriege ich das mit ein paar Zeilen adaptiert ;-)

          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

          Proxmox 9.1.1 LXC|8 GB|Core i7-6700
          HmIP|ZigBee|Tasmota|Unifi
          Zabbix Certified Specialist
          Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

          1 Antwort Letzte Antwort
          0
          • Jey CeeJ Online
            Jey CeeJ Online
            Jey Cee
            Developer
            schrieb am zuletzt editiert von
            #5

            Wenn es nur um einen ping der ip geht ist es ganz easy: Mit exec den ping Befehl vom system Ausführen.

            Auf die idee axios dafür zu nutzen um zu prüfen ob ein bestimmter port in Benutzung ist bin ich noch gar nicht gekommen. Aber ich Denke das funktioniert nur wenn auf dem port ein webservice läuft. Mit anderen servern die zum Beispiel Sockets nutzen dürfte das nicht klappen.

            Persönlicher Support
            Spenden -> paypal.me/J3YC33

            CodierknechtC 1 Antwort Letzte Antwort
            0
            • CodierknechtC Codierknecht

              Ich brauche mal wieder etwas Schützenhilfe bei JS.

              Wie kann ich am einfachsten (mit möglichst wenig Overhead) prüfen, ob ein Host über einen bestimmten Port erreichbar ist.

              function isPortReachable(host, port) {
                ???
              }
              
              M Online
              M Online
              MCU
              schrieb am zuletzt editiert von
              #6

              @codierknecht

              nc -zv host port
              

              NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
              Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

              1 Antwort Letzte Antwort
              0
              • Jey CeeJ Jey Cee

                Wenn es nur um einen ping der ip geht ist es ganz easy: Mit exec den ping Befehl vom system Ausführen.

                Auf die idee axios dafür zu nutzen um zu prüfen ob ein bestimmter port in Benutzung ist bin ich noch gar nicht gekommen. Aber ich Denke das funktioniert nur wenn auf dem port ein webservice läuft. Mit anderen servern die zum Beispiel Sockets nutzen dürfte das nicht klappen.

                CodierknechtC Online
                CodierknechtC Online
                Codierknecht
                Developer Most Active
                schrieb am zuletzt editiert von
                #7

                @jey-cee sagte in Host + Port auf Erreichbarkeit prüfen:

                ich Denke das funktioniert nur wenn auf dem port ein webservice läuft

                Genau dazu ist das Ganze gedacht.
                Ich hab's trotz sehr beschränkter Fähigkeiten in Sachen JS und Linux sogar hinbekommen, scheitere aber an der Asynchronität.

                async function isPortReachable(url) {
                    const response = await axios.head(url);
                    log(response);
                    return (response.status == 200);
                }
                
                

                @MCU
                Netcat musste ich erst nachinstallieren, aber es funktioniert.
                Wenn man einen entsprechend kurzen Timeout mitgibt, ist das - zumindest in der Konsole - eigentlich nutzbar.
                Jetzt müsste ich das "nur noch" in eine synchrone Funktion in JS gießen.

                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                HmIP|ZigBee|Tasmota|Unifi
                Zabbix Certified Specialist
                Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                T 1 Antwort Letzte Antwort
                0
                • CodierknechtC Codierknecht

                  @jey-cee sagte in Host + Port auf Erreichbarkeit prüfen:

                  ich Denke das funktioniert nur wenn auf dem port ein webservice läuft

                  Genau dazu ist das Ganze gedacht.
                  Ich hab's trotz sehr beschränkter Fähigkeiten in Sachen JS und Linux sogar hinbekommen, scheitere aber an der Asynchronität.

                  async function isPortReachable(url) {
                      const response = await axios.head(url);
                      log(response);
                      return (response.status == 200);
                  }
                  
                  

                  @MCU
                  Netcat musste ich erst nachinstallieren, aber es funktioniert.
                  Wenn man einen entsprechend kurzen Timeout mitgibt, ist das - zumindest in der Konsole - eigentlich nutzbar.
                  Jetzt müsste ich das "nur noch" in eine synchrone Funktion in JS gießen.

                  T Offline
                  T Offline
                  ticaki
                  schrieb am zuletzt editiert von ticaki
                  #8

                  @codierknecht

                  const axios=require('axios');
                  axios.defaults.timeout = 500;
                  
                  isPortOpen('127.0.0.1', '8081'); // true or false
                  async function isPortOpen(ip,port) {
                      try {
                          await axios.get(`http://${ip}:${port}`);
                      } catch (error) {
                          if (error.code==='ECONNABORTED') {
                              return false;
                          }
                      }
                      return true;
                  }
                  

                  Wenn es nur um den offenen Port geht ist doch alles ausser Timeout ok oder? außer du gibts die ip mit ungültigen Zeichen an, dafür kenne ich den Fehlercode nicht auswendig.

                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                  Spenden

                  CodierknechtC 1 Antwort Letzte Antwort
                  0
                  • T ticaki

                    @codierknecht

                    const axios=require('axios');
                    axios.defaults.timeout = 500;
                    
                    isPortOpen('127.0.0.1', '8081'); // true or false
                    async function isPortOpen(ip,port) {
                        try {
                            await axios.get(`http://${ip}:${port}`);
                        } catch (error) {
                            if (error.code==='ECONNABORTED') {
                                return false;
                            }
                        }
                        return true;
                    }
                    

                    Wenn es nur um den offenen Port geht ist doch alles ausser Timeout ok oder? außer du gibts die ip mit ungültigen Zeichen an, dafür kenne ich den Fehlercode nicht auswendig.

                    CodierknechtC Online
                    CodierknechtC Online
                    Codierknecht
                    Developer Most Active
                    schrieb am zuletzt editiert von Codierknecht
                    #9

                    @ticaki
                    So ähnlich habe ich es versucht.
                    Das läuft aber asynchron.
                    Das axios.get kehrt zurück, bevor am Ende das return true zurückgegeben wurde.
                    Die Funktion liefert ein promise zurück, aber kein true/false.

                    const axios=require('axios');
                    axios.defaults.timeout = 500;
                     
                    async function isPortOpen(uri) {
                        try {
                            await axios.get(uri);
                        } catch (error) {
                            log('code: ' + error.code);
                            if (error.code === 'ECONNABORTED') {
                                log('failed');
                                return 'closed';
                            }
                        }
                        log('success');
                        return 'open';
                    }
                    
                    log('result: ' + isPortOpen('http://192.168.178.137:8090'));
                    

                    Kann man am Log gut erkennen:

                    11:58:31.211	info	javascript.0 (1458371) Start javascript script.js.test.Test_JS
                    11:58:31.228	info	javascript.0 (1458371) script.js.test.Test_JS: result: [object Promise]
                    11:58:31.228	info	javascript.0 (1458371) script.js.test.Test_JS: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                    11:58:31.730	info	javascript.0 (1458371) script.js.test.Test_JS: code: ECONNABORTED
                    11:58:31.730	info	javascript.0 (1458371) script.js.test.Test_JS: failed
                    
                    11:58:38.753	info	javascript.0 (1458371) Start javascript script.js.test.Test_JS
                    11:58:38.766	info	javascript.0 (1458371) script.js.test.Test_JS: result: [object Promise]
                    11:58:38.766	info	javascript.0 (1458371) script.js.test.Test_JS: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                    11:58:38.782	info	javascript.0 (1458371) script.js.test.Test_JS: success
                    

                    In meiner Windows-Welt muss man schon ziemlich Klimmzüge machen, um asynchron zu arbeiten (multi-threading).
                    Da ist alles auf synchron ausgelegt.

                    Hier ist es genau andersrum. Synchrone Funktionsaufrufe scheinen echt kompliziert zu sein.

                    Aber ich hätte da eine Idee: Ich packe den von mir benötigten Aufruf der weiteren Funktionalität an das Ende dieser Funktion. Da landet man ja erst dann, wenn die Prüfung erfolgreich war.
                    Im Fehlerfall wird ja im catch abgebrochen.
                    Das würde mir auch schon ausreichen.

                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                    Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                    HmIP|ZigBee|Tasmota|Unifi
                    Zabbix Certified Specialist
                    Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                    1 Antwort Letzte Antwort
                    0
                    • CodierknechtC Online
                      CodierknechtC Online
                      Codierknecht
                      Developer Most Active
                      schrieb am zuletzt editiert von
                      #10

                      Ich hab's jetzt so gelöst.
                      Wenn's noch Kritikpunkte gibt - immer her damit.

                      const axios = require('axios');
                      axios.defaults.timeout = 500;
                      
                      const address = 'http://192.168.178.36:80';
                      
                      async function sendNotification(title, body) {
                          try {
                              await axios.head(address);
                          } catch (error) {
                              if (error.code === 'ECONNABORTED') {
                                  log('Target host:port not reachable');
                                  return false;
                              }
                          }
                          let url = address + '/toastMessage';
                          url += '?title=' + encodeURI(title);
                          url += '&body=' + encodeURI(body);
                          try {
                              await axios.get(url);
                          } catch (error) {
                              log(error);
                              return false;
                          }
                          return true;
                      }
                      
                      sendNotification('Titel', 'Nachricht');
                      

                      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                      HmIP|ZigBee|Tasmota|Unifi
                      Zabbix Certified Specialist
                      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                      T 1 Antwort Letzte Antwort
                      0
                      • CodierknechtC Codierknecht

                        Ich hab's jetzt so gelöst.
                        Wenn's noch Kritikpunkte gibt - immer her damit.

                        const axios = require('axios');
                        axios.defaults.timeout = 500;
                        
                        const address = 'http://192.168.178.36:80';
                        
                        async function sendNotification(title, body) {
                            try {
                                await axios.head(address);
                            } catch (error) {
                                if (error.code === 'ECONNABORTED') {
                                    log('Target host:port not reachable');
                                    return false;
                                }
                            }
                            let url = address + '/toastMessage';
                            url += '?title=' + encodeURI(title);
                            url += '&body=' + encodeURI(body);
                            try {
                                await axios.get(url);
                            } catch (error) {
                                log(error);
                                return false;
                            }
                            return true;
                        }
                        
                        sendNotification('Titel', 'Nachricht');
                        
                        T Offline
                        T Offline
                        ticaki
                        schrieb am zuletzt editiert von
                        #11

                        @codierknecht
                        Ups, ist für mich normal das man darauf auch awaiten muss, das ich es vergessen habe. Bei mir läuft fast immer alles in Funktionen die Funktionen aufrufen. Nur das initialisieren mache ich auf der Hauptebene.

                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                        Spenden

                        CodierknechtC 1 Antwort Letzte Antwort
                        0
                        • T ticaki

                          @codierknecht
                          Ups, ist für mich normal das man darauf auch awaiten muss, das ich es vergessen habe. Bei mir läuft fast immer alles in Funktionen die Funktionen aufrufen. Nur das initialisieren mache ich auf der Hauptebene.

                          CodierknechtC Online
                          CodierknechtC Online
                          Codierknecht
                          Developer Most Active
                          schrieb am zuletzt editiert von
                          #12

                          @ticaki sagte in Host + Port auf Erreichbarkeit prüfen:

                          ist für mich normal das man darauf auch awaiten muss

                          Das ist wohl der entscheidende Unterschied zwischen Windows und Node/JS ;-)

                          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                          Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                          HmIP|ZigBee|Tasmota|Unifi
                          Zabbix Certified Specialist
                          Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                          1 Antwort Letzte Antwort
                          0
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          666

                          Online

                          32.6k

                          Benutzer

                          82.2k

                          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