Pode explicitamente ftps via Filezilla, mas não do código

3

Isso foi postado originalmente no StackOverflow, mas como o código funciona e isso é provavelmente um problema de rede / firewall, imaginei que o faria aqui.

Como o título indica, eu posso conectar a outra máquina do meu servidor via FileZilla Client, mas não consigo via código (.Net - FTPWebRequest)

Eu sei que o código é bom, já que funciona em outra máquina. A máquina em particular com a qual estou tendo problemas está por trás de um NAT, mas o SA abriu todas as portas para o tráfego do host com o qual estamos tentando conversar.

Alguma sugestão - perdi algo óbvio?

A exceção que recebo da tentativa de conexão é:

"Unable to read data from the transport connection: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond."

E os registros da máquina que estamos tentando conectar mostram:

7/26/2010 12:40:23 PM - (not logged in) (xx.xx.xxx.xxx)> Connected, sending welcome message...

7/26/2010 12:40:23 PM - (not logged in) (xx.xx.xxx.xxx)> 220-FileZilla Server version 0.9.32 beta

7/26/2010 12:40:23 PM - (not logged in) (xx.xx.xxx.xxx)> 220 ftp.xxxxxxxxxx.com

7/26/2010 12:40:23 PM - (not logged in) (xx.xx.xxx.xxx)> AUTH TLS

7/26/2010 12:40:24 PM - (not logged in) (xx.xx.xxx.xxx)> 234 Using authentication type TLS

7/26/2010 12:41:24 PM - (not logged in) (xx.xx.xxx.xxx)> 421 Login time exceeded. Closing control connection.

7/26/2010 12:41:24 PM - (not logged in) (xx.xx.xxx.xxx)> disconnected.

EDITAR: Eu estou usando o modo passivo para o código e a conexão do filezilla. Conforme solicitado, aqui está um log de uma conexão de ftps bem-sucedida (LIST) do código (em outra máquina):

7/26/2010 12:45:03 PM - (not logged in) (xx.xx.xxx.xxx)> Connected, sending welcome message...

7/26/2010 12:45:03 PM - (not logged in) (xx.xx.xxx.xxx)> 220-FileZilla Server version 0.9.32 beta

7/26/2010 12:45:03 PM - (not logged in) (xx.xx.xxx.xxx)> 220 ftp.xxxxxxxxxx.com

7/26/2010 12:45:03 PM - (not logged in) (xx.xx.xxx.xxx)> AUTH TLS

7/26/2010 12:45:04 PM - (not logged in) (xx.xx.xxx.xxx)> 234 Using authentication type TLS

7/26/2010 12:45:04 PM - (not logged in) (xx.xx.xxx.xxx)> SSL connection established

7/26/2010 12:45:04 PM - (not logged in) (xx.xx.xxx.xxx)> PBSZ 0

7/26/2010 12:45:04 PM - (not logged in) (xx.xx.xxx.xxx)> 200 PBSZ=0

7/26/2010 12:45:05 PM - (not logged in) (xx.xx.xxx.xxx)> PROT P

7/26/2010 12:45:05 PM - (not logged in) (xx.xx.xxx.xxx)> 200 Protection level set to P

7/26/2010 12:45:05 PM - (not logged in) (xx.xx.xxx.xxx)> USER username

7/26/2010 12:45:05 PM - (not logged in) (xx.xx.xxx.xxx)> 331 Password required for username

7/26/2010 12:45:05 PM - (not logged in) (xx.xx.xxx.xxx)> PASS xxxxxxxxxx

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> 230 Logged on

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> OPTS utf8 on

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> 200 UTF8 mode enabled

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> PWD

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> 257 "/" is current directory.

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> CWD /

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> 250 CWD successful. "/" is current directory.

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> TYPE I

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> 200 Type set to I

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> PASV

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> 227 Entering Passive Mode (xx,xx,xxx,xxx,xxx,xxx)

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> LIST

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> 150 Connection accepted

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> SSL connection for data connection established

7/26/2010 12:45:05 PM - username (xx.xx.xxx.xxx)> 226 Transfer OK

7/26/2010 12:46:43 PM - username (xx.xx.xxx.xxx)> disconnected.

EDIT - e aqui está um log de uma tentativa bem-sucedida da mesma máquina usando o cliente FileZilla

7/28/2010 10:01:53 AM - (não autenticado) (xx.xx.xxx.xxx) > Conectado, enviando mensagem de boas vindas ...

