|
|
@@ -6,12 +6,13 @@ from Crypto.Cipher import AES |
|
|
|
import base64 |
|
|
|
import random |
|
|
|
import threading |
|
|
|
from subprocess import call |
|
|
|
|
|
|
|
key="fhgjkleopmlk,hgj" |
|
|
|
enc = AES.new(key[:32]) |
|
|
|
chaine = 'abcdefghijklmnopqrstuvwxyz' |
|
|
|
fichier_zone = "/etc/bind/zones/db.debugo.fr.extra" |
|
|
|
change = 0 |
|
|
|
code = 'toto' |
|
|
|
|
|
|
|
def encrypt(clear): |
|
|
|
temp = (str(clear) + (AES.block_size - len(str(clear)) % AES.block_size) * "\0") |
|
|
@@ -32,32 +33,18 @@ class ClientThread(threading.Thread): |
|
|
|
|
|
|
|
def run(self): |
|
|
|
# print("Connection de %s sur le port %s" % (self.ip, self.port, )) |
|
|
|
# Random sur la chaine |
|
|
|
l = list(chaine) |
|
|
|
random.shuffle(l) |
|
|
|
random_chaine = ''.join(l) |
|
|
|
# Envoi de la chaine randomisee au client |
|
|
|
# print ("J'envoie la chaine randomise au client : %s" % (random_chaine)) |
|
|
|
self.clientsocket.send(encrypt(random_chaine)) |
|
|
|
# Choix d'un chiffre au hasard et d'une lettre en fonction |
|
|
|
random_indice = random.randint(1,25) |
|
|
|
random_carac = random_chaine[random_indice] |
|
|
|
self.clientsocket.send(encrypt(random_carac)) |
|
|
|
# print ("Je veux l'indice du caractere : %s" % (random_carac)) |
|
|
|
# print ("Le client doit donc me renvoyer : %s" % (random_indice)) |
|
|
|
# Reception |
|
|
|
r = decrypt(self.clientsocket.recv(2048)) |
|
|
|
print ("Le client a envoye : %s" % (r)) |
|
|
|
if int(r) == int(random_indice): # Si le client a bien repondu |
|
|
|
# print ("Le client a envoye : %s" % (r)) |
|
|
|
if r == code: # Si le client a bien repondu |
|
|
|
change = 0 |
|
|
|
fichier=open(fichier_zone, 'r') # on ouvre le fichier |
|
|
|
new_line=[] # on prepare une liste vide qui va contenir les changements |
|
|
|
fichier=open(fichier_zone, 'r') # on ouvre le fichier |
|
|
|
new_line=[] # on prepare une liste vide qui va contenir le fichier |
|
|
|
s = "\t" # Separateur pour la suite... |
|
|
|
for line in fichier: # on lit chaque ligne |
|
|
|
item = line.split() # chaque element de la ligne est mis dans une liste |
|
|
|
if "Serial" in item: # si un des items est le mot serial |
|
|
|
item[0] = int(item[0]) + 1 # on incremente |
|
|
|
item[0] = "\t"+str(item[0]) # on rajoute la tabulation devant |
|
|
|
s = "\t" |
|
|
|
#s = "\t" |
|
|
|
line = s.join(item)+"\n" # on reforme la ligne |
|
|
|
if "home" in item: # si un des items est le mot home |
|
|
|
print item[3] |
|
|
@@ -65,18 +52,19 @@ class ClientThread(threading.Thread): |
|
|
|
if item[3] != self.ip : # Si IP differente |
|
|
|
change = 1 |
|
|
|
item[3] = self.ip+"\n" |
|
|
|
s = "\t" |
|
|
|
#s = "\t" |
|
|
|
line = s.join(item) |
|
|
|
new_line.append(line) |
|
|
|
new_line.append(line) # On ajoute la ligne |
|
|
|
if change == 1 : |
|
|
|
print "on change" |
|
|
|
# RESTE A FAIRE |
|
|
|
# deplacer l'ancien fichier en old |
|
|
|
# deplacer le nouveau fichier |
|
|
|
# relancer bind |
|
|
|
newfichier = open('/srv/new.txt', 'w') |
|
|
|
newfichier = open('/etc/bind/zones/new.txt', 'w') |
|
|
|
for nw in new_line : |
|
|
|
newfichier.write(nw) |
|
|
|
newfichier.close |
|
|
|
call(["cp", "/etc/bind/zones/db.debugo.fr.extra", "/etc/bind/zones/db.debugo.fr.extra.back"]) |
|
|
|
call(["rm", "/etc/bind/zones/db.debugo.fr.extra"]) |
|
|
|
call(["mv", "/etc/bind/zones/new.txt", "/etc/bind/zones/db.debugo.fr.extra"]) |
|
|
|
call (["rndc reload"]) |
|
|
|
fichier.close |
|
|
|
else : |
|
|
|
error = 1 |