I was having a major headache with Net::FTP recently on my raspberry pi. I found that this code:
use Net::FTP;
$ftp = Net::FTP->new("xxx", Debug => 1)
or die "Cannot connect to host: $@";
$ftp->login("xxx",'xxx')
or die "Cannot login ", $ftp->message;
$ftp->cwd("xxx")
or die "Cannot change working directory ", $ftp->message;
$ftp->put("test.txt")
or die "put failed ", $ftp->message;
$ftp->quit;
Didn't work and I got the error:
502 'PORT' command not implemented.
I tried this on both Raspbian and Arch Arm. The same code worked fine from a windows box, however. On windows, I noticed that
put behaved differently, putting the connection into PASV mode before transferring the file. On linux this didn't happen.
I solved the issue by putting the entire connection into PASV mode (calling
pasv() before
put() didn't work):
$ftp = Net::FTP->new("xxx", Debug => 1, Passive => 1)
or die "Cannot connect to host: $@";
This worked fine. Just putting this here in case someone else has the issue!