twisted.names, c'est tout pourri

Oukaidi Oukaida

darcs-hash:20050301190734-d1718-66f862145fe054385991816ddb5e754c858440ba.gz
This commit is contained in:
bernat 2005-03-01 20:07:34 +01:00
parent d49a5e0ffb
commit 9ae7da34fe

View file

@ -37,13 +37,14 @@
# TODO: meilleure gestion des erreurs
import commands,re
# On utilise twisted
# http://twistedmatrix.com/documents/current/howto/tutorial/intro
from twisted.internet import protocol, reactor, defer, utils
from twisted.internet.ssl import ContextFactory
from twisted.protocols import basic
from twisted.application import internet, service
from twisted.names import client
from twisted.python import log
import sys, resource
@ -143,10 +144,7 @@ class UpdateFactory(protocol.ServerFactory):
def reset_host(self, host):
# ETAPE 1
# On commence par résoudre "host".
d = client.lookupPointer("%s.in-addr.arpa" % '.'.join(host.split('.')[::-1]))
d.addCallback(lambda (ans, auth, add), _ : reset_del(self, ans[0].payload.name),
lambda _: reset_del(self, "unknown"))
return d
return defer.succeed(reset_del(self, RE.get_reverse(host)))
def reset_del(self, host):
# ETAPE 2
@ -200,11 +198,7 @@ class UpdateFactory(protocol.ServerFactory):
def getSAD_host(self, getre, delre, host):
# ETAPE 1
# On commence par résoudre "host".
d = client.lookupPointer("%s.in-addr.arpa" % '.'.join(host.split('.')[::-1]))
d.addCallback(lambda (ans, auth, add), _ : getSAD_lock(self, getre, delre,
ans[0].payload.name),
lambda _: getSAD_lock(self, getre, delre, "unknown"))
return d
return getSAD_lock(self, getre, delre, RE.get_reverse(host))
def getSAD_lock(self, getre, delre, host):
# ETAPE 2
@ -263,7 +257,7 @@ class UpdateFactory(protocol.ServerFactory):
remove_lock('gen_confs.wifi')
if len(result) > 5:
print "We send the following script :"
print "We send the following script to %s :" % host
print result
return result
@ -274,6 +268,40 @@ class UpdateFactory(protocol.ServerFactory):
# Corps du programme
class ReverseEngine:
import time
def __init__(self):
self.iphost = None
self.lastupdate = 0
def get_reverse(self,ip):
def build_reverse(server="138.231.136.6"):
"""Construit une correspondance IP -> nom"""
pattern = re.compile("^(.*).in-addr.arpa domain name pointer (.*)\.")
result = {}
for line in commands.getoutput("host -l 148.231.138.in-addr.arpa %s" % server).split("\n"):
mo = pattern.match(line.strip())
if mo:
ip = ".".join(mo.group(1).split(".")[::-1])
result[ip] = mo.group(2)
return result
current = time.time()
if not self.iphost or current - self.lastupdate > 60:
self.iphost = build_reverse()
self.lastupdate = current
if ip not in self.iphost:
return "unknown"
else:
return self.iphost[ip]
RE = ReverseEngine()
# On augmente la limite soft (qui semble arreter python).
# Sous Open, on peut utiliser fstat pour voir les fichiers ouverts.
# On a besoin de 3 * nombre de bornes pour le nombre de descripteurs