Jump to content
Sign in to follow this  
poila

What methods exists for downloading files from a remote computer's harddrive?

Recommended Posts

Prior to posting this question, I have experimented with using FileExists, InetGetInfo and InetGet/InetClose functions to test downloading files into my application folder, in case if my file did not already exist.

In my case, I was able to pinpoint to a very specific web address, eg.) https://dropbox.com, etc. and then check/download the file.

Now my question is, instead of checking from a hardcoded URL, is it possible to:

1. Do a check against the IP address of a remote computer, eg.) my friend's or colleague's desktop computer

2. After checking the IP address if valid and can be connected to, access the computer's hard drive location, eg.) that machine's C:specifiedFolderspecifiedFile.txt

3. Download a copy of that file into a local computer

I did read ('?do=embed' frameborder='0' data-embedContent>>) but that was what I accomplished earlier, so now I am not sure if I were to change the method of file retrieval, what changes are necessary?

Share this post


Link to post
Share on other sites

You cannot access remote computer's files unless you both are in either local or vpn network

If you have a local or vpn connection, the easiest thing i can think of is maping the network path to a temporary drive, search for the file (or if you know where it is - use that) and then copy it to local drive in a desired location. 

EDIT: acutally it is possible, but idk who will be that stupid to expose his computer to the internet via his real IP if he have one 

EDIT2: another way is if he can run an http/ftp server and you download it from there, but for me that's stupid and insecure, but inetget should work

post some more details on what you are trying to do

Edited by JustSomeone

Share this post


Link to post
Share on other sites

I am writing a program for use internally within a local network.

Initially, the program would look for a copy of an Excel file locally and if it could not found, the program throws a generic error message; otherwise, just export data into the local Excel file.

Now, I am making changes to instead throw a File Not Found message, I experimented with fetching a copy from my testing Dropbox account into the local drive. Seems fine so far, so I am switching to getting a file from a computer within a local network instead. That's when I am looking for either a simple solution of either getting a common network path, or take authentication/security into consideration before connecting.

Share this post


Link to post
Share on other sites

Check the help file for :

DriveMapAdd

DriveMapDel

FileCopy

play around with them and you will make it. If i have time i might write an example. It should not be that hard, but depend on your skills :)

Share this post


Link to post
Share on other sites

There you go, today i'm doing everything else than what i need to do lol

NOTE: this is not tested, i have no local share to try it

#include <MsgBoxConstants.au3>
#include <FileConstants.au3>


Local $dLetter = "Z:" ; drive letter to use when mapping. NOTE: must not exist
Local $nShare = "\\computer-name-or-IP\shared\folder\" ;remote share, where the backup file can be found
Local $sFilePath = "c:\path-to-my-file\" ;local path of where the file should be
Local $sFile = "my-file.something" ;the file we are searching for on our local hard drive
Local $sUsername = "Username" ; username for the remote share
Local $sPassword = "Password" ; password for the remote share
Local $sFlag = "0" ; A combination of the following: 0 = default; 1 = Persistent mapping; 8 = Show authentication dialog if required

Example()

Func Example()
    Local $iFileExists = FileExists($sFilePath)
    If $iFileExists Then
        ConsoleWrite("The file exist" & @CRLF)
        mystuff()
        sleep(100) ; you can remove this
        Exit
    Else
        ConsoleWrite("The file does not exist" & @CRLF)
        Local $tVar = DriveMapGet($dLetter)
            If $tVar = $nShare Then
                ConsoleWrite("Drive is mapped properly" & @CRLF)
            Else
                ConsoleWrite("Drive is not mapped properly" & @CRLF)
                DriveMapDel($dLetter) ; just in case it's mapped somewhere else
                sleep(10)
                DriveMapAdd($dLetter,$nShare,$sFlag,$sUsername,$sPassword)
                    If @error = 1 Then
                        MsgBox($MB_SYSTEMMODAL, "Error","There was an error mapping the drive. Error : " & @extended,5)
                    ElseIf @error = 2 Then
                        MsgBox($MB_SYSTEMMODAL, "Error","Acces to the remote share was denied",5)
                    ElseIf @error = 3 Then
                        MsgBox($MB_SYSTEMMODAL, "Error","Device " & $dLetter & " is taken.",5)
                    ElseIf @error = 4 Then
                        MsgBox($MB_SYSTEMMODAL, "Error","Device name " & $dLetter & " is invalid.",5)
                    ElseIf @error = 5 Then
                        MsgBox($MB_SYSTEMMODAL, "Error","The remote share is invalid/unreachable.",5)
                    ElseIf @error = 6 Then
                        MsgBox($MB_SYSTEMMODAL, "Error","The password provided is invalid.",5)
                    EndIf

            EndIf
        Local $fCopy = FileCopy($dLetter & "\" & $sFile, $sFilePath & "\" & $sFile, $FC_OVERWRITE)
            If $fCopy = 1 Then
                ConsoleWrite("Copy successful" & @CRLF)
                mystuff()
                Exit
            Else
                MsgBox($MB_SYSTEMMODAL, "Error","Error copying the file : " & $sFile & "." & @CRLF,5)
            EndIf
    EndIf

Exit
EndFunc

Func mystuff() ; everything in this function will be executed only if the file exists
    sleep(100)
EndFunc

Edit this to suit your needs, and if you feel like it will work, mark this as solved, so this can help in the future if more people need it :)

