Existe-t-il un serveur DNS écrit en python où je peux facilement utiliser un backend personnalisé? Fondamentalement, je veux juste répondre à des recherches pour certains noms de domaine avec mes propres adresses IP, mais passer le reste des recherches sur un vrai serveur DNS.Serveur DNS Python avec backend personnalisé
Répondre
J'ai écrit une telle chose récemment, vous pouvez peut-être utiliser comme un exemple. Il utilise un DHT comme backend et y recherche tous les domaines .kad. Si vous remplacez simplement le P2PMapping
avec votre propre cartographie (par exemple une dict comme {'google.com' : '127.0.0.1'}
), il devrait faire ce que vous voulez.
"""
Created on 16.08.2010
@author: Jochen Ritzel
"""
import dht
from twisted.names import dns, server, client, cache
from twisted.application import service, internet
class P2PMapping(dht.EntangledDHT):
def __contains__(self, key):
return key.endswith('.kad')
class MapResolver(client.Resolver):
"""
Resolves names by looking in a mapping.
If `name in mapping` then mapping[name] should return a IP
else the next server in servers will be asked for name
"""
def __init__(self, mapping, servers):
self.mapping = mapping
client.Resolver.__init__(self, servers=servers)
self.ttl = 10
def lookupAddress(self, name, timeout = None):
# find out if this is a .kad. request
if name in self.mapping:
result = self.mapping[name] # get the result
def packResult(value):
return [
(dns.RRHeader(name, dns.A, dns.IN, self.ttl, dns.Record_A(value, self.ttl)),),(),()
]
result.addCallback(packResult) # put it in a A Record
return result
else:
return self._lookup(name, dns.IN, dns.A, timeout)
## this sets up the application
application = service.Application('dnsserver', 1, 1)
## set up the DHT
mapping = P2PMapping(bootstrap=[('127.0.0.1', 4001)])
mapping['jochen.kad'] = '99.99.99.99' # "register" domain with IP
# set up a resolver that uses the mapping or a secondary nameserver
p2presolver = MapResolver(mapping, servers=[('192.168.178.1', 53)])
# create the protocols
f = server.DNSServerFactory(caches=[cache.CacheResolver()], clients=[p2presolver])
p = dns.DNSDatagramProtocol(f)
f.noisy = p.noisy = False
# register as tcp and udp
ret = service.MultiService()
PORT=53
for (klass, arg) in [(internet.TCPServer, f), (internet.UDPServer, p)]:
s = klass(PORT, arg)
s.setServiceParent(ret)
# run all of the above as a twistd application
ret.setServiceParent(service.IServiceCollection(application))
# run it through twistd!
if __name__ == '__main__':
import sys
print "Usage: twistd -y %s" % sys.argv[0]
est-il possible de lancer ceci sans appeler twistd? c'est-à-dire le mettre dans un fil de mon application. Cela rendrait beaucoup plus facile de répondre aux requêtes DNS. – Mononofu
Beaucoup de gens vous conseilleraient de l'écrire en Twisted, et en ajoutant une personnalisation afin que vous puissiez répondre à une demande vous-même si vous le souhaitez. Quelques liens:
http://twistedmatrix.com/documents/10.1.0/names/howto/names.html
http://twistedmatrix.com/documents/10.1.0/api/twisted.names.dns.DNSDatagramProtocol.html
merci pour la suggestion, mais je ne sais pas comment ajouter une telle personnalisation (actuellement la recherche) - pourriez-vous me donner un indice? – Mononofu
En fait, j'ai trouvé une méthode encore plus simple: PowerDNS avec le back-end de conduite:
http://doc.powerdns.com/pipebackend-dynamic-resolution.html
http://doc.powerdns.com/backends-detail.html#PIPEBACKEND
installer uniquement le serveur PowerDNS, écrire un petit script qui transmet les requêtes à votre serveur et vous avez terminé.
- 1. Serveur DNS Python
- 2. DNS personnalisé sur WP7
- 3. Connexion d'un frontend Sproutcore et d'un backend Python personnalisé
- 4. Interrogation d'un serveur DNS personnalisé à l'aide de C
- 5. Comment construire un serveur DNS simple personnalisé en C/C++
- 6. utilisation émulateur Android -dns serveur
- 7. Problème avec le backend d'authentification personnalisé pour Django
- 8. iptables bloquant le serveur DNS
- 9. exemple pour dns python tordu
- 10. Comment résoudre DNS en Python?
- 11. asp.net avec backend java
- 12. Création d'un serveur DNS externe avec Windows Server 2008
- 13. Configurer DNS sur mon serveur web (BIND9)
- 14. L'interpréteur Python bloque les requêtes DNS multithread?
- 15. Comment définir le serveur DNS alternatif?
- 16. MINIX 3 en tant que serveur DNS?
- 17. DNS avec Regex Validating
- 18. Serveur HTTP Python avec XML-RPC
- 19. DNS - Route DNS pour le sous-dossier vers un serveur différent?
- 20. DCHP avec backend de base de données
- 21. Comment obtenir l'adresse du serveur DNS qui getaddrinfo requêtes
- 22. Client HTML/javascript avec un backend REST
- 23. serveur de VMWare 2.0.0 et vista 64bit DNS dosnt résoudre
- 24. Comment supprimer une zone DNS avec WMI
- 25. La bibliothèque DNS la plus rapide pour python
- 26. Packets de réponse DNS
- 27. Domaine personnalisé avec Joomla
- 28. Python + DNS: Impossible d'obtenir les enregistrements RRSIG: Pas de réponse
- 29. Umbraco: Backend User Control
- 30. Impossible de résoudre DNS
Pratiquement tout serveur DNS (Python ou non) le fera s'il est configuré correctement. Avez-vous un très grand nombre de domaines dont vous aurez besoin, disons, d'une base de données SQL pour eux? – kindall