Monday, November 16, 2009

Scripting a file transfer to an FTP server using a non-standard port (not 21)

I ran into an issue last week while trying to automated a file upload to an FTP site using a port other than the default of 21. For some reason I couldn't get it to work. It would continually get stuck at "150 Opening ASCII mode data connection". Checking the logs I was finding a 425 10060 error, which meant that the connection was being dropped. There were ghost files of 0KB being created on the FTP with the name of the file I was trying to upload, but the transfer would never happen. The good news is that I figured out the issue and am now sharing it with you.

It turned out I needed to use passive mode (PASV) for the FTP transfer and that isn't supported in the Windows ftp.exe command line application. In order to accomplish my upload I had to download and install NcFTP, which is a free, command-line client that DOES support PASV mode transfers. Once I did that I had no issue. If you're looking for the command to use with NcFTP to upload a file to an FTP server with a non-standard port, here's an example.

I have a file named test.txt located in C:\myFolder on the machine. I also have NcFTP installed to the default location. My goal is to upload test.txt to an FTP site called ftp.test.com that is using port 35987. I also have to login to the site using username "test" and password "T3ster!". Here's what that would look like using ncftpput.exe to script the upload:

"C:\Program Files\NcFTP\ncftpput.exe" -u test -p T3ster! -P 35987 ftp.test.com / "C:\myFolder\test.txt"

This calls ncftpput.exe, sets the username (-u) to test, the password (-p) to T3ster!, the port (-P) to 35987, specifies the FTP server, specifies the directory on the FTP server to put the file to (I used the root FTP directory, signified with the / symbol), then specifies the path on the local machine to the file I want to upload.

That is just a quick example. There are variations, and you can also do other things with it as well. To see more information, including a link to the complete list of available command line switches for ncftpput.exe and ncftpget.exe, check out the my previous post

No comments: