Autor Tópico: FTP com ssl  (Lida 1392 vezes)

Offline Triton

  • Moderador Global
  • Stack Overflow
  • ******
  • Mensagens: 7326
Re: FTP com ssl
« Responder #15 em: 24 de Outubro de 2009, 23:35 »
http://www.google.com/search?q=c%23+ssl+ftp

Será assim tão difícil usar o Google primeiro para ver se existe o que tu queres? Assim não chateias ninguém com dúvidas simples de responder com o Google...
<3 life

Offline triplexim32

  • Boolean User
  • **
  • Mensagens: 166
Re: FTP com ssl
« Responder #16 em: 25 de Outubro de 2009, 01:02 »
Código baseado em codigo exemplo de FTP TLS Chilkat
Boa Sorte, e bom estudo.

tenho uma divida:
Esta classe não é trial? Não vou ter problemas depois com os utilizadores do meu programa em ficarem com o programa não funcional?
Obrigado pela ajuda :)

--

Triton: o que encontrei foram varias paginas referentes a esta classe acima dada pelo apocsantos.
Já tinha perdido bastante tempo à procura de um programa em c# dai ter vindo aqui pedir ajuda  :)
<

Offline IceBrain

  • CRLF
  • ****
  • Mensagens: 868
    • Tudamonte
Re: FTP com ssl
« Responder #17 em: 25 de Outubro de 2009, 01:05 »
É, depois tens que pagar 150$ por uma licença.
❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞

- John Carmack on software patents

A list  of command line apps

Offline apocsantos

  • Moderador Local
  • CRLF
  • ******
  • Mensagens: 631
Re: FTP com ssl
« Responder #18 em: 25 de Outubro de 2009, 17:30 »
Num programa de nivel proficional eu considero os 150$ um investimento. Tal como se paga pelos compiladores.

Em alternativa tens um bom exemplo de uma implementação sem recurso a ferramentas pagas neste link http://www.codeproject.com/KB/IP/FTP_Secure.aspx. É chatinho de fazer funcionar mas funciona.

Offline triplexim32

  • Boolean User
  • **
  • Mensagens: 166
Re: FTP com ssl
« Responder #19 em: 25 de Outubro de 2009, 18:49 »
ok vou ver no que da, obrigado pela ajuda  :)
<

Offline paulo_jcg

  • void
  • *
  • Mensagens: 5

Offline triplexim32

  • Boolean User
  • **
  • Mensagens: 166
Re: FTP com ssl
« Responder #21 em: 20 de Novembro de 2009, 01:28 »
optei por este codigo, mas tou com problemas.
Ja saquei a dll instalei e adicionei ao projecto como lá diz, mas esta cena crasha-me toda.

Alguem que teste com esta conta que criei:
teste:teste@141.61.102.16:1299
(apenas precisa de SSL)

e tente fazer download do ficheiro com o source dado nesta classe (Chilkat)
<

Offline apocsantos

  • Moderador Local
  • CRLF
  • ******
  • Mensagens: 631
Re: FTP com ssl
« Responder #22 em: 20 de Novembro de 2009, 09:10 »
download feito

Apenas tive de indicar que utiliza TLS Explicito.


Código (C): [Seleccione]
//Codigo baseado no exemplo de uso de FTP TLS Explicito do componente Chilkat

Chilkat.SFtp sftp = new Chilkat.SFtp();

success = sftp.UnlockComponent("Anything for 30-day trial");
if (success != true) {
    MessageBox.Show(sftp.LastErrorText);
    return;
}

//  Set some timeouts, in milliseconds:
sftp.ConnectTimeoutMs = 5000;
sftp.IdleTimeoutMs = 15000;

//  Connect to the SSH server.
//  The standard SSH port = 22
//  The hostname may be a hostname or IP address.
int port;
string hostname;
hostname = "141.61.102.16";
port = 1299;
success = sftp.Connect(hostname,port);
if (success != true) {
    MessageBox.Show(sftp.LastErrorText);
    return;
}