EDIT: fixed small non-fatal errors

EDIT: ^%^!&@*#^!@*E&Q^@ this editing, srsly

Edited by JustSomeone

Share this post


Link to post
Share on other sites

In general it would be better from a security point of view to have the target computer upload the file either to a mapped network share, or by ftp to a webserver, at regular intervals. This can be accomplished with a fairly simple script. You can save on bandwidth if you do a CRC (or just use the modified date) and only reupload if the file has changed.

Then you can download it from there with autoit commands, wget or commandline ftp. Or, just browse to it manually.

Other advantage is that you don't need to know the computer's IP address, nor does it have to be static, since the computer 'pushes' the file to you.

Another option might be rsync which is basically a Linux app for file transfer over TCP, but various Windows ports exist, eg DeltaCopy.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By Skysnake
      This is relevant
      From here https://stackoverflow.com/questions/3454315/is-it-possible-to-pin-a-dll-in-memory-to-prevent-unloading
      I use several UDFs on the Forum to do various things.  Those UDFs work very well.
      Effectively the UDFs are DLL wrappers, that make it possible to access DLL functions easily without the long hard slog of DLLCall() every time.
      However, I have now run into the issue that multiple UDF DLLCalls are slow. Not mind numbingly slow, but slow enough to become noticeable with a large of repeated function calls.
      So I was wondering, is it possible to "load a DLL into memory" and leave it there for the duration of my script's lifetime, avoid repeated DLL on-disk reads with a persistent in memory DLL?
      From Microsoft
      https://docs.microsoft.com/en-us/windows/desktop/dlls/about-dynamic-link-libraries
      Looks like what I want to do is: load-time dynamic linking,
      So next question, (a) how do I do this with AutoIt (b) How would this impact on standard AutoIt type DLL calls?
       
      The point is speed.  Is there a different approach?
      Or am I barking up the wrong tree?
      Skysnake
    • By supersonic
      Hi -
      Currently I'm playing around with Windows Credential Manager. I'm trying to access it with DllCall("advapi32.dll", ...) using the functions 'CredWriteW', 'CredReadW' and 'CredDeleteW'. All well. Another function I have to deal with is 'CredEnumerateW': https://docs.microsoft.com/en-us/windows/desktop/api/wincred/nf-wincred-credenumeratew/ .
      That's the test code I have so far:
      #include <Array.au3> #include <String.au3> Local $tCredentialsCount = DllStructCreate("DWORD;") Local $tPointerToArrayOfPointers = DllStructCreate("PTR;") ; Local $tPointerToArrayOfPointers = DllStructCreate(_StringRepeat("PTR;", 200)) ; ??? Local $aResult = DllCall("advapi32.dll", "BOOL", "CredEnumerateW", _ "WSTR", Null, "DWORD", 1, "DWORD", DllStructGetPtr($tCredentialsCount), "PTR", DllStructGetPtr($tPointerToArrayOfPointers)) If (Not @error) Then Local $iCredentialsCount = DllStructGetData($tCredentialsCount, 1) _ArrayDisplay($aResult, $iCredentialsCount) Local $hPointerToArrayOfPointers = DllStructGetData($tPointerToArrayOfPointers, 1) MsgBox(0, "$hPointerToArrayOfPointers", $hPointerToArrayOfPointers) ; Fails... For $i = 1 To 10 ; $iCredentialsCount MsgBox(0, $i & "___" & (($i * 2) - 1), DllStructGetData($tPointerToArrayOfPointers, ($i * 2) - 1)) Next $tCredentialsCount = 0 $tPointerToArrayOfPointers = 0 DllCall("advapi32.dll", "NONE", "CredFreeW", "PTR", $hPointerToArrayOfPointers) EndIf The DllCall seems to function properly - I get a valid count of credentials (on my computer ~ 133) and a pointer "to array of pointers".
      What is meant by "array of pointers"?
      Microsoft says: Pointer to an array of pointers to credentials. The returned credential is a single allocated block. Any pointers contained within the buffer are pointers to locations within this single allocated block.
      How to access these pointers... Contained within the buffer???
      Any information you can provide me would be greatly appreciated.
    • By bladem2003
      Hello,
      i need help to translate the c code to autoit .
      I don't understand the callback function.
       
      #include <windows.h> #include <stdio.h> // native IR Data by PAnsiChar typedef void CALLBACK CallBackPAnsiChar(char*, char*, char*, char*); typedef int (__stdcall *impInitPAnsiChar)(CallBackPAnsiChar); CALLBACK MyCallBackPAnsiChar(char* Protocol, char* Address, char* Command, char* Flags) { printf("\nIR Data received: Protocol: %s, Address: 0x%s, Command: 0x%s, Flags: 0x%s", Protocol, Address, Command, Flags); fflush(stdout); } int main(int argc, char **argv) { impInitPAnsiChar InitPAnsiChar = NULL; // Load DLL file HINSTANCE hinstLib = LoadLibrary(TEXT("USB_IR_Remote_Receiver.dll")); if (hinstLib == NULL) { printf("\nERROR: unable to load DLL\n"); return 1; } // Get function pointer InitPAnsiChar InitPAnsiChar = (impInitPAnsiChar)GetProcAddress(hinstLib, "InitPAnsiChar"); if (InitPAnsiChar == NULL) { printf("\nERROR: unable to find DLL function\n"); FreeLibrary(hinstLib); return 1; } if (InitPAnsiChar(*MyCallBackPAnsiChar)) { printf("\nInit DLL with InitPAnsiChar successfull"); } else { // Unload DLL file FreeLibrary(hinstLib); return 0; } while(1) { } //return 0; }  
    • By Yirrlaar
      Hello All,
      I'm using "ImageSearch2015.au3" and i'm trying to figure out WHY, for the life of me, I can't find an image is hidden.
      So what I came up with, is as follows:
      _ImageSearchAreaHidden("C:\icon.png", 1, 0, 0, 800, 600, $x1, $y1, 80, 0) Func _ImageSearchAreaHidden($findImage, $resultPosition, $x1, $y1, $right, $bottom, ByRef $x, ByRef $y, $tolerance, $transparency = 0) Local $h, $result local $TestScreen = "C:\TestScreen.png" ;previsous screenshot of the image looking for, fully visible If Not FileExists($findImage) Then Return "Image File not found" If $transparency <> 0 Then $findImage = "*" & $transparency & " " & $findImage If $tolerance < 0 Or $tolerance > 255 Then $tolerance = 0 If $h_ImageSearchDLL = -1 Then _ImageSearchStartup() If $tolerance > 0 Then $findImage = "*" & $tolerance & " " & $findImage $result = DllCall($h_ImageSearchDLL, "str", "ImageSearchEx", "str", $TestScreen, "int", $x1, "int", $y1, "int", $right, "int", $bottom, "str", $findImage) If @error Then Return "DllCall Error=" & @error If $result = "0" Then Return False $array = StringSplit($result[0], "|") If (UBound($array) >= 4) Then $x = Int(Number($array[2])) ; Get the x,y location of the match $y = Int(Number($array[3])) If $resultPosition = 1 Then $x = $x + Int(Number($array[4]) / 2) ; Account for the size of the image to compute the centre of search $y = $y + Int(Number($array[5]) / 2) EndIf Return True EndIf EndFunc ;==>_ImageSearchAreaHidden Now when the folder with the icon is completely visible, it finds the icon without any issues, however if I cover up the icon, it no longer finds the image in the folder.
      Any ideas?
    • By Tersion
      Why I can't get more than two simultaneously background downloads?
      Simultaneously background downloads with InetGet() works! It was just server limitation from which I downloaded files.
×
×
  • Create New...