7/28/2010 10:01:53 AM - (não autenticado) (xx.xx.xxx.xxx) > 220-FileZilla Server versão 0.9.32 beta

7/28/2010 10:01:53 AM - (não autenticado) (xx.xx.xxx.xxx) > 220 ftp.xxxxxxxx.com

7/28/2010 10:01:53 AM - (não autenticado) (xx.xx.xxx.xxx) > Conexão SSL estabelecida

7/28/2010 10:01:53 AM - (não autenticado) (xx.xx.xxx.xxx) > USER username

7/28/2010 10:01:53 AM - (não autenticado) (xx.xx.xxx.xxx) > 331 Senha requerida para o nome de usuário

7/28/2010 10:01:53 AM - (não autenticado) (xx.xx.xxx.xxx) > PASSE ********

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > 230 Conectado

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > SYST

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > 215 UNIX emulado pelo FileZilla

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > FEAT

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > 211-características:

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > MDTM

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > REST STREAM

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > TAMANHO

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > Tipo MLST *; tamanho *; modificar *;

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > MLSD

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > AUTH SSL

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > AUTH TLS

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > UTF8

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > CLNT

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > MFMT

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > 211 Fim

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > PBSZ 0

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > 200 PBSZ = 0

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > PROT P

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > 200 Nível de proteção definido para P

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > PWD

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > 257 "/" é o diretório atual.

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > TIPO I

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > 200 Tipo definido como I

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > PASV

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > 227 Inserindo o Modo Passivo (xx, xx, xxx, xxx, xxx, xxx)

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > MLSD

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > 150 Conexão aceita

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > Conexão SSL para conexão de dados estabelecida

7/28/2010 10:01:53 AM - nome de usuário (xx.xx.xxx.xxx) > 226 Transferência OK

7/28/2010 10:02:18 AM - nome de usuário (xx.xx.xxx.xxx) > desconectado.

    
por IniTech 26.07.2010 / 20:58

2 respostas

1

Lidar com esses tipos de problemas pode ser difícil porque os logs geralmente informam apenas parte do que está acontecendo.

Sua melhor aposta neste momento é usar um software de captura e análise de pacotes (como o mais excelente - e gratuito - wireshark ) para veja o que realmente está acontecendo.

Certifique-se de capturar todo o tráfego entre sua máquina e o sistema remoto e tente ver a diferença que você pode identificar entre uma conexão ativa e seu código. Isso pode dar uma indicação de onde está o problema.

Preste atenção especial à forma como a conexão TLS é negociada, pois ela pode apontar para o problema real (há um documento bastante agradável e simples de entender que pode ser encontrado em IBM ). Por exemplo:

  • Se a conexão parar após a troca dos certificados, é uma indicação de que uma das partes não pode verificar o certificado do outro. Essa é uma fonte bastante comum de problemas com o software TLS, especialmente quando certificados autoassinados ou raízes privadas são usados.
  • Se a conexão for interrompida no primeiro estágio do handshake, pode ser que o cliente e o servidor não concordem em qual protocolo usar (geralmente porque uma das partes se restringe a protocolos "seguros" que o outro não suporte).
  • Se o servidor definiu o sinalizador "certificado de cliente necessário", pode ser que você não tenha configurado um certificado de cliente para autenticação.
  • (etc)

Se você perceber que o canal TLS foi negociado com sucesso, você terá que usar as armas grandes: pegue a chave privada do servidor e decodifique o tráfego TLS. Isso só será possível, no entanto, se a conexão TLS não usar troca de chaves DH assim primeiro , desabilite isso no seu servidor ou cliente.

Uma vez que o DH tenha sido desativado e você tenha a chave privada, você pode seguir as instruções na página wiki do Wireshark sobre SSL / TLS que explica o processo em um pouco de detalhes ou isso postagem no blog que talvez seja um pouco mais fácil de seguir.

    
por 18.03.2014 / 10:17
0

have I missed something obvious

Você pode estar cometendo o erro de pensar que há apenas uma maneira de se conectar a um servidor ftp e, portanto, assumir que o seu código está fazendo a mesma coisa que o FileZilla Client.

Você mostra o log quando não se conecta. Você precisa compará-lo com um log de uma conexão bem-sucedida para ver como o cliente se conecta. (Pode não estar usando o AUTH TLS ou pode estar usando o modo passivo, etc)

Além disso, eu não sei nada sobre o FileZilla, mas essa configuração (isto é, FTP, TLS e NAT) pode causar problemas, tanto que alguns servidores FTP se descrevem como amigos da NAT.

    
por 26.07.2010 / 21:22