Page 1 sur 2

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

Posté : mar. 20 nov. 2007 18:51
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 :)

Posté : mar. 20 nov. 2007 21:02
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.

Posté : mar. 20 nov. 2007 22:19
par SoilyThang
Merci pour ta reponsse , peut tu me faire un exemple s'il te plait ?

Posté : mer. 21 nov. 2007 10:00
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.

Posté : mer. 21 nov. 2007 10:35
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 :)

Posté : mer. 21 nov. 2007 11:55
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 ...

Posté : mer. 21 nov. 2007 12:30
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 ?

Posté : mer. 21 nov. 2007 12:38
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 ^^'

Posté : mer. 21 nov. 2007 12:41
par SoilyThang
Toujours po :'(

meme erreur .

j'ai trouvé ... une variable qui a été supprimé on ne sait pas pourquoi lol

Posté : mer. 21 nov. 2007 12:55
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

Posté : mer. 21 nov. 2007 13:10
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

Posté : mer. 21 nov. 2007 13:40
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.

Posté : mer. 21 nov. 2007 14:35
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 .

Posté : jeu. 22 nov. 2007 17:29
par SoilyThang
toujours personne pour le ftp ? :(

ou trouvé une solution pour blocké le script ou l'auto detruir a distance .

Posté : jeu. 22 nov. 2007 22:26
par sylvanie
http://www.autoitscript.com/forum/index ... hl=ftp.au3

tu y trouveras l'udf + un fichier exemple réalisant un put

Posté : ven. 23 nov. 2007 07:34
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 .

Posté : ven. 23 nov. 2007 19:16
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

Posté : ven. 23 nov. 2007 20:43
par SoilyThang
g bien mi les variables , mais il ne met rien sur le ftp .

Posté : ven. 23 nov. 2007 21:28
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

Posté : sam. 24 nov. 2007 07:54
par SoilyThang
g mis une msgbox a la fin de chaque fonction , il fait les 2 1ere mais pas la 3eme .