//  Authenticate with the SSH server.  Chilkat SFTP supports
//  both password-based authenication as well as public-key
//  authentication.  This example uses password authenication.
success = sftp.AuthenticatePw("myLogin","myPassword");
if (success != true) {
    MessageBox.Show(sftp.LastErrorText);
    return;
}

//  After authenticating, the SFTP subsystem must be initialized:
success = sftp.InitializeSftp();
if (success != true) {
    MessageBox.Show(sftp.LastErrorText);
    return;
}

//  Open a file on the server:
string handle;
handle = sftp.OpenFile("download.txt","readOnly","openExisting");
if (handle == null ) {
    MessageBox.Show(sftp.LastErrorText);
    return;
}

byte[] pData = null;

bool bEof;
bEof = false;
int chunkSize;
chunkSize = 10000;

while (bEof == false) {

    pData = sftp.ReadFileBytes(handle,chunkSize);
    if (sftp.LastReadFailed(handle) == true) {
        MessageBox.Show(sftp.LastErrorText);
        break;
    }
    else {

       

    }

    bEof = sftp.Eof(handle);
}

//  Close the file.
success = sftp.CloseHandle(handle);
if (success != true) {
    MessageBox.Show(sftp.LastErrorText);
    return;
}

MessageBox.Show("Success.");

Offline triplexim32

  • Boolean User
  • **
  • Mensagens: 166
Re: FTP com ssl
« Responder #23 em: 21 de Novembro de 2009, 01:55 »
antes de mais obrigado pelo código, aparece-me um erro na messagebox:

Citar
ChilkatLog:
  Connect:
    DllDate: Nov  3 2009
    UnlockPrefix: Anything for 30-day trial
    Username: triplexim32
    Component: .NET 2.0
    SftpVersion: 0
    hcCurDate: Sat, 21 Nov 2009 03:34:41 +0000
    hcExpire: 12/2009
    hostname: 141.61.102.16
    port: 1299
    Established TCP/IP connection with SSH server
    clientIdentifier: SSH-2.0-PuTTY_Local:_May_11_2009_17:22:38
    FromServer: 431 Unable to negotiate secure command connection.

    numBytesRequested: 1
    Connection closed by server.
    Failed to read intial protocol version string
    bytesReceived:
    Failed.

Estou a usar este código, alterei o user e a pw que ainda estavam com o valor por defeito

Código (C): [Seleccione]
Chilkat.SFtp sftp = new Chilkat.SFtp();

            bool success = sftp.UnlockComponent("Anything for 30-day trial");
            if (success != true)
            {
                MessageBox.Show(sftp.LastErrorText);
                return;
            }

            //  Set some timeouts, in milliseconds:
            sftp.ConnectTimeoutMs = 5000;
            sftp.IdleTimeoutMs = 15000;

            //  Connect to the SSH server.
            //  The standard SSH port = 22
            //  The hostname may be a hostname or IP address.
            int port;
            string hostname;
            hostname = "141.61.102.16";
            port = 1299;
            success = sftp.Connect(hostname, port);
            if (success != true)
            {
                MessageBox.Show(sftp.LastErrorText);
                return;
            }

            //  Authenticate with the SSH server.  Chilkat SFTP supports
            //  both password-based authenication as well as public-key
            //  authentication.  This example uses password authenication.
            success = sftp.AuthenticatePw("teste", "teste");
            if (success != true)
            {
                MessageBox.Show(sftp.LastErrorText);
                return;
            }

            //  After authenticating, the SFTP subsystem must be initialized:
            success = sftp.InitializeSftp();
            if (success != true)
            {
                MessageBox.Show(sftp.LastErrorText);
                return;
            }

            //  Open a file on the server:
            string handle;
            handle = sftp.OpenFile("download.txt", "readOnly", "openExisting");
            if (handle == null)
            {
                MessageBox.Show(sftp.LastErrorText);
                return;
            }

            byte[] pData = null;

            bool bEof;
            bEof = false;
            int chunkSize;
            chunkSize = 10000;

            while (bEof == false)
            {

                pData = sftp.ReadFileBytes(handle, chunkSize);
                if (sftp.LastReadFailed(handle) == true)
                {
                    MessageBox.Show(sftp.LastErrorText);
                    break;
                }
                else
                {



                }

                bEof = sftp.Eof(handle);
            }

            //  Close the file.
            success = sftp.CloseHandle(handle);
            if (success != true)
            {
                MessageBox.Show(sftp.LastErrorText);
                return;
            }

            MessageBox.Show("Success.");
