You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.6KB

  1. #!/usr/bin/env python
  2. import socket
  3. import sys
  4. from Crypto.Cipher import AES
  5. import base64
  6. import random
  7. import threading
  8. from subprocess import call
  9. key="abcdefghijklmno" #(sur 16 carac. !)
  10. enc = AES.new(key[:32])
  11. fichier_zone = "/etc/bind/zones/db.debugo.fr.extra"
  12. code = 'toto'
  13. def encrypt(clear):
  14. temp = (str(clear) + (AES.block_size - len(str(clear)) % AES.block_size) * "\0")
  15. crypt = base64.b64encode(enc.encrypt(temp))
  16. return crypt
  17. def decrypt(crypt):
  18. temp = enc.decrypt(base64.b64decode(crypt))
  19. clear = temp.rstrip("\0")
  20. return clear
  21. class ClientThread(threading.Thread):
  22. def __init__(self, ip, port, clientsocket):
  23. threading.Thread.__init__(self)
  24. self.ip = ip
  25. self.port = port
  26. self.clientsocket = clientsocket
  27. def run(self):
  28. # print("Connection de %s sur le port %s" % (self.ip, self.port, ))
  29. # print ("Le client a envoye : %s" % (r))
  30. if r == code: # Si le client a bien repondu
  31. change = 0
  32. fichier=open(fichier_zone, 'r') # on ouvre le fichier
  33. new_line=[] # on prepare une liste vide qui va contenir le fichier
  34. s = "\t" # Separateur pour la suite...
  35. for line in fichier: # on lit chaque ligne
  36. item = line.split() # chaque element de la ligne est mis dans une liste
  37. if "Serial" in item: # si un des items est le mot serial
  38. item[0] = int(item[0]) + 1 # on incremente
  39. item[0] = "\t"+str(item[0]) # on rajoute la tabulation devant
  40. #s = "\t"
  41. line = s.join(item)+"\n" # on reforme la ligne
  42. if "home" in item: # si un des items est le mot home
  43. print item[3]
  44. print self.ip
  45. if item[3] != self.ip : # Si IP differente
  46. change = 1
  47. item[3] = self.ip+"\n"
  48. #s = "\t"
  49. line = s.join(item)
  50. new_line.append(line) # On ajoute la ligne
  51. if change == 1 :
  52. # print "on change"
  53. newfichier = open('/etc/bind/zones/new.txt', 'w')
  54. for nw in new_line :
  55. newfichier.write(nw)
  56. newfichier.close
  57. call(["cp", "/etc/bind/zones/db.debugo.fr.extra", "/etc/bind/zones/db.debugo.fr.extra.back"])
  58. call(["rm", "/etc/bind/zones/db.debugo.fr.extra"])
  59. call(["mv", "/etc/bind/zones/new.txt", "/etc/bind/zones/db.debugo.fr.extra"])
  60. call (["rndc reload"])
  61. fichier.close
  62. else :
  63. error = 1
  64. # A voir pour logger par la suite
  65. tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  66. tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  67. tcpsock.bind(("",79))
  68. while True:
  69. tcpsock.listen(5)
  70. # print( "En ecoute")
  71. (clientsocket, (ip, port)) = tcpsock.accept()
  72. newthread = ClientThread(ip, port, clientsocket)
  73. newthread.start()
  74. tcpsock.close()