[R] Lire un fichier sur un ftp via le script

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
SoilyThang
Niveau 3
Niveau 3
Messages : 43
Enregistré le : lun. 29 oct. 2007 21:20
Status : Hors ligne

[R] Lire un fichier sur un ftp via le script

#1

Message par SoilyThang »

Mon script est enfun fini :D

reste plus que la protection .

J'aimerais que a chaque démarage , le script verifie l'accé a internet , si non il quit et que le script aille verifié si un fichier ( X ) exist sur un ftp , et si le contenu du fichier correspond bien a une key que je lui orait donné .

Exemple , cette persone télécharge le script , je lui donne un code ( 3 par exemple : nom du fichier .txt ) qui se trouve sur un ftp , ensuite je lui donne une key ( s2a435s4a32x468456sa34 par exemple : qui se trouve dans le fichier .txt ) .

Si ce fichier exist et que le contenu du fichier est correct alor le script se lance .
si non il ne se lance pas et s'autodetruit directement .

J'aimerais aussi faire une historique de log . a chaque connection le script irai écrir dans un fichier ( qui se trouverai sur un ftp , exemple : log3.txt , ce qui correspond au nom du .txt que j'ai cité plus haut ) avec écriture de la date , heure + IP ( si possible ... ) ou une autre info qui pourait me dire si c'est toujours la meme personne ou cette personne fait tournée le script.

Aprés cela mon script sera fini pour de bon .

Je remercie quand meme déja ce forum pour toute l'aide qu'il ma apporter et je le remercie déja en avance pour la fin du script....


Soily :)
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

#2

Message par sylvanie »

pour une détection du WAN, _GetIP() te sera utile (également pour l'IP que tu veux dans le log de retours)

où alors, attaque directement le téléchargement via inetget, du coups si il n'y a pas de réseau, elle sortira en erreur.

pour le log de traçabilité, faudra passer par une udf ftp, je n'en connais pas ou ne m'en souviens plus, mais je sais que ça existe, voir forum anglais.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
SoilyThang
Niveau 3
Niveau 3
Messages : 43
Enregistré le : lun. 29 oct. 2007 21:20
Status : Hors ligne

#3

Message par SoilyThang »

Merci pour ta reponsse , peut tu me faire un exemple s'il te plait ?
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#4

Message par ani »

le ftp ...il n'est pas necessaire de passer par ce protocol... ce fichier se trouve sur un nom de domaine ? comme pour un site web ? le ftp ne sert qu'a transferer les données sur le site.

Dans le cas ou tu veux vraiment passer par le ftp, n'oublie pas que l'accés est soit anonymes ou privé et il sera plus facile pour certain d'aller visionner ou de prendre le fichier....

pour ma part je ferait comme pour l'exemple qui se trouve dans le dossier 3\Extras\AutoUpdateIt du nom de AutoUpdateIt.au3, cette exemple montre comment lire un fichier sur un domaine


>Pour la verification d'accés au net, tu peux faire un ping sur un adresse comme ci-dessous.

Code : Tout sélectionner

Func _verifNetExist()
Dim $InetActive = Ping("www.google.ca")
If Not $InetActive > 0 Then
MsgBox(4112, "Aucune connection !", "Vérifier que vos cables sont bien branché")
Else
MsgBox(0,"Activation","Soyez le ou la bienvenu(e)",3)
EndIf
EndFunc
y a d'autre maniere pour verifier si internet existe (wininet.dll/url.dll....), pour ma part j'utilise wininet (trouvé dans la documentation microsoft) et non ping :o

il faudra juste remplacer les msgbox par l'action désirée.
Modifié en dernier par ani le mer. 21 nov. 2007 21:14, modifié 1 fois.
SoilyThang
Niveau 3
Niveau 3
Messages : 43
Enregistré le : lun. 29 oct. 2007 21:20
Status : Hors ligne

#5

Message par SoilyThang »

c un nom de domaine genre : blablabla.trucmuch.com/xxxxxx/3txt

^^

pour le verifnet tu peut me mettre un exemple du wininet je verais lequel je prend

Merci :)
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#6

Message par ani »

....avec cette dll on a plusieur fonction dont le internetGetConnectedstate (y a déjà une librairie (include\inet.au3 mais il manque cette fonction :p )

Pour plus d'info allez sur le site microsoft car suis un noobs...
vu que je n'ai pas encore mi les divers global constantes (lan/modem/offline/configuration/Rasinstalled..., ni les retour d'erreur)

merci d'"avance au utilisateur les plus doué ;)

Code : Tout sélectionner