« Última modificação: 21 de Novembro de 2009, 03:41 por triplexim32 »
<

Offline apocsantos

  • Moderador Local
  • CRLF
  • ******
  • Mensagens: 631
Re: FTP com ssl
« Responder #24 em: 22 de Novembro de 2009, 14:46 »
FromServer: 431 Unable to negotiate secure command connection.

Verifica com um programa que te permita usar FTP TLS o acesso ao server. Pelo que vejo o server não consegue "trancar" um canal seguro, e por isso mesmo termina a connecção. Verifica se consegues aceder com o filezilla por exemplo, caso consigas, verifica o log do servidor a ver o que ele te registou na connecção, e altera o codigo. Quanto testei usei TLS Explicito, porque doutra forma o server recusava-se a "trancar" a ligação. O que me parece estar a passar é que o server não consegue negociar as chaves de criptografia, e estabelecer uma ligação com protocolo seguro. Verifica se consegues com outro programa e coloca cá noticias para eu ver se te consigo ajudar mais.

Cumprimentos,

A. Santos

Offline apocsantos

  • Moderador Local
  • CRLF
  • ******
  • Mensagens: 631
Re: FTP com ssl
« Responder #25 em: 27 de Novembro de 2009, 09:14 »
Este foi testado, e deu "dores de cabeça". Afinal os problemas mais dificeis de resolver são aqueles que estão no sitio mais obvio. O mal não estava no codigo mas no certificado do servidor.


Código (C): [Seleccione]
private void button13_Click_1(object sender, EventArgs e)
    {

        Chilkat.Ftp2 ftp = new Chilkat.Ftp2();
        ftp.UnlockComponent("anything for 30-day trial");

        bool success;

        success = ftp.UnlockComponent("Anything for 30-day trial");
        if (!success)
        {
            MessageBox.Show(ftp.LastErrorText);
            return;
        }

        // Define a propriedade AuthTls para falso
          ftp.AuthTls = false;

       //Define a propriedade SSL como true para tornar o FTP-TLS Explicito
         
        ftp.Ssl = true;
       
        // Define o host, user, pass e porta
        ftp.Hostname = "ftp.ftps.com";
        ftp.Username = "test";
        ftp.Password = "test";
        ftp.Port = 1299;
       
     
        ftp.KeepSessionLog = false;
       
     
        success = ftp.Connect();
        if (!success)
        {
            MessageBox.Show(ftp.LastErrorText);
            return;
        }
       
        ftp.ClearControlChannel();

        // Upload do ficheiro.
        string localFilename = "download.txt";
        string remoteFilename = "download.txt";

   
        success = ftp.PutFile(localFilename, remoteFilename);
        if (!success)
        {
            MessageBox.Show(ftp.LastErrorText);
            return;
        }

            MessageBox.Show(ftp.LastErrorText);

        // Download a file.
        localFilename = "downloadDownloaded.txt";

        success = ftp.GetFile(remoteFilename, localFilename);
        if (!success)
        {
            MessageBox.Show(ftp.LastErrorText);
            return;
        }

        // Disconnect
        ftp.Disconnect();

        // Display the session log
        textBox3.Text = ftp.SessionLog;
    }

       
        }