示例#1
0
文件: fctsMntc.py 项目: anon1892/WTP
def creerFichier():
    # Fonction qui va s'executer via la maintenance assez régulièrement
    # Elle regarde dans le dossier ADDFILES si il y a des files
    # Si oui, elle les copie dans le dossier HOSTEDFILES, les renomme de type SHA256.extention
    # Elle envoie vers la fonction contenue dans BDD.py qui va ajouter les files à la base de données
    # Et pour finir, elle supprime les files ajoutés de façon à ce que le dossier ADDFILES soit vide.
    repertoire = "ADDFILES"
    # Vérifier si le dossier ADDFILES existe, sinon le créer
    try:
        os.makedirs("ADDFILES")
    except OSError:
        if not os.path.isdir("ADDFILES"):
            raise
    # Vérifier si le dossier HOSTEDFILES existe, sinon le créer
    try:
        os.makedirs("HOSTEDFILES")
    except OSError:
        if not os.path.isdir("HOSTEDFILES"):
            raise
    dirs = os.listdir(repertoire)
    # This would print all the files and directories
    for file in dirs:
        file = repertoire + "/" + file
        if os.path.isfile(file):
            # L'élément est un file, c'est bon (et pas un dossier)
            try:
                with open(file, "rb") as fluxLecture:
                    contenu = fluxLecture.read()
                    fluxLecture.close()
            except UnicodeDecodeError:
                logs.addLogs("ERROR : The file is not supported : " +
                             str(file))
                os.remove(file)
            else:
                shaFichier = hashlib.sha256(str(contenu).encode()).hexdigest()
                osef, extention = os.path.splitext(file)
                filename = shaFichier + extention
                fileDir = "HOSTEDFILES/" + filename
                fluxEcriture = open(fileDir, "wb")
                fluxEcriture.write(contenu)
                fluxEcriture.close()
                os.remove(file)
                # L'ajouter à la BDD
                BDD.ajouterEntree("Fichiers", filename)
                logs.addLogs(
                    "INFO : A new hosted file has been added successfully : " +
                    filename)
                # On transmet à quelques noeuds l'information
                tableau = BDD.aleatoire("Noeuds", "IP", 15, "Parser")
                if isinstance(tableau, list) and len(tableau) == 15:
                    # On envoi la request à chaque noeud sélectionné
                    for peerIP in tableau:
                        connNoeud = autresFonctions.connectionClient(peerIP)
                        if str(connNoeud) != "=cmd ERROR":
                            logs.addLogs(
                                "INFO : Connection with peer etablished")
                            request = "=cmd newFileNetwork name " + filename + " ip " + str(
                                config.readConfFile("MyIP")) + str(
                                    config.readConfFile("defaultPort"))
                            request = request.encode()
                            connNoeud.send(request)
                            rcvCmd = connNoeud.recv(1024)
                            connNoeud.close()
                            if rcvCmd == "=cmd noParser":
                                # Il faut changer le paramètre du noeud, il n'est pas parseur mais simple
                                BDD.supprEntree("Noeuds", peerIP)
                                BDD.ajouterEntree("Noeuds", peerIP)
                            elif rcvCmd != "=cmd fileAdded":
                                # Une erreur s'est produite
                                logs.addLogs(
                                    "ERROR : The request was not recognized in creerFichier() : "
                                    + str(rcvCmd))
                        else:
                            logs.addLogs(
                                "ERROR : An error occured in creerFichier() : "
                                + str(connNoeud))
                else:
                    # Une erreur s'est produite
                    logs.addLogs(
                        "ERROR : There is not enough IP in creerFichier() : " +
                        str(tableau))
