Подключиться к серверу FTPS с помощью Golang

Я пытаюсь использовать ftp-пакет для установки ftps-соединения по умолчанию:

c, err := ftp.Dial("some_srv:some_port", ftp.DialWithTLS(nil))

if err != nil {
    log.Fatal(err)
}

и получаю поразительную самообъясняющую ошибку: соединение: соединение отклонено

Документация ужасная, совершенно непонятно, как настроить FTPS, как совместить опции (например, timeout + TLS=true). Есть идеи?)

Какой пакет вы используете? Вы пытались указать tls.Config (я полагаю, это то, что DialWithTLS принимает в качестве параметра)? Можете ли вы установить обычное TLS-соединение, и было ли это соединение отклонено уровнем FTP?

JimB 07.02.2023 16:13

Я использую github.com/jlaffaye/ftp. Я использую тот же конфиг в Python без проблем

Dmitry 07.02.2023 16:17

Вы не предоставляете tls.Config, так почему это та же конфигурация, что и у Python? Вы используете неявный TLS или AUTH TLS? В этом пакете есть целый список опций набора, вы комбинируете опции, предоставляя все опции, которые хотите использовать.

JimB 07.02.2023 16:21

В Python я просто передаю tls=true. Здесь, кажется, я не могу передать пустую конфигурацию. Параметры не экспортируются, поэтому я могу использовать только функции, такие как DialWithTls или DialWithTimeout. Но как их совместить? Например, чтобы получить конфигурацию TLS и Timeout вместе.

Dmitry 07.02.2023 16:30

параметр Dialoptions является вариативным, вы добавляете столько параметров, сколько хотите. Если вы хотите пустой конфиг, передайте пустой конфиг. Похоже, что этот пакет использует конфигурацию nil, чтобы указать, что TLS не следует использовать.

JimB 07.02.2023 16:34

неизвестное поле 'explicitTLS' в литерале структуры типа ftp.DialOption

Dmitry 07.02.2023 16:49

Если вы хотите установить ExplicitTLS, вы используете функцию DialWithExplicitTLS. Обратите внимание, что ExplicitTLS — это протокол, отличный от того, который вы пытались использовать в первый раз.

JimB 07.02.2023 16:52

Я намеревался установить его в false. var tlsConfig = tls.Config{} var o = ftp.DialWithTLS(&tlsConfig) также не работает. И я до сих пор не понимаю, как совмещать варианты. Можете ли вы уточнить, пожалуйста?

Dmitry 07.02.2023 16:57
ftp.Dial(addr, ftp.DialWithTLS(cfg), ftp.DialWithContext(ctx)) и так далее.
JimB 07.02.2023 17:02
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
9
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не смог заставить jlaffaye/ftp работать, но нашел очень старую (9 лет) библиотеку github.com/webguerilla/ftps и она работает как шарм:

ftps := new(ftps.FTPS)
ftps.TLSConfig.InsecureSkipVerify = true

err := ftps.Connect("some_host", 21)
if err != nil {
    panic(err)
}

Другие вопросы по теме