Func _IGetConnected()
$return = DllCall("WinInet.dll", "int", "InternetGetConnectedState", "int_ptr", 0, "int", 0)
If $return[0] = 0 Then
$return = MsgBox(0, "AUCUNE CONNECTION", "Verifié que vous avez accés au net")
Else
$return = connection($sz_Nom,$sz_pass,$URl)
EndIf
return $return
EndFunc
ensuite InternetCheckConnection ...
Modifié en dernier par ani le mer. 21 nov. 2007 13:42, modifié 2 fois.
SoilyThang
Niveau 3
Niveau 3
Messages : 43
Enregistré le : lun. 29 oct. 2007 21:20
Status : Hors ligne

#7

Message par SoilyThang »

il a bien l'air de detecté si internet ou pas , mais si ya internet il me met une erreur , line -1 elke chose , variable used without being declared . si non si ya pas internet il met bien la box .

g transformer le code en sa

Code : Tout sélectionner

Func _IGetConnected()
$answer = DllCall("WinInet.dll", "int", "InternetGetConnectedState", "int_ptr", 0, "int", 0)
If $answer = 0 Then
MsgBox(0, "AUCUNE CONNECTION", "Verifié que vous avez accés au net")
exit
Else
Start()
EndIf
Endfunc
erreur ?
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#8

Message par ani »

dans la lib on a deux parametre (le flag et le reserve les deux 0)
Correction du code

Code : Tout sélectionner

_IGetConnected()

Func _IGetConnected()
$answer = DllCall("WinInet.dll", "int", "InternetGetConnectedState", "int_ptr", 0, "int", 0)
If $answer[0] = 0 Then
$answer = MsgBox(0, "AUCUNE CONNECTION", "Verifié que vous avez accés au net")
Else
$answer = start()
EndIf
return $answer
EndFunc
Pour revenir a la lib wininet elle est composé de 94 fonctions + 6 fonctions de security.... une belle lib avec 100 fonctions ^^'
Modifié en dernier par ani le mer. 21 nov. 2007 13:12, modifié 3 fois.
SoilyThang
Niveau 3
Niveau 3
Messages : 43
Enregistré le : lun. 29 oct. 2007 21:20
Status : Hors ligne

#9

Message par SoilyThang »

Toujours po :'(

meme erreur .

j'ai trouvé ... une variable qui a été supprimé on ne sait pas pourquoi lol
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#10

Message par ani »

Peut-être la fonction start que tu a cree ?

Sinon la fonction wininet fonctionne très bien (mais comme je l'ai signalé suis un noobs donc, il manque les divers retour d'Erreur, sinon as tu essayé avec la version ping voir si il te retourne la même erreur?

Je n'avais pas fait attention, dans la fonction tu avait indiqué, exit juste après le msg, je l'ai retiré voir post
Modifié en dernier par ani le mer. 21 nov. 2007 13:44, modifié 1 fois.
SoilyThang
Niveau 3
Niveau 3
Messages : 43
Enregistré le : lun. 29 oct. 2007 21:20
Status : Hors ligne

#11

Message par SoilyThang »

probleme regler merci :D javai crée une fonction et donc une des variable ne marché plus , la tout marche :)

reste plus que l'histoir du log et du ftp :D
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#12

Message par ani »

log = voir chapitre macro et filewrite(line)

tu y tiend au ftp :)
est-il en anonyme ou privé ? si c'est privé sa signifie que tu va inscrire dans ton script (l'adress ftp + nom + pass) sa sent le dangé..

Pour le moment je n'ai pas fait de test sur mon domaine, ni l'exemple dont je t'avais promis, désolé :§,,,, c'est une mauvaise période, d'ici 14 jours je ne serait plus là pour une période indéterminé....

Bon cette fois je rentre chez moi à tantôt, d'ici une petite heure.
SoilyThang
Niveau 3
Niveau 3
Messages : 43
Enregistré le : lun. 29 oct. 2007 21:20
Status : Hors ligne

#13

Message par SoilyThang »

le ftp poura me garantir le controle du script , ( auto destruction a distance ) . le ftp est public . les dossiers son invisible , seul le téléchargement et la visuation des docs son autorisés .
SoilyThang
Niveau 3
Niveau 3
Messages : 43
Enregistré le : lun. 29 oct. 2007 21:20
Status : Hors ligne

#14

Message par SoilyThang »

