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 Offline
    CodierknechtC Offline
    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 Offline
      CodierknechtC Offline
      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 Offline
            CodierknechtC Offline
            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 Offline
                CodierknechtC Offline
                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 Offline
                  CodierknechtC Offline
                  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 Offline
                      CodierknechtC Offline
                      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

                      649

                      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