def scan_ports_utility():

    #On demande l'adresse ip à scanner et l'initialise dans une variable
    ip_to_check = input("Veuillez saisir l'adresse IP à scanner : ")

    # Bannière affichant l'IP à scanner + la date/heure
    print("-" * 50)
    print("Cible à scanner: " + ip_to_check)
    print("Le scan à commencé le :" + str(datetime.now()))
    print("-" * 50)

    #On fait un try pour vérifier le bon fonctionnement
    try:

        # On initialise une variable qui va passer de 1 à 65536
        for port in range(1, 65535):

            #Creation du socket de connexion
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            socket.setdefaulttimeout(1)

            # On retourne le résultat si on trouve un port
            result = s.connect_ex((ip_to_check, port))
            if result == 0:
                print("Le port {} est ouvert".format(port))
            s.close()

    #Si on presse Ctrl - C pour couper la fonctio nen cours, on affiche un message d'erreur
    except KeyboardInterrupt:
        print("\n Programme interrompu!")

    #On affiche le menu à la fin de la fonction
    display_menu.menu()
def scan_network_utility():

    #Creation du socket + utilisation du dns de google pour determiner mon ip et on la récupère dans une variable
    monip = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    monip.connect(("8.8.8.8", 80))
    monip = monip.getsockname()[0]

    #On affiche l'IP du PC
    print("Votre ip est :")
    print(monip)
    print("         ")

    #On récupère les 3 premiers octets de l'adresse IP
    monipexplode = monip.split('.')[0] + "." + monip.split(
        '.')[1] + "." + monip.split('.')[2] + "."

    #On fait un try pour vérifier le bon fonctionnement
    try:

        #On initialise une variable qui va passer de 1 à 254 à chaque saut
        for ping in range(1, 254):

            #On défini la variable contenant les 3 premiers octets et on y incrémente la variable ping allant de 1 à 254
            address = monipexplode + str(ping)

            #On effectue le test avec la commande ping et on envoi la sortie vers NULL (supprime l'affichage des lignes de commandes)
            FNULL = open(os.devnull, 'w')
            res = subprocess.call(['ping', '-c', '3', address],
                                  stdout=FNULL,
                                  stderr=subprocess.STDOUT)

            #Si la fonction trouve une IP (0=ok), on l'affiche ainsi que son nom d'hôte
            if res == 0:

                print("------------------------")
                print("IP trouvée : ", address)
                hostname = os.popen('dig -x ' + address + ' +short')
                print("Nom d'hôte : ", hostname.read())
                print("        ")

    #Si on presse Ctrl - C pour couper la fonction en cours, on affiche un message d'erreur
    except KeyboardInterrupt:
        print("\n Programme interrompu!")

    #On affiche le menu à la fin de la fonction
    display_menu.menu()
def script_linux():

    #On affiche ce que le script va faire
    print(" ------------------------------")
    print("Ce script permet de : ")
    print(" - réinitialiser le profil Utilisateur,")
    print(" - mettre à jour le système,")
    print(" - installer le paquet SSH,")
    print(" - créér l'utilisateur Admin",)
    print(" - regénèrer le nom d'hôte")
    print(" ------------------------------")

    #On demande à l'utilisateur de confirmer son choix
    confirm=input("Ce script supprimera le profil utilisateur et ses données, veuillez confirmer par o (oui) ou par n (non) : ")

    #Si son choix est "o" pour oui:
    if confirm == "o":

        #On affiche un message d'attente, on execute le script et on stock sa sortie (réponse du système) dans un fichier sortie.log
        print("Veuillez patienter, la commande s'exécute...")
        os.system("sudo ./script_linux.sh >sortie.log")

        #On stock le nom du fichier dans une variable, son contenu dans une autre et on affiche tout ce qui est écrit
        fichier = open('sortie.log', 'r')
        sortie = fichier.read()
        fichier.close()
        print (sortie)

        #On affiche le menu principal à la fin de la fonction
        display_menu.menu()

    #Si son choix est "n" pour non:
    elif confirm =="n":

        #On affiche un message d'avertissement et redirige vers le menu principal
        print ("Opération abandonnée")
        display_menu.menu()

    #Sinon on avertit l'utilisateur que le choix n'est pas défini, et on affiche à nouveau le début du script
    else:
        print ("Choix non défini")
        script_linux()
def connexion_ssh_utility():

    #On récupère les informations necessaires pour la connexion SSH
    ip = input("Veuillez saisir l'IP à laquelle se connecter : ")
    user = input("Veuillez saisir le nom d'utilisateur : ")

    #On affiche un message d'avertissement à l'utilisateur en mettant 3 seconde de délai
    print(
        "Vous allez basculer vers le terminal, merci de saisir le mot de passe et de saisir vos commandes en ssh"
    )
    print(
        "Si le nouveau terminal ne s'ouvre pas après 3 secondes, l'identifiant ou l'adresse IP n'est pas correct"
    )
    time.sleep(3)

    #On lance un terminal en ajoutant la commande ssh utilissateur@ip
    os.system("gnome-terminal -x ssh " + user + "@" + ip + "")

    #On affiche le menu à la fin de la fonction
    display_menu.menu()
def ping_utility():

    #On demande l'ip à ping
    ip_to_check = input("Veuillez saisir l'adresse IP à ping : ")

    #On initialise le ping dans une variable
    response = os.system("ping -c 1 " + ip_to_check)

    #Si cette variable renvoi 0 (ok), on stock "Ping ok" dans une variable
    if response == 0:
        pingstatus = "Ping OK"

    #Sinon on stock "Pas de ping" dans une variable
    else:
        pingstatus = "Pas de ping"

    #On affiche le resultat de la variable
    print("-" * 50)
    print(pingstatus)
    print("-" * 50)

    #On met un delai de 3 secondes avant d'afficher le menu à la fin de la fonction
    time.sleep(3)
    display_menu.menu()