Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ftp put file, передать фаил по ftp 
V
    Опции темы
dimon2239
Дата 20.10.2015, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 20.10.2015

Репутация: нет
Всего: нет



Добрый день. Подскажите пожалуйста, почему не срабатывает put, идет ошибка "Unrecognized or unsupported command". 

Код

#!/usr/local/bin/perl -w
use Net::FTP;
use warnings;
 
$dir = "/tftp/";
$file = "/var/FTP/121251.bin";
 
$ftp = Net::FTP->new("x.x.x.x") or die "Can't connect\n";
$ftp->login('ad', 'sl') or die "Cannot login ", $ftp->message;
$ftp->cwd($dir) or die "Can't cwd to $dir\n", $ftp->message;
$ftp->put($file) or die "Can't put $file into $dir\n $!", $ftp->message;
$ftp->quit() or die "Error closing ftp connection: ", $ftp->message;



PM MAIL   Вверх
arto
Дата 20.10.2015, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



Добавте в new Debug => 9
PM MAIL ICQ   Вверх
a0730
Дата 20.10.2015, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Попробуй добавить строку:
Код

$ftp->binary();

Перед
$ftp->put($file) or die "Can't put $file into $dir\n $!", $ftp->message;


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
dimon2239
Дата 21.10.2015, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 20.10.2015

Репутация: нет
Всего: нет



Строку добавил, результат не изменился. Ниже дебаг.
Код

Net::FTP>>> Net::FTP(2.79)
Net::FTP>>>   Exporter(5.71)
Net::FTP>>>   Net::Cmd(2.30)
Net::FTP>>>   IO::Socket::INET(1.35)
Net::FTP>>>     IO::Socket(1.38)
Net::FTP>>>       IO::Handle(1.35)
Net::FTP=GLOB(0xf0dbb0)<<< 220 DSL-101 FTP version 1.0 ready at Wed Oct 21 10:09:49 2015
Net::FTP=GLOB(0xf0dbb0)>>> USER admin
Net::FTP=GLOB(0xf0dbb0)<<< 331 Enter PASS command
Net::FTP=GLOB(0xf0dbb0)>>> PASS ....
Net::FTP=GLOB(0xf0dbb0)<<< 230 Logged in
Net::FTP=GLOB(0xf0dbb0)>>> TYPE I
Net::FTP=GLOB(0xf0dbb0)<<< 200 Type I OK
Net::FTP=GLOB(0xf0dbb0)>>> PORT x,x,x,x,177,117
Net::FTP=GLOB(0xf0dbb0)<<< 200 Port command okay
Net::FTP=GLOB(0xf0dbb0)>>> ALLO 2914746
Net::FTP=GLOB(0xf0dbb0)<<< 500 Unknown command 'allo 2914746'
Net::FTP=GLOB(0xf0dbb0)>>> QUIT
Net::FTP=GLOB(0xf0dbb0)<<< 221 Goodbye!


Этот ответ добавлен с нового Винграда - http://vingrad.com

Это сообщение отредактировал(а) dimon2239 - 21.10.2015, 07:17
PM MAIL   Вверх
a0730
Дата 21.10.2015, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



FTP клиент использует команду ALLO для резервирования места.
Похоже на ошибку в Net::FTP.

Есть ли возможность использовать другой клиент или сервер?

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
tzirechnoy
Дата 21.10.2015, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Учитывая, что в первом RFC, в котором появилась команда STOR (rfc354), объявлена и команда ALLO, и чётко указано: <<The ALLO command should be treated as a NO-OP (no operation) by thuse servers which do not require that the maximum size of the file be declared beforehand.>>, а такжэ тот факт, что никому в Net::FTP это много лет не мешает -- это баг в ftp-сервере, а не в Net::FTP.

Впрочем, можно самому перед put сделать allo(0). Оно вернёт ошыбку, которую можно проигнорировать.
PM MAIL   Вверх
dimon2239
Дата 21.10.2015, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 20.10.2015

Репутация: нет
Всего: нет



Я правильно понимаю, так должно быть? 
Код

