• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

DNS vom Router bekommen (C/C++)

Ich soll ein Programm schreiben, welches die DNS vom Router bekommt und in /etc/presolv.conf schreibt.

Das mit dem Schreiben ist einfach, aber wie bekomme ich die DNS vom Router? Außerdem bräuchte ich natürlich auch die Adresse des Routers.

Ist das machbar?
 
Soweit ich weiß besitzt kein Router Informationen über DNS-Server. Für die automatische Netzkonfiguration ist DHCP zuständig. Mit diesen Dienst werden den Clients IP-Adressen zugewiesen, sowie der zuständige Router und DNS-Server mitgeteilt. Da das für die meisten alles zusammen in einer DSL-Box sitzt, kann leicht das Vorurteil entstehen, das ein Router dafür Zuständig sei.
 
Von deinen Provider, oder du baust dir selber einen. Für die Verbreitung der Adressen ist der Verantwortlich der das Netz aufbaut. Ich schlage vor du beschreibst die Netzstruktur in groben Zügen und dann schauen wir mal wie wir das Problem lösen.
z.B.
DSL-Modem <--> Router <--> Clients
oder
Standleitung mit öffentlichen IP`s <--> Router/NAT <--> Clients

Jedenfalls gibt es keinen "Hallo wo ist mein DNS" Service, es sei den wie gesagt man richtet einen DHCP-Server in seinem Netz ein. Oder man fragt denjenigen der einen sagt welche IP-Adresse man benutzen kann, der muss auch wissen wo der DNS-Server steht.
 
Bei mir sieht es so aus: "DSL-Modem <--> Router <--> Clients".

Das Programm, welches ich schreiben soll, muss irgendwie die DNS des Providers nach /etc/resolv.conf schreiben, da ich noch eigene DNS habe, die aber an den schluss der config müssen.

Sprich, wenn die DNS meiner server eintrage, und die meines Providers nicht in der Config steht, geht mein Internet nicht.

Mit der Hand geht es natürlich auch zu regeln, doch möchte ich ein Programm schreiben, welches das mit einem befehl übernimmt, da z.Z. an einem größeren Projekt gearbeitet wird.

Bloß wie ich die Provider-DNS bekomme, weiß ich eben nicht --> das ist das Problem.
 
Wenn es nur um die IP' s der DNS Server deines Providers geht, findest du die in der Regel auf deren Webseiten.

Wenn du aber eine Namensauflösung starten willst, dann installier dir doch die Devel Pakete von libadns und verwende diese in deinem Progtramm.
 
Ich denke hier ist eher sowas wie die Verwendung des SystemCalls "gethostbyname" per C++ gefragt.

Von wem jetzt die Namesauflösung kommt braucht dich eigentlich nicht weiter zu interessieren:

struct hostent *host_entry;
host_entry=gethostbyname("www.google.com");

wäre ein möglicher Beispielcode...
 
Ja, es geht um die IP's, bloß kann das Tool ja schlecht auf einer Website nachschauen...

@Haegar: Dein Code ist leider nicht das, was ich suche :-/
 
Nochmal, es gibt keinen Weg in einen Netzwerk den zuständigen DNS-Server abzufragen!
Diese Information, genauso wie der zuständige Router, müssen durch die Netzstruktur verbreitet werden. Entweder erhält eine Person die Informationen in Schriftform (Webseite, E-Mail, Papier) und konfiguriert die Clients manuell, oder der Client erhält diese Information von einen DHCP-Server bei der automatischen Netzwerkkonfiguration. Der DHCP-Server wiederum bekommt diese Adressen per manueller Konfiguration mitgeteilt.

Die normale Schnittstelle zwischen lokalen Netz und dem Provider stellt das Gerät dar, das sich beim Provider einwählt. Dieses bestitzt typischer Weise einen DNS-Proxy, manchmal auch DNS-Relay genannt, der im lokalen Netz eine feste Adresse besitzt und auf der anderen Seite direkt mit dem Netzwerk des Provider verbunden ist. Seine Aufgabe ist es die Anfragen aus dem lokalen Netz anzunehmen, an den Provider weiter zu leiten und die Antworten wieder an den richtigen Client zurück zu schicken. Und wie bekommt dieser Proxy die Adresse des Nameservers wohl, natürchlich per DHCP bei der Einwahl.

Wenn man einen Nameserverabfrage benötigt die ohne Kenntnis der Provider-DNS funktioniert, kann man einen eigenen Nameserver aufsetzen der die Abfrage über die root-hints auflöst.

So, wenn du dir mal anschaust wieviel mühe ich mir gebe dir die DNS-Auflösung zu erklären, solltest du dir vielleicht mal mehr Zeit nehmen dein eigentliches Problem zu beschreiben. Denn nochmal einmal werde ich nicht einen Vortrag über DNS halten, darüber gibt es genug Bücher und ich habe auch noch andere Hobbys.

D_Cent schrieb:
Das Programm, welches ich schreiben soll, muss irgendwie die DNS des Providers nach /etc/resolv.conf schreiben, da ich noch eigene DNS habe, die aber an den schluss der config müssen.
Eigene DNS, Linux, bind9?
Warum löst der interne DNS nicht auch externe Adressen auf(root-hints oder forwarding)?
Mehrere DNS-Server in der resolv.conf nur als fall back, denn der zweite DNS wird nur gefragt wenn der erste nicht erreichbar ist und nicht wenn einem die Antwort nicht gefällt.

D_Cent schrieb:
Sprich, wenn die DNS meiner server eintrage, und die meines Providers nicht in der Config steht, geht mein Internet nicht.
Ist das das ganze Problem?

D_Cent schrieb:
Bloß wie ich die Provider-DNS bekomme, weiß ich eben nicht --> das ist das Problem.
Es geht nicht und ich kann auch leider nicht zaubern!
 
Oben