Пользовательский FTP-клиент для передачи данных PASV отказался - PullRequest
2 голосов
/ 16 ноября 2011

Собираюсь быть кратким

Я написал собственную реализацию FTP с использованием c # .net 3.5.Система использует TcpClient (TcpListener для активного режима) для управления соединениями.В одном случае я получаю странное поведение, и я хотел бы спросить о возможных причинах.

Сам клиент отлично работает дома, и хороший процент наших клиентов удовлетворен этим.Однако у нас есть один, который я не могу понять.Мне прислали следы проволочной акулы, чтобы поковыряться в ней, но никакой настоящей радости.Клиентский компьютер стоит за тем, что я считаю (из описания клиента) большой сетевой инфраструктурой.Из-за пределов сети, подключение к тому же серверу работает как шарм.Вот что я вижу.

На моем клиенте, работающем в пассивном режиме, запрос tcp handshake отправляется для подключения к данным (сервер переходит в пассивный режим и указывает порт), но никогда не подтверждается.Это вызывает повторные попытки и возможное время ожидания.

С клиентом Filezilla (и Windows Explorer, и IE ...), снова используя пассивный режим, соединение проходит без проблем.Досадно, что это заставляет клиента и моего босса указывать пальцем на код.

Проходя по следам проволочной акулы, я не вижу различий между кадрами TCP.Все управляющие соединения подключаются к порту 21 и подтверждаются в обоих сценариях.Флаги похожи.То же самое относится и к соединению для передачи данных, за исключением того, что в данном случае это порт с большими номерами 52000+ (но не тот, который у меня есть).

Я не специалист по сетевому программированию, когда мы начинаем переходить на более низкиепроблемы протокола уровня, и мое понимание больших сетевых проблем очень ограничено.Как разработчик, я сразу же кричу «FIREWALL ISSUE», но на самом деле это ни для кого ничего не решает.

В заключение, кто-нибудь знает, какое оборудование / брандмауэр может вызвать такое поведение?Я подозреваю, что что-то блокирует трафик на уровне приложения, но вы никогда не знаете.

Спасибо за чтение.

1 Ответ

0 голосов
/ 18 ноября 2011

Хорошо, сияй мой ботинок.Верите ли вы в это, оказывается, в конце концов, это, вероятно, ошибка пользователя.

Над этим висит большой вопрос: «Почему работает filezilla и windows, а ваше программное обеспечение - нет».Ну, наконец-то я получил от сервера информацию о том, что происходит.

Кажется, filezilla и windows возвращаются в активный режим, но не сообщают вам.Из-за того, что порты 20 (пассивный режим, порт управляющего хоста) и 21 (активный режим, порт данных клиента) хорошо известны, сетевое оборудование может разрешить это (и часто делает это независимо от настроек брандмауэра).

Наше программное обеспечениеоднако, не возвращается автоматически в активный режим, потому что в качестве функции это не рекомендуется кругами FTP.Вместо этого активный режим - это отдельная опция, которую можно выбрать при настройке соединения.Любопытно, что это исходящий клиентский запрос на квитирование, который брандмауэр отбрасывает, но произошли странные вещи.Я собираюсь отмыть руки от этого и, возможно, автоматически переключиться на нашего клиента.

РЕДАКТИРОВАТЬ: Да, у пользователя есть прокси-сервер в сети, о котором они не сказали нам.Подайте сигнал pebcak!

...