$ftp->alloc (0);
$ftp->put($file,"ras") or die "Can't put $file into $ip\n $!", $ftp->message;
$ftp->quit();


Выполнил
Код

Net::FTP=GLOB(0x1bc1c00)>>> USER admin
Net::FTP=GLOB(0x1bc1c00)<<< 331 Enter PASS command
Net::FTP=GLOB(0x1bc1c00)>>> PASS ....
Net::FTP=GLOB(0x1bc1c00)<<< 230 Logged in
Net::FTP=GLOB(0x1bc1c00)>>> TYPE I
Net::FTP=GLOB(0x1bc1c00)<<< 200 Type I OK
Net::FTP=GLOB(0x1bc1c00)>>> ALLO 0
Net::FTP=GLOB(0x1bc1c00)<<< 500 Unknown command 'allo 0'
Net::FTP=GLOB(0x1bc1c00)>>> PORT 10,224,81,251,207,54
Net::FTP=GLOB(0x1bc1c00)<<< 200 Port command okay
Net::FTP=GLOB(0x1bc1c00)>>> ALLO 2914746
Net::FTP=GLOB(0x1bc1c00)<<< 500 Unknown command 'allo 2914746'

PM MAIL   Вверх
a0730
Дата 21.10.2015, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Perl FTP клиент использует команду ALLO.
Проблема в том, что FTP сервер её не подерживает и возвращает ошибку, которая обламывает операцию PUT.
Т.е. клиент и сервер не совместимы.
Поэтому я и спрашивал выше, есть ли возможно заменить клиента (другой не PERL) или сервер (другой хост или другой софт).


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
dimon2239
Дата 21.10.2015, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 20.10.2015

Репутация: нет
Всего: нет



Сервер никак изменить нельзя, т.к. он встроенный в dslam). Только если менять клиент, попробую реализовать на vbs. Жаль что с перлом так получилось.
PM MAIL   Вверх
tzirechnoy
Дата 21.10.2015, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Цитата
Я правильно понимаю, так должно быть?


Я тут подумал, да с alloc(0) не прокатит. Попробуйте сделать вместо этого ${*$ftp}{'net_ftp_allo'} = 1; перед (каждым) ->put
PM MAIL   Вверх
a0730
Дата 22.10.2015, 06:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Задачу какую хотите решить?

Понятно, что нужно передать файл на сервер, клиент вроде бы винда.
Какая степень автоматизации нужна?
Как нужно запускать передачу файла?

В C# есть встроенный FTP клиент.
С ним мне тоже пришлось камлать когда-то, но может он подойдёт.

Можно просто нарисовать два файла s.cmd и s.data:

[code=C#]
файл s.data:

open 10.1.27.1
user
password
bin
put IMG_0061.MOV
bye

файл s.cmd:

@echo off
ftp < s.data
pause

[/code]

И запустить s.cmd из командной строки.


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
dimon2239
  Дата 22.10.2015, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 20.10.2015

Репутация: нет
Всего: нет



Цитата(tzirechnoy @ 21.10.2015,  23:38)
Цитата
Я правильно понимаю, так должно быть?


Я тут подумал, да с alloc(0) не прокатит. Попробуйте сделать вместо этого ${*$ftp}{'net_ftp_allo'} = 1; перед (каждым) ->put

Спасибо большое, так все работает.
Верно ли понимаю что этой командой мы отключили отправку allo?

p.s. Скрипт на обновление dslam zyxel.
PM MAIL   Вверх
tzirechnoy
Дата 22.10.2015, 12:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Цитата
Верно ли понимаю что этой командой мы отключили отправку allo?


Это командой вы сделали вид, что команда ALLO для следующего STOR успешно сработала и посылать её в этот раз ужэ не нужно.
Срабатывает только на один STOR, поскольку ALLO как раз на один STOR и рассчитана, и этот счётчик в STOR сбрасывается.
PM MAIL   Вверх
tzirechnoy
Дата 22.10.2015, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Кстати, если dslam зарегистрирован у производителя, или вообще есть какие-то контакты техподдержки -- то можно попросить чтобы баг с ALLO исправили.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1485 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.