Проблема загрузки файла с FTP с помощью функции QNetworkAccessManager :: get () - PullRequest
0 голосов
/ 25 января 2020

Это мой первый запрос ..:)

У меня возникли проблемы с использованием инфраструктуры QT и загрузкой одного файла (длиной 12 КБ) с FTP-сервера. Некоторая информация о проблеме:

  • среда linux встроена (yocto) с использованием QT 5.10
  • сетевое соединение устройства - rnet, через соединение LTE ( quectel модем mc25)
  • на ftp-сервере нет tl c и нет защиты ssl (клиентский ftp-сервер ..)
  • порт сервера 2121
  • такой же код работает, используя обычное соединение rnet (кабель RJ)
  • то же самое соединение LTE через модем, работает с помощью инструмента "wget" linux для загрузки.
  • ftp режим клиента пассивен (я прочитал вывод wget)
  • при попытке на другом ftp-сервере (адрес и сервер разные) у меня никогда не возникало проблем, такой же код работает на другом ftp-сервере (наверняка с tl c и защита ssl), также с использованием LTE-модема.
  • проблема только на том ftp, также загружающем файл.

Что я испытываю, так это то, что у меня нет сообщения об ошибке от QNetworkAccessManager, ни с QNetworkRequest объекта. Просто нет ответа, нет ошибки. Захватывая сигнал QmetaObjectChange, я вижу только код 200 с сервера и размер файла. Стоп.

Какие-нибудь идеи, которые могут помочь мне найти причину, почему я экспериментирую с этим странным поведением? Спасибо за вашу помощь.

Альберто.

1 Ответ

1 голос
/ 25 января 2020


Я наконец-то понял проблему.
Библиотека Openssl преднамеренно отключила использование устаревших и опасных протоколов, таких как sslv2.Таким образом QT не может загрузить файл с этого конкретного ftp-сервера: сервер использует sslv2.
Использование устаревших протоколов, таких как sslv2, открывает возможность того, что хакеры могут получить разумные данные, перехватывающие ваш сетевой сеанс.
Я думаю, что лучшее решение - избегать подключения моего программного обеспечения к таким типам ftp-серверов, я не хочу допускать проблем с безопасностью также в моей системе. Я выведу сообщение об ошибке, например: «ошибка: FTP-сервер использует устаревший и опасный протокол (sslv2). Соединение не разрешено».
Вы можете подключить слот для сигнала, чтобы получать предупреждения ssl ..

void DownloadManager::doDownload(const QUrl &url)
{
    QNetworkRequest request(url);
    QNetworkReply *reply = manager.get(request);

#if QT_CONFIG(ssl)
    connect(reply, SIGNAL(sslErrors(QList<QSslError>)),
            SLOT(sslErrors(QList<QSslError>)));
#endif

    currentDownloads.append(reply);
}

https://code.qt.io/cgit/qt/qtbase.git/tree/examples/network/download/main.cpp?h=5.14

BR! :)

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