FTP Struggles - Failed to retrieve directory listing

I'm trying to set up an fpt server on my esp32 using this library.

My Filezilla is using unsecure with max 1 connection as per various instructions for this type of connection.

My code is as follows

#include <Arduino.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <WiFi.h>
#include "FS.h"

#include "ESP-FTP-Server-Lib.h"
#include "FTPFilesystem.h"

#define FTP_USER "ftp"
#define FTP_PASSWORD "ftp"

FTPServer ftp;

void WiFiSetup();
void SDCardSetup();
void wifiReconnect();
void ftpSetup();

// Wi-Fi Credentials
const char* ssid       = "The Internet";
const char* password   = "password";

// SC Card
const int chipSelect = 5; // SPI SS Pin (5 is default on esp32)

void setup()
{

  Serial.begin(115200);

  WiFiSetup();
  SDCardSetup();
  ftpSetup();

  Serial.println("\n***Setup Complete***\n");
}

//=================================================================================================

void loop()
{
  ftp.handle();
}

//=================================================================================================

void WiFiSetup()
{

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi..");
  delay(2000);


  if ((WiFi.status() == WL_CONNECTED))
  {
    Serial.println("...Connected!");
    Serial.print("IP Address: ");
    Serial.println(WiFi.localIP());
    delay(500);
  }

  else
  {
    Serial.println("...Can't connect to WiFi!");
  }
}

//-------------------------------------------------------------------------------------------------

void SDCardSetup()
{

  Serial.print("Initializing SD card...");

  if (!SD.begin(chipSelect))
  {
    Serial.println("initialization failed!");
    while (1)
      ;
  }
  Serial.println("initialization complete.");
}

//-------------------------------------------------------------------------------------------------

void ftpSetup()
{

	ftp.addUser(FTP_USER, FTP_PASSWORD);
  ftp.addFilesystem("SD", &SD);

  if (ftp.begin())
  {

    Serial.println("FTP Setup Complete");
  }

  else
  {
    Serial.println("FTP Setup failed");
  }
}

//-------------------------------------------------------------------------------------------------

The code compiles fine and runs. When I'm trying to connect I get the following message in Filezilla.

Status:	Connecting to 192.168.0.104:21...
Status:	Connection established, waiting for welcome message...
Status:	Plain FTP is insecure. Please switch to FTP over TLS.
Status:	Server does not support non-ASCII characters.
Status:	Logged in
Status:	Retrieving directory listing...
Command:	PWD
Response:	257 "/" is your current directory
Command:	TYPE I
Response:	200 TYPE is now 8-bit binary
Command:	PASV
Response:	500 Unknown command
Command:	PORT 192,168,0,46,252,195
Response:	200 PORT command successful
Command:	MLSD
Response:	425 No data connection
Error:	Failed to retrieve directory listing

and this is what gets printed to the serial..

Connecting to WiFi.....Connected!
IP Address: 192.168.0.104        
Initializing SD card...initialization complete.
FTP Setup Complete

***Setup Complete***

New Connection from 192.168.0.46:64706
USER ftp
PASS ftp
PWD
TYPE I
PASV
500 Unknown command
PORT 192,168,0,46,252,195
MLSD

This is the example code

#if defined(ESP32)
#include <SPIFFS.h>
#include <SD.h>
#include <WiFi.h>
#elif defined(ESP8266)
#include <FS.h>
#include <ESP8266WiFi.h>
#endif

#include "ESP-FTP-Server-Lib.h"
#include "FTPFilesystem.h"

#define WIFI_SSID "SSID"
#define WIFI_PASSWORD "PASSWORD"

#define FTP_USER "ftp"
#define FTP_PASSWORD "ftp"

#ifndef UNIT_TEST
FTPServer ftp;

void setup()
{
	Serial.begin(115200);
#if defined(ESP32)
	SPIFFS.begin(true);
	SPI.begin(14, 2, 15);
	if(!SD.begin(13))
	{
		Serial.println("SD Card Mount Failed");
	}
#elif defined(ESP8266)
	SPIFFS.begin();
#endif


	WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
	while (WiFi.status() != WL_CONNECTED)
	{
		delay(500);
		Serial.print(".");
	}
	Serial.println("");
	Serial.print("Connected to ");
	Serial.println(WIFI_SSID);
	Serial.print("IP address: ");
	Serial.println(WiFi.localIP());

	ftp.addUser(FTP_USER, FTP_PASSWORD);
#if defined(ESP32)
	ftp.addFilesystem("SD", &SD);
#endif
	ftp.addFilesystem("SPIFFS", &SPIFFS);

	ftp.begin();

	Serial.println("...---'''---...---'''---...---'''---...");
}

void loop()
{
	ftp.handle();
}
#endif

Any help or pointers to get this working would be appreciated.

Thanks

Hmmmm...I can access it using my phone ftp on the same network but not when using my laptop...

Maybe a firewall issue. Will check tomorrow

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.