mDNS Problem

Hallo,

wenn ich versuche meinen ESP mit hostname.local versuche anzusprechen funktioniert das nicht.
Wenn ich das Wlan deaktiver und wieder aktiviere bekomme ich folgenden Eintrag:

[E][ESPmDNS.cpp:131] addService(): Failed adding service http.tcp.

Hier wurde ein ähnliches Problem beschrieben:

Habe dann in der Datei Wlan.CPP testweise wie folgt abgeändert:

#ifdef MDNS_ENABLE

        // zero conf, make device available as <hostname>.local

        if (MDNS.begin(hostname.c_str())) {

            MDNS.addService("_http", "_tcp", 80);

        }

    #endif

Benutzt jemand mDNS und kann bestätigen das es eigentlich funktionieren sollte? Eventuell passen ja meine Bibliotheken von EspressIF nicht?

Gruß Frank

Hat bisher bei mir mit allen Systemen und Versionen immer funktioniert.

Hallo,

bei mir funktioniert es nun auch. Typischer Fall von Anwendungsfehler. Nachdem ich Softwareseitig nichts finden konnte, wollte ich den Datenverkehr im Netzwerk mir genauer anschauen. Interessanterweise hat in der Kommandozeile die Namensauflösung funktioniert, nur mit dem Chrome Browser und dem Android Handy meiner Frau nicht, mit dem Iphone funktioniert es auch.

Das liegt nicht am Browser, sondern an der Art und Weise, wie Android mit DHCP umgeht: Es ignoriert einfach den angebotenen DNS-Server und behält seinen vorkonfigurierten Google-DNS bei - der natürlich Ihre lokalen Hostnamen nicht kennt. So umgehen Sie dies:

  1. Öffnen Sie Einstellungen
  2. Navigieren Sie zu WiFi
  3. Navigieren Sie zum Eintrag Ihres WiFi-Netzwerks.
  4. Tippen Sie lange auf den Eintrag, den Sie bearbeiten möchten.
  5. Aktivieren Sie die erweiterten Einstellungen
  6. Wechseln Sie von DHCP zu statisch und ersetzen Sie den ersten DNS-Server (normalerweise 8.8.8.8) durch Ihren eigenen
  7. speichern

(Optional können Sie versuchen, nach dem Ändern des DNS-Servers wieder auf DHCP umzuschalten und zu prüfen, ob dieser beibehalten wird.)

Jetzt sollte Android zuerst Ihren DNS-Server verwenden und nur dann auf den sekundären Server wechseln, wenn sich Ihr Problem nicht lösen lässt. Das heißt, Ihr „mylaptop.local“ sollte jetzt gefunden werden - von Chrome oder jedem anderen Browser und auch jeder anderen App.

Bevor Sie fragen: Diese Einstellung (wie oben beschrieben) gilt nur für den geänderten WiFi-AP. Also keine Sorgen, die Sie beeinflussen könnten. Wenn etwas verrückt wird, können Sie den AP jederzeit einfach löschen und neu erstellen.

Danke für die Info. Das war mir ehrlich gesagt auch nicht bewusst. Ich wüsste nur gerne mal, wieso Fritz.box immer funktioniert hat. Da müssen die ja irgendwie was hartkodiert haben, so dass in diesem Falle der zweite DNS verwendet wird.

Hallo, ich muss das Thema leider nochmal aufgreifen. Ich reise nächste Woche nach Toronto und dort sind 2 Boxen meiner Enkel bei denen es immer noch Probleme mit mDNS gibt.

MacOS mit Safari ok.
MacOS mit Chrome funktioniert nicht.
2 PC´S mit Windows 10 funktioniert nicht. ( BTW bei meinem Windows-PC auch nicht )

das gilt ja scheinbar nur für Android, habe dort nirgendwo einen „komischen Eintrag“. Ansonsten habe ich im Netz viele Tipps gefunden aber keiner hat geholfen. Ich gehe mal davon aus dass es bei euch funktioniert weil es hier kein Thema ist. Bin anscheinend der einzige Depp.

bei Win auch mit Chrome? Wenn ja versuche mal den Firefox und/oder Edge

Edge geht auch nicht

was faktisch auch ein Chrome ist, was sagt Firefox?

Kannst du den Namen auflösen in der cmd? → nslookup