示例#2
0
文件: launcher.py 项目: anon1892/WTP
 if (str(config.readConfFile("Parser")) == "True"):
     # Le noeud est un parseur, on lance la fonction.
     ThrdParser = Parser()
     ThrdParser.start()
 if (str(config.readConfFile("DNS")) == "True"):
     # Le noeud est un DNS, on lance la fonction.
     ThrdDNS = ServDNS()
     ThrdDNS.start()
 if (str(config.readConfFile("VPN")) == "True"):
     # Le noeud est un VPN, on lance la fonction.
     ThrdVPN = ServVPN()
     ThrdVPN.start()
 #ThrdBrd = Bridge()
 #ThrdBrd.start()
 # On indique notre présence à quelques parseurs
 tableau = BDD.aleatoire("Noeuds", "IP", 15, "Parser")
 if isinstance(tableau, list) and tableau:
     # On envoi la request à chaque noeud sélectionné
     for peerIP in tableau:
         peerIP = peerIP[0]
         connNoeud = autresFonctions.connectionClient(peerIP)
         if str(connNoeud) != "=cmd ERROR":
             logs.addLogs("INFO : Connection with peer etablished")
             request = "=cmd newPeerNetwork ip " + str(
                 config.readConfFile("MyIP")) + str(
                     config.readConfFile("defaultPort"))
             request = request.encode()
             connNoeud.send(request)
             rcvCmd = connNoeud.recv(1024)
             connNoeud.close()
             if rcvCmd == "=cmd noParser":
示例#3
0
文件: search.py 项目: anon1892/WTP
def searchFile(fileName):
    # Fonction qui a pour but de chercher sur le réseau un file
    # Il faut d'abord chercher dans la BDD, et si il n'y est pas on cherche plus spécifiquement
    # IPpeerPort est la variable qui contient l'IP Port du noeud qui possède le file
    BDD.verifExistBDD()
    IPpeerPort = ""
    conn = sqlite3.connect('WTP.db')
    cursor = conn.cursor()
    # On va chercher dans les files hébergés
    try:
        cursor.execute("""SELECT id FROM Fichiers WHERE Nom = ?""",
                       (fileName, ))
    except Exception as e:
        logs.addLogs("ERROR : Problem with database (searchFile()):" + str(e))
    rows = cursor.fetchall()
    for row in rows:
        boucle += 1
        # Le file est hébergé par le noeud qui le cherche
        ipPortIci = "127.0.0.1:" + str(config.readConfFile("defaultPort"))
        IPpeerPort = ipPortIci
    # Si le file n'a pas été trouvé
    # Il faut chercher dans les files connus externes
    try:
        cursor.execute("""SELECT IP FROM FichiersExt WHERE Nom = ?""",
                       (fileName, ))
    except Exception as e:
        logs.addLogs("ERROR : Problem with database (searchFile()):" + str(e))
    else:
        rows = cursor.fetchall()
        for row in rows:
            # Le file est hébergé par un noeud connu
            IPpeerPort = str(row)
    if IPpeerPort == "":
        # Il faut demander aux noeuds que l'on connait
        tblNoeuds = BDD.aleatoire("Noeuds", "IP", 10)
        # On a 10 noeuds dans le tableau
        # Maintenant, il faut vérifier que au moins la moitiée des noeuds choisis aléatoirement
        # sont des noeuds "simple", puis mettre les noeuds "simple" au début du tableau
        tableauNoeudsSimple = []
        tableauSuperNoeuds = []
        for noeud in tblNoeuds:
            # On verifie chaque noeud
            fonctionNoeud = chercherInfo("Noeuds", noeud)
            if fonctionNoeud == "simple":
                tableauNoeudsSimple.append(noeud)
            if fonctionNoeud == "supernoeud" or fonctionNoeud == "DNS":
                tableauSuperNoeuds.append(noeud)
        if len(tableauNoeudsSimple) < 6:
            # Il n'y a pas assez de noeuds simples dans la liste,
            # Il faut aller en rechercher
            logs.addLogs("WARNING : Not enough simple peers")
        # On ajoute les super noeuds après les noeuds simples
        tblNoeuds = tableauNoeudsSimple + tableauSuperNoeuds
        for noeudActuel in tblNoeuds:
            # À chaque noeud on demande si il a le file ou s'il connait un noeud qui l'a
            # Maintenant on se connecte au noeud
            error = 0
            connexion_avec_serveur = autresFonctions.connectionClient(
                noeudActuel)
            if str(connexion_avec_serveur) == "=cmd ERROR":
                error += 1
            else:
                sendCmd = b""
                sendCmd = "=cmd rechercherFichier nom " + fileName
                sendCmd = sendCmd.encode()
                connexion_avec_serveur.send(sendCmd)
                rcvCmd = connexion_avec_serveur.recv(1024)
                rcvCmd = rcvCmd.decode()
                connexion_avec_serveur.close()
                if rcvCmd != "0":
                    IPpeerPort = rcvCmd
                    break
    return IPpeerPort  # Peut retourner "" si il ne trouve pas d'hébergeur