[EX] Authentification sur une ou plusieurs machines

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
smirold
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 21 oct. 2011 08:54
Localisation : 94420 Le Plessis Trevise
Status : Hors ligne

[EX] Authentification sur une ou plusieurs machines

#1

Message par smirold »

bonjour à tous !

MISE A JOUR DU SCRIPT

J'ai apporté les modifications que m'a suggéré Sylvanie.

Ajout : Création d'un fichier réponse (à la racine du scripte) où sont stockées la ou les machines à atteindre.

Le scripte fonctionne parfaitement ! mais je pense que ma fonction _server_list() n'est pas très académique !

J'attend vos réactions :wink:


------------------------------------------------------------------------------------------------------------------------------

Voici mon premier script sous Autoit (soyer indulgent je débute en programmation :wink: )

Marre de taper votre Login/Password pour accéder à vos ressources distantes !
Ce script permet de s'authentifier sur une ou plusieurs machine, c'est à dire on va ouvrir un canal $IPC sur chaque machine.
Idem à la commande DOS : Net use \\MACHINE\IPC$ /user:mon_domaine\mon_utilisateur mon_password

On utilise le même login/password sur chaque machine, ces derniers sont cryptés et enregistrés dans la base de registre.

Vos commentaires et vos remarques sont les bienvenue pour améliorer ou optimiser le code !

Code : Tout sélectionner

#cs ----------------------------------------------------------------------------

 AutoIt Version : 3.3.6.1
 Auteur:         smirold

 Fonction du Script : Authentification automatique sur une ou plusieurs machines (ouverture d'un canal $IPC sur chaque machine)

#ce ----------------------------------------------------------------------------

#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <WinNet.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <String.au3>
#include <File.au3>
#include <Array.au3>
#include <Constants.au3>

Global $server


While 1

    $encrypt_login=RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\Connexion","login") ; récupération de la clé login dans la base de registre
    $encrypt_pass=RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\Connexion","pass") ; récupération de la clé pass par la base de registre

    $login=_StringEncrypt(0,$encrypt_login,"ùlggtjj54gh") ; décryptage de la variable $encrypt_login
    $pass=_StringEncrypt(0,$encrypt_pass,"guj554d255o") ; décryptage de la variable $encrypt_pass

    if $login<>"" Then ; test l'existence de la clé login dans la base de registre
        _server_list()
        _connexion()
    Else
        _save_login_pass() ; lancement de la fonction _save_login_pass : qui va permettre de saisir un nouveau login et mot de passe
    EndIf

WEnd

Func _connexion()

    GUICreate("Connexion",400,60,1,1,$WS_POPUPWINDOW,$WS_EX_TOPMOST) ; création d'une fenêtres pop-up où défilent les informations de connexion
    GUISetState()
    GUISetFont(12,400,"","Times New Roman")
    GUICtrlCreateLabel("Connexion au serveur "&$server[0]&" : En Cours...",20,30,400)
    GUICtrlSetColor(3,0x990A0A)
    GUICtrlCreateLabel("Veuillez patienter !",20,5,400)
    GUICtrlSetFont(4,14,100)

    For $i=0 To UBound($server) - 1

        GUICtrlSetData(3,"Connexion au serveur "& $server[$i] &" : En Cours...") ; mis à jour de la fenêtre pop-up

        _WinNet_AddConnection2("","\\"&$server[$i],$login,$pass,1) ; connexion au serveur

        If @error=53 then MsgBox (0+16,"Erreur","Le serveur "&$server[$i]&" est injoignable !"&@cr&@CR&"Connexion Impossible !") ; erreur de connexion : serveur injoignable

        If @error=1326 Or @error=1219 then
            MsgBox (0+16,"Erreur","Erreur de Login ou de mot de passe sur le serveur "&$server[$i]&@cr&@CR&"Connexion Impossible !") ; erreur de connexion : login ou mot de passe
            _save_login_pass() ; lancement de la fonction _save_login_pass : qui va permettre de saisir un nouveau login et mot de passe
        Else
            If @error<>0 Then MsgBox (0+16,"Erreur","Erreur de connexion sur le serveur "&$server[$i]&@cr&@CR&"Connexion Impossible !") ; erreur de connexion : autres
        EndIf
    Next

    Exit
EndFunc

Func _save_login_pass()

#Region ### START Koda GUI section ### Form=D:\Outils\Prog\Autoit\interfaces\win_login_pass.kxf
Global $win_login_pass = GUICreate("Paramètres de Connexion", 277, 164, -1, -1)
Global $lab_Login = GUICtrlCreateLabel("Nom d'utilisateur :", 24, 40, 100, 20)
Global $lab_pass = GUICtrlCreateLabel("Mot de Passe :", 24, 72, 75, 17)
Global $txt_login = GUICtrlCreateInput("", 114, 40, 121, 21)
Global $txt_pass = GUICtrlCreateInput("", 114, 72, 121, 21)
Global $bt_ok = GUICtrlCreateButton("OK", 56, 112, 75, 25)
Global $bt_cancel = GUICtrlCreateButton("Annuler", 152, 112, 75, 25)
Global $icon = GUICtrlCreateIcon("shell32.dll", 45, 1, 1)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1

  $login=GUICtrlRead($txt_login) ; lecture du login dans la boîte input $txt_login
  $pass=GUICtrlRead($txt_pass) ; lecture du boîte passe dans la boîte input $txt_pass
  $nMsg = GUIGetMsg()

 Switch $nMsg

  Case $GUI_EVENT_CLOSE
    Exit

  Case $bt_ok
    If $login="" Or $pass="" Then ; test si l'utilisateur à entrer un login ou un mot de passe
        MsgBox (0+16,"Erreur","Erreur vous devez indiquer un Login et un mot de passe !")
        ContinueLoop ; retour dans la boucle While
    EndIf

    $encrypt_login=_StringEncrypt(1,$login,"ùlggtjj54gh") ; cryptage de la variable $login
    $encrypt_pass=_StringEncrypt(1,$pass,"guj554d255o") ; cryptage de la variable $pass

    RegWrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Connexion","login","REG_SZ",$encrypt_login) ; écriture de la variable $encrypt_login dans la base de registre
    RegWrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Connexion","pass","REG_SZ",$encrypt_pass) ; écriture de la variable $encrypt_pass dans la base de registre
    ExitLoop

  Case $bt_cancel
    Exit

 EndSwitch


WEnd

GUIDelete()
EndFunc

Func _server_list()

    $source=@ScriptDir&"\server_list.txt"

    if Not FileExists ($source) Then ;test l'existence de server_list.txt sinon création
        $file=FileOpen($source,2)
        FileWrite($file,"#########################################################################" &@CR& _
                        "## FICHIER REPONSE DE : CONNEXION.EXE                                  ##" &@CR& _
                        "#########################################################################" &@CR& _
                        "## Indiquez ci-dessous le nom ou l'adresse IP des serveurs à atteindre ##" &@CR& _
                        "## Uniquement 1 serveur par ligne.                                     ##" &@CR& _
                        "#########################################################################" &@CR& "")
        MsgBox (0+16,"Erreur","Veuillez indiquer le nom du ou des serveurs"&@cr&@cr&"dans le fichier "&$source)
        Exit
    EndIf

    _FileReadToArray($source,$server) ;transfert lignes vers un tableau
    _ArrayDelete($server,0) ;suppression de $server[0]

    For $i=0 To UBound($server,1)

        If $server="" Then
            MsgBox (0+16,"Erreur","Veuillez indiquer le nom du ou des serveurs"&@cr&@cr&"dans le fichier "&$source)
            Exit
        EndIf

        $iIndex = _ArraySearch($server, "#", 0, 0, 0, 1) ;recherche ligne qui contient "#"

        If @error=6 Then ExitLoop ;exitloop quand il n'y a plus de "#"

        _ArrayDelete($server,$iIndex) ;suppression de la ligne qui contient "#"

    Next

EndFunc
Modifié en dernier par smirold le sam. 29 oct. 2011 00:10, modifié 16 fois.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [EX]authentification sur plusieurs serveurs

#2

Message par sylvanie »

Bonjour
Pour répondre à la question "chiffre 4", il faut utiliser Ubound($serv) qui renvoie la dimension du tableau $serv, puis lui retrancher 1 pour obtenir le 4 puisqu'on part de l'index 0

Sinon il serait bon dans une future version, d'entrer les serveurs dans un fichier de conf puis de le faire lire par l’exécutable pour éviter de recompiler le script à chaque fois qu'un nouveau serveur arrive, ou est retiré de la liste.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
smirold
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 21 oct. 2011 08:54
Localisation : 94420 Le Plessis Trevise
Status : Hors ligne

Re: [EX] Authentification sur plusieurs serveurs

#3

Message par smirold »

Mise a jour
voir Premier Post
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [EX] Authentification sur une ou plusieurs machines

#4

Message par pierrotm777 »

Je vous propose de remplacer dans votre fonction _server_list() les @cr par des @crlf :D
► Afficher le texte
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [EX] Authentification sur une ou plusieurs machines

#5

Message par pierrotm777 »

Je vous propose l'ajout d'un ip si aucun n'existe dans votre liste:
► Afficher le texte
Avatar du membre
TopXm
Niveau 6
Niveau 6
Messages : 260
Enregistré le : mer. 25 mai 2011 16:37
Localisation : Cognac !!!
Status : Hors ligne

Re: [EX] Authentification sur une ou plusieurs machines

#6

Message par TopXm »

Hello :)