Ich benutze mDNS ebenfalls und hatte damit noch keine Probleme.

Bei Chrome muss zwingend http://<hostname>.local inklusive http:// angegeben werden (zumindest beim ersten Mal). Ansonsten bemüht Chrome immer die Internet Suche.

Für mDNS (*.local) ist der eingetragene DNS Server egal. Ein Client der mDNS unterstützt muss die Adresse mit einem lokalem Multicast auflösen (224.0.0.251) und darf nicht den DNS anfragen. (siehe https://www.rfc-editor.org/rfc/rfc6762.html)
Achtung: Hin und wieder halten sich Admins oder Routerhersteller nicht daran, dass .local für mDNS reserviert ist und setzen das als DNS Search Domain. Das verwirrt manche Clients.

Zu Android: Hier ist es so, dass mDNS erst ab Version 12 implementiert ist, also erst seit kurzem.

Darüber hinaus sei zu erwähnen, dass der ESPuino (sofern DHCP benutzt wird) dem Router seinen Hostnamen mitteilt. In den allermeisten Fällen sollte also auch einfach http://<hostname> ohne .local funktionieren. Hier gilt wieder: Bei Chrome ist das http:// zwingend erforderlich.

EDIT: Probleme kann man am besten mit Wireshark debuggen. Als Filter einfach mdns eintragen, dann sieht man was genau passiert. Wer wirklich die gesamte Kommunikation zwischen ESPuino und Accesspoint/Router sehen möchte, muss dazu allerdings die Pakete auf dem Accesspoint/Router abfangen. Für Linux Nutzer habe ich da vor einiger Zeit ein Python Script geschrieben: GitHub - fetzerch/wireshark_remote: Initiate wireshark remote capture (SSH or AVM FRITZ!Box)

2 „Gefällt mir“

Hallo fetzerch,
danke für die super SW. Das kannte ich noch gar nicht. Hatte bisher das Protokoll in der Fritzbox als Datei erstellt und nachher in Wireshark angeschaut. Die SW funktioniert mit Wireshark-QT auf Anhieb. Und alles in Echtzeit!

Danke für das positive Feedback! Es kursieren zwar ein paar Shell Skripte im Netz die ähnliches machen, aber ich wollte das für den Benutzer so einfach wie möglich machen. Ohne dass man hinterher z.B. einen Haufen temporäre Dateien händisch löschen muss, usw. Freut mich jedenfalls wenn es Dir hilft!

Wirklich zuverlässig funktioniert es bei mir auch nicht.
Gerade im Zusammenhang mit Windows ist es „schwierig“.
Ergänzend zu den bereits hier erwähnten Tipps :

  • Ich prüfe auch immer zuerst auf der Kommandozeile ob die Auflösung klappt. nslookup hilft hier nicht, es befragt einen DSN-Server und wie oben erwähnt hat mDNS nichts mit einem Server zu tun. Am einfachsten per Ping hostname.local
  • Bei Windows könnte man mal auf die Firewall schauen.
  • Die ESP mDNS Library verhält sich manchmal merkwürdig
    • Auf Anfragen von meinem Windows-System reagiert der ESP z.B. gar nicht. LINK
    • Andersherum verwerfen einige Systeme die Antworten / Anfragen vom ESP LINK, LINK. Ich muss bei mir einen mDNS-Proxy einsetzen, weil die Systeme in unterschiedlichen Netzwerksegmenten stehen. Das klappt eigentlich nie mit dem ESP.
    • Mit Arduino 2 soll es wohl besser laufen. Mit ESPHome habe ich z.B. gar keine Probleme.
  • Mein Fazit: Statische IPs (DHCP Reservierungen) verwenden. :smiley:

Ping geht immer , Firewall ist aus , der Tipp von @fetzerch mit http:// hilft nicht . Ich werde es nächste Woche in Kanada ausprobieren.

Nur zur Info:
Ich arbeite mit Windows 10. Browser Chrome. FritzBox:
Gebe einfach espuino ein und es öffnet sich zuverlässig die WebGUI.

name.local funktioniert auf iMac mit Safari und allen iPads, iPhones
http://name.local funktioniert auch unter Chrome

beides funktioniert auf keinem Windows-Rechner. Ist für nicht nicht wichtig, wird nicht gebraucht.