При использовании Perl :: FTP, что я должен поставить в поле хоста для подключения к локальному компьютеру, подключенному к сети - PullRequest
0 голосов
/ 01 февраля 2012

Я использую Net :: FTP в perl для передачи файлов.когда я запускаю следующий код: -

Есть ли проблемы с использованием IP-адреса?Правильно ли я указал это в поле хоста?

use strict;          
use Net::FTP;

my $host = "10.77.69.124";
my $user = "administrator";
my $password = "Password";

my $f = Net::FTP->new($host, Debug =>0) or die "Can't open $host\n";
$f->login($user, $password) or die "Can't log  $user in\n";

Код не может подключиться к удаленному хосту.Почему это происходит ?Разве это не должно работать с IP-адресом, указанным в $host?

Ответы [ 2 ]

5 голосов
/ 01 февраля 2012

Конструктор Net :: FTP позволяет передавать одно скалярное значение или массив хостов, которые нужно попробовать. Значение этого поля должно совпадать с PeerAddr из IO :: Socket :: INET (либо имя хоста , либо ip адрес ).

Внимательно посмотрите, что происходит, указав параметр Отладка. Если вы находитесь за брандмауэром или настройкой NAT, вам, вероятно, также следует установить для Passive ненулевое значение и убедиться, что конструктор завершился ошибкой, распечатав $ @.

my $ftp = Net::FTP->new(Host=>$host, Debug=>1, Passive=>1) || die $@;

Если конструктор завершился успешно, вы можете проверить, не завершился ли какой-либо из других методов:

$ftp->login($user, $pass) || die $ftp->message;
$ftp->cwd($path) || die $ftp->message;

Кстати: если вы не уверены, что использовали правильный параметр хоста, вы можете спросить Net :: FTP, к какому хосту он пытался подключиться:

print $ftp->host, "\n";

Если это все еще не работает, предоставьте подробный вывод вашего приложения.

Надеюсь, это поможет.

3 голосов
/ 01 февраля 2012

Сначала убедитесь, что вы можете связаться с удаленной стороной:

Из командной строки используйте telnet (доступно в linux и windows, но отличается по синтаксису)

telnet host 21

Если выне удается подключиться из командной строки, проверить правила брандмауэра или, возможно, ваш FTP-сервер работает на другом порту?

Если вы можете подключиться, попробуйте войти в систему с помощью простых команд FTP:

USER user@remote.host
PASS yourpassword

Это будет использовать ACTIVE FTP-соединение с удаленным.Это старый способ.

В настоящее время большинство ftp-серверов используют PASSIVE ftp.Чтобы проверить, попробуйте эту команду (из командной строки linux)

ftp -v -p host

В Perl вы можете использовать пассивный режим следующим образом:

my $f = Net::FTP->new($host, Debug =>1, Passive => 1) or die "Can't open $host\n";

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...