FTP-соединение зависает в LIST

Все,

У меня проблема с удаленным ftp-сервером, который занимает меня уже три дня, и я схожу с ума по этому поводу. :(

Некоторое время назад я написал простой класс извлечения ftp, который использует apache commons-net 2.0. Класс отлично работает на 5 разных ftp серверах, я могу получать данные как хочу. Теперь я столкнулся с сервером, к которому мне нужно подключиться, который просто не позволяет мне перечислять каталоги или получать данные.

Это порядок команд, которые отправляются и извлекаются моим классом:

220 (vsFTPd 2.0.1)
USER XXXXXXX
331 Please specify the password.
PASS XXXXXXX
230 Login successful
TYPE I
200 Switching to Binary mode.
PASV
227 Entering Passive Mode (XXX,XXX,XXX,XXX,XXX,XXX)
NLST
150 Here comes the directory listing.
226 Directory send OK.
SYST
215 UNIX Type: L8
PASV
227 Entering Passive Mode (XXX,XXX,XXX,XXX,XXX,XXX)
LIST
150 Here comes the directory listing.

На последней строке мой код висит на неопределенное время (ну я его убил после 2-х часов ожидания, чтобы посмотреть, как долго он будет блокироваться). Я пробовал все, от использования активного соединения до установки типа ASCII и использования разных ftp-библиотек - всегда с одним и тем же результатом.

Обычно я просто звонил ребятам и говорил им, что их сервер настроен неправильно. Однако подключение через FileZilla не только работает, но и выполняется молниеносно и никогда не вызывает никаких проблем. Кроме того, подключение через командную строку в Linux работает как шарм.

Я здесь совершенно потерян. У кого-нибудь есть идеи, почему у меня эта проблема?

Ваше здоровье


person LeChe    schedule 08.09.2010    source источник
comment
Ваш сервер размещен на GoDaddy? У меня были похожие проблемы с моими сайтами, когда они включались и выключались в течение последних нескольких дней. Во всяком случае, для меня это звучит как проблема на стороне сервера (т.е. вы ничего не можете сделать/изменить в своем коде)   -  person Traveling Tech Guy    schedule 08.09.2010
comment
Нет, это сервер крупной финансовой организации (что само по себе плохой знак :).   -  person LeChe    schedule 08.09.2010
comment
Кстати: я согласен, что это, вероятно, проблема на стороне сервера, мне просто нужно что-то сказать ИТ-персоналу этой компании, когда они говорят: «Но любой другой пользователь может подключиться, и вы также можете подключиться с обычным клиентом!   -  person LeChe    schedule 08.09.2010


Ответы (2)


Не могу поверить, что потратил на это почти пять дней. После долгих сеансов отката изменений, фиксации промежуточных версий, отладки и примерно 15923 чашек кофе я наконец нашел причину всего этого бардака.

Оказывается, по какой-то причине, как только вы упакуете xpp3 драйверы (как в XStream) в ухе и развернете это на JBoss 5.1, любое соединение через любые ftp-библиотеки испортится.

Я понятия не имею, вызвано ли это другими библиотеками, мешающими xpp3, или это сам xpp3. Честно говоря, в данный момент мне было все равно. Все, что я знаю, это то, что как только я удалил эту зависимость из своего проекта, все заработало как по маслу.

Будь ты проклят, xpp3 - я подам на тебя в суд за десять лет моей жизни, которые ты мне стоил! :)

Всем спасибо за помощь, сейчас еду домой...

person LeChe    schedule 09.09.2010

Предложение: установите Wireshark на клиентский компьютер и запишите сетевые трассировки как в рабочих (filezilla), так и в нерабочих условиях, чтобы увидеть, что отличается. Если вы работаете в Linux, используйте команду tcpdump для захвата пакетов, а затем используйте Wireshark для их проверки.

person Jim Garrison    schedule 08.09.2010
comment
Именно то, что я пробовал: кажется, что после команды passive переключение портов не выполняется, а commons-net продолжает пытаться получить данные через порт 21. Я сейчас работаю над чем-то другим, я на следующей неделе снова окунусь в это и потратить еще несколько дней на выяснение этого... :( - person LeChe; 09.09.2010