toujours personne pour le ftp ? :(

ou trouvé une solution pour blocké le script ou l'auto detruir a distance .
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

#15

Message par sylvanie »

http://www.autoitscript.com/forum/index ... hl=ftp.au3

tu y trouveras l'udf + un fichier exemple réalisant un put
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
SoilyThang
Niveau 3
Niveau 3
Messages : 43
Enregistré le : lun. 29 oct. 2007 21:20
Status : Hors ligne

#16

Message par SoilyThang »

Merci , je pensse avoir trouvé . Reste quelque petit problemes de variables :

Code : Tout sélectionner

Func _FTPConnect($l_InternetSession = "ftp.xxxxxxx" , $s_ServerName = "ftp.xxxxxxxx" , $s_Username = "xxxxx" , $s_Password = "xxxx" , $i_ServerPort = 21 , $l_Service = 1, $l_Flags = 0, $l_Context = 0)
    
    Local $ai_InternetConnect = DllCall('wininet.dll', 'long', 'InternetConnect', 'long', $l_InternetSession, 'str', $s_ServerName, 'int', $i_ServerPort, 'str', $s_Username, 'str', $s_Password, 'long', $l_Service, 'long', $l_Flags, 'long', $l_Context)
    If @error OR $ai_InternetConnect[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
            
    Return $ai_InternetConnect[0]
    
EndFunc ;==> _FTPConnect()

Code : Tout sélectionner

Func _FTPMakeDir($l_FTPSession, $s_Remote)
    
    Local $ai_FTPMakeDir = DllCall('wininet.dll', 'int', 'FtpCreateDirectory', 'long', $l_FTPSession, 'str', $s_Remote)
    If @error OR $ai_FTPMakeDir[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
    
    Return $ai_FTPMakeDir[0]
    
EndFunc ;==> _FTPMakeDir()

Code : Tout sélectionner

Func _FTPPutFile($l_FTPSession, $s_LocalFile, $s_RemoteFile, $l_Flags = 0, $l_Context = 0)

    Local $ai_FTPPutFile = DllCall('wininet.dll', 'int', 'FtpPutFile', 'long', $l_FTPSession, 'str', $s_LocalFile, 'str', $s_RemoteFile, 'long', $l_Flags, 'long', $l_Context)
    If @error OR $ai_FTPPutFile[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
    
    Return $ai_FTPPutFile[0]
    
EndFunc ;==> _FTPPutFile()

Code : Tout sélectionner

Func _FTPClose($l_InternetSession)
    
    Local $ai_InternetCloseHandle = DllCall('wininet.dll', 'int', 'InternetCloseHandle', 'long', $l_InternetSession)
    If @error OR $ai_InternetCloseHandle[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
    
    Return $ai_InternetCloseHandle[0]
    
EndFunc ;==> _FTPClose()


Je ne sais pas quoi mettre pour les variables . j'ai esseyer sa mais sans resultat .
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

#17

Message par sylvanie »

issus du fichier exemple qui était fournit à côté de l'udf ...

Code : Tout sélectionner

$server = 'ftp.example.com'
$username = 'secretusers'
$pass = 'hiddenpass'

$Open = _FTPOpen('MyFTP Control')
$Conn = _FTPConnect($Open, $server, $username, $pass)
$Ftpp = _FtpPutFile($Conn, 'C:\WINDOWS\Notepad.exe', '/somedir/Example.exe')
$Ftpc = _FTPClose($Open)
 
ici, on ouvre la session, et on la stocke dans $Open, le 'MyFTP Control' est un nom quelconque pour ouvrir cette connexion, c'est un identifiant interne.
$server et l'adresse de ton serveur
$username et $pass ... no comment
et pour le _FtpPutFile, 1er arg, la session, 2eme : le chemin locale du fichier à envoyer, le 3eme : le chemein relatif sur le serveur FTP
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
SoilyThang
Niveau 3
Niveau 3
Messages : 43
Enregistré le : lun. 29 oct. 2007 21:20
Status : Hors ligne

#18

Message par SoilyThang »

g bien mi les variables , mais il ne met rien sur le ftp .
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

#19

Message par sylvanie »

y a t il eu connexion au serveur FTP, cf log du serveur ?

Qelles sont les valeurs retournées respectivement par

Code : Tout sélectionner

_FTPOpen
_FTPConnect
_FtpPutFile
afin de détecter à quel moment l'erreur a eu lieu ?

Faut commencer par ces diagnostiques
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
SoilyThang
Niveau 3
Niveau 3
Messages : 43
Enregistré le : lun. 29 oct. 2007 21:20
Status : Hors ligne

#20

Message par SoilyThang »

g mis une msgbox a la fin de chaque fonction , il fait les 2 1ere mais pas la 3eme .
Répondre