Page 1 sur 1

[..] Souci pour télécharger un seul fichier... Protection ?

Posté : dim. 09 juil. 2017 21:48
par franco
Bonjour à toutes et à tous.

Pour faire simple : je me créai des scripts qui me permette de télécharger les applications installées sur mon PC...

Du style : 7zip, Agent Ransack, etc...


Et je me sers de deux méthodes pour récupérer le lien direct du fichier en question :
- En récupérant le code source.
- En utilisant les fonctions _IE (_IECreate & _IELinkGetCollection)


J'y arrive....


Mais il y a qu'un seul fichier dont je n'arrive pas à télécharger via un script...
Et... c'est : le fichier pack débutant FR de notre chef (^^)
=> https://www.autoitscript.fr/forum/viewtopic.php?t=2571
=> et donc : https://www.autoitscript.fr/download/in ... AutoIt-Fr/

Parlons de 7Zip :
1. Je le télécharge avec ce script (en récupérant le lien via le code source) :
#include <File.au3>
#include <Inet.au3>

$Destination = @DesktopDir & "\Mes programmes"

$lien = "http://www.7-zip.org/download.html"
$cs = "codesource.txt"
$cst = FileOpen($cs,2)
FileWrite($cst,_INetGetSource($lien))
FileClose($cst)

For $a = _FileCountLines($cs) to 1 step -1
   If StringInStr(FileReadLine($cs,$a),'-x64.exe') then $7zip_x64 = FileReadLine($cs,$a)
   If StringInStr(FileReadLine($cs,$a),'.exe') and not StringInStr(FileReadLine($cs,$a),'-x64.exe') then $7zip_x86 = FileReadLine($cs,$a)
Next
if @OSArch = "X86" then $7zip_exe = 'http://www.7-zip.org/'& _FindBetweenString($7zip_x86, '<A href="', '">Download')
If @OSArch <> "X86" then $7zip_exe = 'http://www.7-zip.org/'& _FindBetweenString($7zip_x64, '<A href="', '">Download')
$Fichier_7zip_T = @TempDir & "\7zip_inst.exe"
$Fichier_7zip = $Destination & "\7zip_inst.exe"

$myDL = InetGet($7zip_exe, $Fichier_7zip_T, 1, 1)
Do
   Sleep(250)
Until InetGetInfo($myDL, 2) ; Check if the download is complete.
Local $nBytes = InetGetInfo($myDL, 0)
InetClose($myDL) ; Close the handle to release resources.

If FileExists($Fichier_7zip_T) Then
   DirCreate($Destination)
   FileMove($Fichier_7zip_T, $Fichier_7zip, 1)
EndIf

FileDelete($cs)
ShellExecute($Destination)

