Browse Source

Upload Initial

master
root 2 years ago
commit
e591980a4f
2 changed files with 99 additions and 0 deletions
  1. +2
    -0
      README.md
  2. +97
    -0
      server.py

+ 2
- 0
README.md View File

@@ -0,0 +1,2 @@
Scripts Python pour mettre a jour automatiquement un DNS.
Partie Serveur

+ 97
- 0
server.py View File

@@ -0,0 +1,97 @@
#!/usr/bin/env python


import socket
import sys
from Crypto.Cipher import AES
import base64
import random
import threading

key="fhgjkleopmlk,hgj"
enc = AES.new(key[:32])
chaine = 'abcdefghijklmnopqrstuvwxyz'
fichier_zone = "/etc/bind/zones/db.debugo.fr.extra"
change = 0

def encrypt(clear):
temp = (str(clear) + (AES.block_size - len(str(clear)) % AES.block_size) * "\0")
crypt = base64.b64encode(enc.encrypt(temp))
return crypt

def decrypt(crypt):
temp = enc.decrypt(base64.b64decode(crypt))
clear = temp.rstrip("\0")
return clear

class ClientThread(threading.Thread):
def __init__(self, ip, port, clientsocket):
threading.Thread.__init__(self)
self.ip = ip
self.port = port
self.clientsocket = clientsocket

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,26)
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
fichier=open(fichier_zone, 'r') # on ouvre le fichier
new_line=[] # on prepare une liste vide qui va contenir les changements
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"
line = s.join(item)+"\n" # on reforme la ligne
if "home" in item: # si un des items est le mot home
if item[3] != self.ip : # Si IP differente
change = 1
item[3] = self.ip+"\n"
s = "\t"
line = s.join(item)
new_line.append(line)
if change == 1 :
# deplacere l'ancien fichier en old
# deplacer le nouveau fichier
# relancer bind
newfichier = open('/srv/new.txt', 'w')
for nw in new_line :
newfichier.write(nw)
# Copie de l'ancien fichier vers un backup

# Deplacer le nouveau fichier

# Recharger Bind

fichier.close
else :
error = 1

tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcpsock.bind(("",79))

while True:
tcpsock.listen(5)
# print( "En ecoute")
(clientsocket, (ip, port)) = tcpsock.accept()
newthread = ClientThread(ip, port, clientsocket)
newthread.start()

tcpsock.close()

Loading…
Cancel
Save