Perso pour des petits fichiers de configuration je passe par des .ini
► Afficher le texteExemple utilisation d'un INI
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [EX] Authentification sur une ou plusieurs machines

#7

Message par zeshrek »

Je peux poser une question idiote ?
Ce script, fondamentalement, il sert a quoi ? Un mappage persistent des chemins vers un disque fait la même chose.
J'ai l'impression que c'est un peu réinventer la roue, ou alors j'ai loupé un truc ?
Si vis pacem para bellum
Avatar du membre
smirold
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 21 oct. 2011 08:54
Localisation : 94420 Le Plessis Trevise
Status : Hors ligne

Re: [EX] Authentification sur une ou plusieurs machines

#8

Message par smirold »

Merci pour vos réponses !
zeshrek a écrit :Je peux poser une question idiote ?
Ce script, fondamentalement, il sert a quoi ? Un mappage persistent des chemins vers un disque fait la même chose.
J'ai l'impression que c'est un peu réinventer la roue, ou alors j'ai loupé un truc ?
Ce scripte me sert à m'authentifier automatiquement sur une dizaine de serveurs de fichier différent, ça m'évite de taper mon mot de passe quand je veux accéder à un partage précis sur tel ou tel serveur. Non il n'y a pas de mappage, car trop de ressources disponible sur chaque serveur !
Alors certes, ce scripte n'aura aucun intérêt pour certain, mais pour ma part il m'est nécessaire !
Répondre