Command-line FTP function does not work

12

2

I am using Windows 7 and have multiple FTP client applications working without any problem. However, when I use command-line FTP, I can get connected, log in (after entering user name and password), but it always gets disconnected when the dir or ls command is used. The response is:

Connection closed by remote host.

How can I fix this problem?

Hong

Posted 2010-11-28T02:56:52.453

Reputation: 369

Open up ports 20, 21 in your firewall. – Sean Perkins – 2015-11-19T19:15:22.613

Answers

13

You'll usually see this type of thing happen when the server tries to connect back to you but can't. FTP originally used two TCP channels. One was for commands, and the other for transferring data. When you run the dir command it uses a data channel. The data channel is established on demand and results in the server trying to connect back to you.

That's most likely being blocked by your router or Windows firewall. You need a client that supports PASV mode.

You can enable PASV mode in Internet Explorer. Or use a different client. I'm not sure if the command-line version can use PASV mode. It's a very basic client.

Matt H

Posted 2010-11-28T02:56:52.453

Reputation: 3 823

Thanks, Matt. I thought the command-line FTP client used passive mode by default but I have just found multiple posts saying Windows command-line FTP actually excludes passive mode. IE always works fine on my machine for FTP. I just want to use command-line to examine some raw data from an FTP server. – Hong – 2010-11-28T04:53:54.207

As an experiment, you could see if enabling or disabling PASV in internet explorer makes a difference.. or gives similar or the same error. – barlop – 2010-11-28T23:15:51.897

1ftp> PASV - Invalid command. (Windows 7 Ent.). This answer is exactly what happens at work. – Bratch – 2012-06-28T17:10:32.040

6it needs to be QUOTE PASV – JosephStyons – 2012-07-10T05:29:03.370

5

I had an issue with transmitting files via FTP once I was logged into the box in question. It would create the file name, but the file was empty. I resolved it by doing the following:

  • Go to Control Panel → Windows Firewall → Advanced Settings → Inbound Rules
  • Double-click the Name column to sort by name
  • Scroll down until you see two rules called "File Transfer Program"; these were set to Block on my PC (big red circle with a line through it)
  • Double-click on the rule
  • On the General tab, under Action, set to Allow the connection
  • Click OK
  • Do this for the other rule

It should be good to go now.

Keljo

Posted 2010-11-28T02:56:52.453

Reputation: 51

What are the security implications of doing this? – Peter Mortensen – 2016-05-09T17:37:02.817

Programs on your pc can now use ftp. – Mark Deven – 2018-12-20T12:10:27.590

Deleting the rules, then connecting via FTP and issuing something like a "dir" command (triggering Windows firewall to ask whether FTP should be allowed, and recreating the rules, if you say Yes) may also help. – mlvljr – 2020-02-20T08:20:44.827

5

Windows FTP command-line client ftp.exe supports an active FTP mode only.

Setting up the FTP in the active mode can be cumbersome nowadays due to firewalls and NATs.

It's likely because of your local firewall or NAT that the server was not able to connect back to your client to establish data transfer connection for the directory listing (ls or dir commands).

Or your client is not aware of its external IP address and provides an internal address instead to the server (in PORT command), which the server is obviously not able to use.

See my article Network Configuration for Active Mode.


If possible, you should use a passive mode as it typically requires no additional setup on a client-side.

Unfortunately Windows FTP command-line client (the ftp.exe) does not support passive mode at all. It makes it pretty useless nowadays.

Use any other Windows FTP command-line client instead. Most other support passive mode.

For example WinSCP defaults to passive mode and there's a guide available for converting Windows FTP script to WinSCP script.

(I'm the author of WinSCP)

Martin Prikryl

Posted 2010-11-28T02:56:52.453

Reputation: 13 764

It works on any version of Windows (since XP). What error do you get? Consider asking a new separate question with more details. – Martin Prikryl – 2018-12-20T14:07:32.533

You need both winscp.com and winscp.exe in the same folder. I believe the error message clearly says that the winscp.com looks for winscp.exe in its folder. See also https://winscp.net/eng/docs/executables

– Martin Prikryl – 2018-12-20T14:12:15.827

Np, please delete the comments. – Martin Prikryl – 2018-12-20T14:13:22.900

4

I encountered this problem on a Windows 2008 server.

This article suggests enabling the Application Layer Gateway Service. This did not fix the problem for me.

What did fix the problem was adding an exception in the Windows Firewall for C:\Windows\system32\ftp.exe

pants

Posted 2010-11-28T02:56:52.453

Reputation: 41

1By default windows firewall include ftp.exe in its exception but only for home/work network. Make sure you are not on public network else allow ftp for public network as well. – Jags – 2014-03-05T15:12:29.613

1

I was experiencing the same issue with third-party POS software on a Windows 7 machine that batches client transaction data over back to an SQL server.

It worked fine until the client location changed ISPs and, therefore, static IP addresses. Command-line FTP commands did not work beyond the initial login and none of the remedies I found online or this thread worked.

Just for kicks, I re-created the FTP rule in the firewall, a cheapo D-Link router/firewall, and viola, it seems to be working again.

Plexus Sage

Posted 2010-11-28T02:56:52.453

Reputation: 19

0

FTP issue

Open Ports on azure NSG and server firewall: 21,20,4000-40009,990,14147

Issue: Client cannot connect to ftp from command line and Powershell

We are able to connect with testuser but not able see the directory/List

Installed Wireshark on server and on my laptop to capture packets Created a filter on wireshark with “ftp” and “IP” The packet capture doesn’t states weather is it passive or active mode and source IP is correct. (we configure primary IP and secondary IP on the server)

We found that the ftp connection is not working from the command prompt. trying to initiate a connection to ftp.abcd.com which was resolving to 11.22.33.44 and not to the actual FTP Server 44.33.22.11 IP addresses 11.22.33.44 and 44.33.22.11 are both configured on the same Machine. However, the DNS was resolving to the secondary FTP IP instead of Primary

Initially, We also found that the FTP connections to 11.22.33.44 was working fine and these connections were Active connections. We were unable to see that the Passive mode works here. Also while initiating connection to 11.22.33.44 from Commad promt the session freezes after you give 'dir' command however the same is working with other ftp clients like FileZilla and Winscp.

I tried testing with WinSCP and FileZilla and got to see Passive mode connections are working fine and Active not which is an expected behavior. We checked why the 'dir' command is not working from the devices after the successful authentication, we got to see that the windows firewall is blocking the connection. We disabled the firewall and the everything started working as expected. I checked the same on my end after creating the firewall rule, issues were resolved. There was one system which even after disabling firewall was stuck at directory listing, this might be an issue within that system or the connections are being blocked by an external factor. Since after disabling most of us are able to work fine.

settings need to be done on the machine Go to Control Panel → Windows Firewall → Advanced Settings → Inbound Rules Double-click the Name column to sort by name Scroll down until you see two rules called "File Transfer Program"; these were set to Block on my PC (big red circle with a line through it) Double-click on the rule On the General tab, under Action, set to Allow the connection Click OK

Desh Kanth

Posted 2010-11-28T02:56:52.453

Reputation: 11

This is what the answer by @Keljo already says (actually you have copied his/hers answer). – Martin Prikryl – 2018-12-20T05:14:15.957