Ich muss einen benutzerdefinierten einfachen nicht autorisierenden Caching-DNS-Server in C/C++ erstellen. Irgendeine Anleitung? Links? Proben? Danke!Erstellen eines benutzerdefinierten einfachen DNS-Servers in C/C++
Antwort
Es gibt keinen "einfachen" Cache-DNS-Server, besonders wenn Sie anständige Sicherheit wünschen. Aktuelle DNS-Angriffe haben gezeigt, dass die Cache-Funktion in rekursiven DNS-Servern besonders anfällig ist.
Überprüfen Sie, ob Sie tatsächlich einen lokalen Cache benötigen. Wenn Sie dies nicht tun, sollten Sie den vorhandenen DNS-Proxy-Code (z. B. "dnsmasq") wahrscheinlich besser ändern.
Wenn Sie selbst rollen wollen, gibt es gute Bibliotheken wie ldns
, die den Zugriff auf die zugrunde liegenden DNS-Pakete bieten können.
Ich benutze ldns
mich in Verbindung mit libevent
, um den fuzzing DNS-Server zu implementieren, den ich in einer früheren Frage erwähnte.
Beginnen Sie mit djbdns.
Ich würde vorsichtig sein. Die Software von djb hat sehr restriktive Lizenzen. Stellen Sie sicher, dass es mit Ihrer beabsichtigten Verwendung übereinstimmt. – SingleNegationElimination
djbdns ist jetzt Public Domain, aber ich würde es immer noch nicht verwenden ... – Alnitak
Es gibt eine Reihe von freien Software-Implementierungen von DNS. Sie können sich ihren Quellcode ansehen. Zum Beispiel:
Das Buch DNS and BIND könnte hilfreich sein. Und natürlich gibt es RFCs, die DNS spezifizieren, siehe http://rfc-editor.org/.
Alternativ können Sie die Ragel State Machine Compiler verwenden, um Ihren Server von Grund auf neu zu erstellen.
State Machine ist ein sehr kleiner Teil eines Servers Code ... – bortzmeyer
Für etwas durch eine sehr strenge Spezifikation wie ein DNS-Server definiert, ist es ein wesentlicher (und wohl der wichtigste) Teil. –
Wenn Sie wirklich, dass tun müssen, um (es ist eine riesige Arbeit, Alnitak Antwort sehen), starten Sie aus einem vorhandenen gut Programm (keine Ein-Mann-Experiment nicht gewartet für eine lange Zeit wie djbdns) und ändern es.
Unbound ist wahrscheinlich eine vernünftige Wahl dafür. (Die Codebasis ist kleiner als BINDs.)
Hinweis für die Leser: Denken Sie daran, Downvotes zu ignorieren, wenn es keinen Kommentar zu deren Erläuterung gibt. – bortzmeyer
Die Software von djb war regelmäßig dafür bekannt, sich normwidrig zu verhalten, weil er allgemein davon überzeugt war, dass sein Weg besser ist als die Standards, und dass er auch die Existenz ernsthafter Probleme mit Remote-Privilegien in seinem Code bestreitet. Zusammen mit der langen Zeit, während der djbdns völlig nicht gepflegt wurde, glaube ich, dass diese Faktoren es für bortzmeyer vollkommen fair machen, es als "Ein-Mann-Experiment, das lange Zeit nicht gepflegt wurde" zu nennen und seinen Einsatz in nicht-hobbyistischen Umgebungen zu verhindern. –
Ich schrieb einen grundlegenden DNS-Server für ein Vorstellungsgespräch unter BSD-Lizenz.
Vielleicht jemand es nützlich finden könnte:
- 1. Erstellen eines einfachen Datenbankschemas
- 2. Erstellen eines einfachen SQL-Triggers
- 3. Erstellen eines einfachen Texteditors in Java
- 4. Erstellen eines einfachen Rechners in HTML
- 5. Erstellen eines einfachen Webbrowsers in Monodroid
- 6. Erstellen eines einfachen Umsatzrechners in Java-Code
- 7. Erstellen eines einfachen Primzahlsiebs in Python
- 8. Erstellen eines benutzerdefinierten OnClickListener
- 9. Erstellen eines benutzerdefinierten EingabeTyps
- 10. Gson, Erstellen eines einfachen JsonArray von JsonObjects
- 11. Erstellen eines benutzerdefinierten Ubuntu-Daemon
- 12. Erstellen eines einfachen E-Mail-/Messaging-Datenbankschemas
- 13. Erstellen eines benutzerdefinierten d3-Layouts
- 14. Erstellen eines benutzerdefinierten Formular-Designers
- 15. Erstellen eines benutzerdefinierten SAML-Tokens
- 16. WPF - Erstellen eines benutzerdefinierten ItemsControls
- 17. Asp.net Mvc: Erstellen eines einfachen cms
- 18. Android Studio - Erstellen eines einfachen Zeitplans
- 19. Erstellen eines benutzerdefinierten JSON-Array
- 20. Erstellen eines benutzerdefinierten Builds in Dojo 1.7.2
- 21. Erstellen eines benutzerdefinierten JButton in Java
- 22. Erstellen eines benutzerdefinierten Layout in Logback
- 23. Erstellen eines benutzerdefinierten Stat-Objekts in ggplot2
- 24. Erstellen eines benutzerdefinierten Bildformats in Java
- 25. Erstellen eines benutzerdefinierten TabPage-Steuerelements in C#
- 26. Erstellen eines benutzerdefinierten Formulars in Active Admin
- 27. Erstellen eines benutzerdefinierten Bootstrap/Bootloader in C#
- 28. Erstellen eines "benutzerdefinierten" Soap-Clients in Flex
- 29. Erstellen eines benutzerdefinierten Authentifizierungssystems in Laravel
- 30. Erstellen Sie einen einfachen POP3 * -SERVER *
Warum auf der Erde könnten Sie möglicherweise benötigen, um Ihre eigenen DNS-Server zu bauen? –
Ursache Ich brauche einen DNS-Server mit einigen nicht standardmäßigen Funktionen –
Ich würde dringend empfehlen, dass Sie nach alternativen Lösungen suchen, aber wenn dies der Weg ist, müssen Sie gehen ... djbdns ist Public Domain, so dass Sie es alles hacken können. –