Func _FindBetweenString($Line, $char1, $char2)
        $part1 = StringRegExpReplace($Line, "^.*" & $char1, "")
        $Term = StringRegExpReplace($part1, "\" & $char2 & ".*", "")
        Return SetExtended(1, $Term)
EndFunc   ;==>Fonction crée _FindBetweenString
2. Et sinon, je le télécharge comme ceci (en récupérant le lien avec les fonctions _IE citées précédemment ) :
#include <IE.au3>
#include <Inet.au3>

$Destination = @DesktopDir & "\Mes programmes"

$lien = "http://www.7-zip.org/download.html"
$oIE = _IECreate($lien, 1, 0)
$oLinks = _IELinkGetCollection($oIE)
Local $iNumLinks = @extended

While 1
   For $oLink In $oLinks
      If @OSArch <> "X86" Then
         If StringInStr($oLink.href, "-x64.exe") Then
            $7zip_exe = $oLink.href
            ExitLoop
         EndIf
      Else
         If Not StringInStr($oLink.href, "-x64.exe") And StringInStr($oLink.href, ".exe") Then
            $7zip_exe = $oLink.href
            ExitLoop
         EndIf
      EndIf
   Next
   ExitLoop
WEnd

$Fichier_7zip_T = @TempDir & "\7zip_inst.exe"
$Fichier_7zip = $Destination & "\7zip_inst.exe"

$myDL = InetGet($7zip_exe, $Fichier_7zip_T, 1, 1)
Do
   Sleep(250)
Until InetGetInfo($myDL, 2) ; Check if the download is complete.
Local $nBytes = InetGetInfo($myDL, 0)
InetClose($myDL) ; Close the handle to release resources.

If FileExists($Fichier_7zip_T) Then
   DirCreate($Destination)
   FileMove($Fichier_7zip_T, $Fichier_7zip, 1)
EndIf

ShellExecute($Destination)
Ces deux scripts fonctionnent:


Par contre, j'utilise la méthode avec les fonctions _IE.
Malgré que je récupère bien le bon lien : impossible de le télécharger, comme je le fais avec 7zip


#include <IE.au3>
#include <File.au3>
#include <Inet.au3>

$Destination = @DesktopDir & "\Mes programmes"

$lien = "https://www.autoitscript.fr/download/download/AutoIt_Addon/Pack_AutoIt-Fr/"
$oIE = _IECreate($lien, 1, 0)
$oLinks = _IELinkGetCollection($oIE)
Local $iNumLinks = @extended

For $oLink In $oLinks
   If StringInStr($oLink.href, ".exe") Then $AutoIt_tlem_exe = $oLink.href
Next
$Fichier_AutoitTlem_T = @TempDir & "\AutoitTlem_inst.exe"
$Fichier_AutoitTlem = $Destination & "\AutoitTlem_inst.exe"

   $myDL = InetGet($AutoIt_tlem_exe, $Fichier_AutoitTlem_T, 1, 1)
   Do
      Sleep(250)
   Until InetGetInfo($myDL, 2) ; Check if the download is complete.
   Local $nBytes = InetGetInfo($myDL, 0)
   InetClose($myDL) ; Close the handle to release resources.


If FileExists($Fichier_AutoitTlem_T) Then
   DirCreate($Destination)
   FileMove($Fichier_AutoitTlem_T, $Fichier_AutoitTlem, 1)
EndIf

If FileExists($Destination) then ShellExecute($Destination)

Pouvez-vous m'aider à éclaircir ce souci ?


Ou alors, existe-t-il une protection contre ce type de téléchargement ?
Car si c'est le cas, autant me le dire, et le signaler pour les futures personnes :P


++

Re: [..] Souci pour télécharger un seul fichier... Protection ?

Posté : dim. 09 juil. 2017 22:06
par Tlem
Le lien de téléchargement du pack est fixe. Pas de numéro de version, pas de protection, le lien c'est le lien et il peut être écrit en dur car je n'ai pas l'intention de changer quoi que ce soit. ^^

Envoyé de mon SM-N9005 en utilisant Tapatalk


Re: [..] Souci pour télécharger un seul fichier... Protection ?

Posté : dim. 09 juil. 2017 22:14
par orax
Le lien n'est pas fixe, il y a le numéro de version : autoitscript.fr/download/index.php?dir=AutoIt_Addon/Pack_AutoIt-Fr/&file=Pack_AutoIt-Fr_2.3.9.exe
Et en plus il y a une protection. :lol:
This PHP Script has an Anti-Leech feature turned on.

Make sure you are accessing this file directly from http://www.autoitscript.fr/download/ind ... AutoIt-Fr/

Re: [..] Souci pour télécharger un seul fichier... Protection ?

Posté : lun. 10 juil. 2017 11:15
par franco
Salut.

Et merci pour vos réponses.

Le lien de téléchargement du pack est fixe.
-> il est dynamique le lien.

Pas de numéro de version
-> justement, il y en a un.

pas de protection
-> Tout comme Orax, j'ai eu le même message de protection anti leech.

le lien c'est le lien et il peut être écrit en dur car je n'ai pas l'intention de changer quoi que ce soit. ^^
---> Encore heureux que je n'ai rien demandé de tel... :D

J'ai eu l'information que je voulais.
Je passerais donc par le navigateur.

Merci à vous
@++

Re: [..] Souci pour télécharger un seul fichier... Protection ?

Posté : lun. 10 juil. 2017 11:37
par orax
Pour contourner la protection il faut que le referer soit :
http://www.autoitscript.fr/download/index.php?dir=AutoIt_Addon/Pack_AutoIt-Fr/

Voir aussi cette solution avec wget : Problème de téléchargement avec InetGet.

Re: [..] Souci pour télécharger un seul fichier... Protection ?

Posté : lun. 10 juil. 2017 12:02
par franco
Lu'

J'ai le droit de faire ça sur un fichier hébergé par le chef ? :mrgreen:


Si oui, je l'ai déjà fait une fois avec un autre fichier, je n'ai plus qu'à tenter la chose.
Ah bah oui, c'est mon message lol.

merci.
++

Re: [..] Souci pour télécharger un seul fichier... Protection ?

Posté : lun. 10 juil. 2017 14:32
par franco
Salut.

J'ai donc utilise wget et l'option referer, comme ceci :
#include <IE.au3>
#include <File.au3>
#include <Inet.au3>
#RequireAdmin

$AutoIt_tlem_dir = @TempDir & "\AutoIt_Tlem"
DirRemove($AutoIt_tlem_dir,1)
DirCreate($AutoIt_tlem_dir)

$wget_exe = $AutoIt_tlem_dir & "\wget.exe"
$libeay32_dll = $AutoIt_tlem_dir & "\libeay32.dll"
$libiconv2_dll =$AutoIt_tlem_dir & "\libiconv2.dll"
$libintl3_dll =$AutoIt_tlem_dir & "\libintl3.dll"
$libssl32_dll =$AutoIt_tlem_dir & "\libssl32.dll"
FileInstall("wget.exe",$wget_exe)
FileInstall("libeay32.dll",$libeay32_dll)
FileInstall("libiconv2.dll",$libiconv2_dll)
FileInstall("libintl3.dll",$libintl3_dll)
FileInstall("libssl32.dll",$libssl32_dll)



$Destination = @DesktopDir & "\Mes programmes"

$lien = "https://www.autoitscript.fr/download/download/AutoIt_Addon/Pack_AutoIt-Fr/"
$oIE = _IECreate($lien, 1, 0)
$oLinks = _IELinkGetCollection($oIE)
Local $iNumLinks = @extended

For $oLink In $oLinks
   If StringInStr($oLink.href, ".exe") Then $AutoIt_tlem_exe = $oLink.href
Next
$Fichier_AutoitTlem_T = @TempDir & "\AutoitTlem_inst.exe"
$Fichier_AutoitTlem = $Destination & "\AutoitTlem_inst.exe"

$command = $wget_exe & ' --no-check-certificate -O "' & $Fichier_AutoitTlem_T & '" --referer=http://www.autoitscript.fr/download/index.php?dir=AutoIt_Addon/Pack_AutoIt-Fr ' & $AutoIt_tlem_exe

RunWait(@ComSpec & ' /c ' & $command & ' & pause', '', @SW_SHOW)
J'ai un message d'erreur : 403 forbidden...
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = c:/progra~1/wget/etc/wgetrc
--2017-07-10 14:28:41-- https://www.autoitscript.fr/download/do ... _2.3.9.exe
Resolving www.autoitscript.fr... 213.186.33.17
Connecting to www.autoitscript.fr|213.186.33.17|:443... connected.
WARNING: cannot verify www.autoitscript.fr's certificate, issued by `/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Domain Validation Secure Server CA': Unable to locally verify the issuer's authority.
WARNING: certificate common name `ssl6.ovh.net' doesn't match requested host name `www.autoitscript.fr'.
HTTP request sent, awaiting response... 403 Forbidden
2017-07-10 14:28:42 ERROR 403: Forbidden.

Appuyez sur une touche pour continuer...

Et en cherchant, j'ai trouvé ceci : https://www.autoitscript.fr/forum/viewt ... 081#p89081

Et j'ai donc fait comme ceci :
$hr = ObjCreate("WinHttp.WinHttpRequest.5.1")
$hr.Open("GET", "https://www.autoitscript.fr/download/index.php?dir=AutoIt_Addon/Pack_AutoIt-Fr/&file=Pack_AutoIt-Fr_2.3.9.exe")
$hr.SetRequestHeader("Referer", "https://www.autoitscript.fr/download/index.php?dir=AutoIt_Addon/Pack_AutoIt-Fr/")
$hr.Send()
If $hr.Status = 200 Then
    $r = $hr.ResponseBody()
    FileWrite("autoittlem.exe", $r)
Else
    ConsoleWrite($hr.Status & ' : ' & $hr.StatusText & @CRLF)
EndIf
Et j'ai comme statut : 403 : Forbidden


Quelque chose me dit qu'il y a bien une protection, et que je pense arrêter avant de me faire bannir. XD


En tout cas, merci ;)


