Forum: Mikrocontroller und Digitale Elektronik LwIP: wie IP-Adresse eines Servers über Namen finden


von Wastl (hartundweichware)


Lesenswert?

Die Frage im Titel ist etwas uneindeutig sonst wird die Zeile zu
lang. "Server" ist hier im Kontext ein Partner im Heimnetz den man
Daten schickt. Hier die genaue Fragestellung:

Ist-Zustand: Ein STM32 Controller mit LwIP (UDP aktiviert, Server)
ist im Heimnetz angeschlossen. Im einfachsten Fall besteht das
Heimnetz aus Fritzbox, Home-PC und STM32 Controller, evtl mehrere.
Der STM kann dort problemlos Daten empfangen und dem Sender (hier
der Home-PC) auch Daten zurücksenden (Echo Server). Dazu braucht er
keine eigene Adress-Findung da er ja selbst angesprochen wird und
damit weiss woher ein Request bzw. Daten kommen. Der Home-PC kann
Daten zum STM sowohl über IP-Adresse als auch über den Netzwerk-
Namen senden. Der STM32 hat DHCP in LwIP aktiviert und kann so
immer über den Namen gefunden/angesprochen werden.

Anders herum funktioniert das sicher auch: der STM32 schickt von
sich aus (jetzt als UDP "Client") Daten an ein gewünschtes Ziel
wenn dessen IP-Adresse bekannt ist. Die Funktionalität ist im
vorangegangenem Absatz bereits enthalten wo ein Echo zurückgesendet
wird.

Jetzt wird es für mich unklar: mein STM32 Controller mit LwIP soll
Daten an ein Ziel im Heimnetz senden. Da sich die IP-Adressen
laufend ändern können ist die Adresse des Ziels (entweder Home-PC
oder weiterer Controller) nicht bekannt und es sollen auch keine
festen Adressen vergeben werden. Also soll/muss die Adresse aktuell
über den Netzwerk-Namen ermittelt werden. Die Namen sind im
Netzwerk bekannt, die Fritzbox vergibt ja über DHCP die IP-Adressen
zu den Beteiligten (Namen) im Heimnetz.

Nur: welcher Mechanismus liefert mir im LwIP-Gefüge die Auflösung
von bekannten Netzwerk-Namen zur gewünschten IP-Adresse? LwIP ist
ja in diesem Fall nicht der Nameserver sondern die Fritzbox. Meine
Suche diesbezüglich brachte keinen Erfolg. Die LwIP-
Programmbeispiele bringen auch keine Aufklärung. Übliche Aufrufe für
TCP oder UDP funktionieren ja nur über die IP-Adresse, nicht über
Netzwerk-Namen. Nach meinem Verständnis muss ich mir in LwIP - wie
auch immer - erst die Zieladresse "besorgen" um diese dann in einem
TCP oder UDP Request zu benutzen. Geht das transparent wenn man das
Socket-API benutzt?

von Martin H. (mahi)


Lesenswert?

Wastl schrieb:
> Nur: welcher Mechanismus liefert mir im LwIP-Gefüge die Auflösung
> von bekannten Netzwerk-Namen zur gewünschten IP-Adresse?

Ganz normal DNS: dns_gethostbyname --> 
https://www.nongnu.org/lwip/2_1_x/group__dns.html#ga1e040ec38166dc9bfcc3473aab0c799f


Die FritzBox verteilt ja nicht nur IP-Adressen per DHCP, sondern gibt 
sich darüber auch als DNS-Server zu erkennen.

Dafür sollte LWIP_DHCP_MAX_DNS_SERVERS > 0 sein 
(https://www.nongnu.org/lwip/2_0_x/group__lwip__opts__dhcp.html#ga60ccc20fbb08be24b5d5f599dd47a6a6).

von Wastl (hartundweichware)


Lesenswert?

Martin H. schrieb:
> Ganz normal DNS: dns_gethostbyname

Danke dafür.
Soweit war ich schon, bekam aber immer Fehlercodes!=0 zurück.

Martin H. schrieb:
> Dafür sollte LWIP_DHCP_MAX_DNS_SERVERS > 0 sein

Das könnte der Knackpunkt sein dass ich keinen erfolgreichen
Call absetzen konnte. Ich war dann bisher der Meinung die
Funktionen beziehen sich auf einen LwIP-internen DNS.

von Harry L. (mysth)


Lesenswert?

LWIP hat keinen internen DNS-Server (würde auch wenig Sinn ergeben), und 
braucht daher zur Namensauflösung zwingend einen externen DNS-Server.
Der ist in deinem Fall die FritzBox.

von Wastl (hartundweichware)


Lesenswert?

Harry L. schrieb:
> LWIP hat keinen internen DNS-Server (würde auch wenig Sinn ergeben)

Ich dachte das würde dann Sinn ergeben wenn ich ein Netzwerk aus
Nur-LwIP-Controllern habe in dem sonst kein DNS vorhanden ist,
also ohne PC und Fritzbox.

von Harry L. (mysth)


Lesenswert?

Wastl schrieb:
> Ich dachte das würde dann Sinn ergeben wenn ich ein Netzwerk aus
> Nur-LwIP-Controllern habe in dem sonst kein DNS vorhanden ist,
> also ohne PC und Fritzbox.

Kann man natürlich machen, aber in so einem Sonderfall musst du den 
Server eben selbst programmieren und natürlich auch die Host-Tabellen 
selbst pflegen.
Letzteres macht bei dir eben der DHCP-Server in der FritzBox 
automatisch.

von Wastl (hartundweichware)


Lesenswert?

Harry L. schrieb:
> Kann man natürlich machen ..........

Verstehe, Dank auch an dich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.