++

Re: [..] Souci pour télécharger un seul fichier... Protection ?

Posté : lun. 10 juil. 2017 15:16
par orax

Code : Tout sélectionner

$command = $wget_exe & ' --no-check-certificate -O "' & $Fichier_AutoitTlem_T & '" --user-agent="Mozilla/5.0" --referer=http://www.autoitscript.fr/download/index.php?dir=AutoIt_Addon/Pack_AutoIt-Fr ' & $AutoIt_tlem_exe
franco a écrit : lun. 10 juil. 2017 12:02 J'ai le droit de faire ça sur un fichier hébergé par le chef ? :mrgreen:
Faut pas lui dire, ça reste entre nous... :mrgreen:
C'est une protection pour éviter que quelqu'un puisse mettre des liens directs sur un autre site, mais dans ton cas c'est différent, je ne vois pas où est le problème.
Supposons que j'ai un autre site sur lequel je souhaite faire un lien vers les packs AutoIt. Je ne pourrai pas faire un lien direct vers, par exemple https://www.autoitscript.fr/download/do ... _2.3.9.exe ; je devrai faire un lien vers la page https://www.autoitscript.fr/download/in ... AutoIt-Fr/
Empêcher le téléchargement direct de fichiers a écrit :le lien direct vers le fichier est révélé à l'utilisateur, qui peut donc le télécharger sans passer par la page de votre site prévue à cet effet. Ce qui fausse toutes vos statistiques et conduit même au « vol de fichiers », c'est-à-dire que d'autres administrateurs peuvent rendre publics les liens directs de vos fichiers sans que leurs utilisateurs ne sachent qu'ils sont hébergés sur votre site ! Malgré le trafic ainsi généré, ces personnes ne visitent pas votre site.

Re: [..] Souci pour télécharger un seul fichier... Protection ?

Posté : lun. 10 juil. 2017 21:32
par Tlem
Heuuuu bon ...

[mode mauvaise fois : On]
Quand je dit qu'il n'y à pas de numéro de version, je voulais dire que la version du pack ne change pas tous les quatre matins. :roll:
[mode mauvaise fois : Off]
Bon, mea culpa, j'étais persuadé de ne plus utiliser un numéro de version. Mais comme le pack est fait à base de 7Zip auto-Extractible, j'ai pas modifié cette gestion ...
Il faut que je regarde ca de près car ce serais plus simple pour tout le monde.

Quand à l'anti Leech, je ne me souvenais pas avoir mis ça en place. C'est sans doute lors de la mise à jour du forum que j'ai réactualisé la config.
Je peux virer ca car je doute avoir des liens sauvages pour les bricoles que j'héberge ...

Bref désolé d'avoir répondu sans contrôler. Pour la peine je ferais 50 "je vous salue Marie" et je me flagellerais sur la route du retour. ^^



Edit : Après avoir fait les 50 "Je vous salut Marie" et le reste,
Plus d'anti-Leech et un lien direct : https://www.autoitscript.fr/download/in ... oIt-Fr.exe