• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

triplexim32

FTP com ssl

26 mensagens neste tópico

Alguém sabe como faço um cliente FTP com ssl?

Ou alguem tem um ja feito?

ja procurei e encontrei um mas nao tem SSL

---

alguma dica?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Filezilla não dá? Ele até suporta sftp.

o filezila é feito em que lingua?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

wxWidgets em C++

pois mas surge um problema, direitos GNU blablabla.... queria mesmo saber como fazer ssl :\

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao percebi  :shocking:

Request for Coments (RFC 4217 Securing FTP with TLS)

Aqui neste texto tens explicado o funcionamento de FTP em modo seguro , apartir daqui podes ler atentamente todo o texto e perceber como configurar o servidor FTP e o Cliente FTP para funcionar em modo Seguro, uma vez que TLS tal como SSL encriptam as conecções em ambos os extremos (portos) da ligação.

Agora não faz mal nenhum passar umas boas horinhas a ler o RFC, afinal ler nunca é demais!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Request for Coments (RFC 4217 Securing FTP with TLS)

Aqui neste texto tens explicado o funcionamento de FTP em modo seguro , apartir daqui podes ler atentamente todo o texto e perceber como configurar o servidor FTP e o Cliente FTP para funcionar em modo Seguro, uma vez que TLS tal como SSL encriptam as conecções em ambos os extremos (portos) da ligação.

Agora não faz mal nenhum passar umas boas horinhas a ler o RFC, afinal ler nunca é demais!

Mas eu queria aprender código para fazer em c#, a teoria não me vai ajudar a fazer só a perceber como funciona.

:P

não encontro nada no Google ja feito  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Portanto tu queres código já feito, na linguagem que tu queres, numa licença para que tu possas pegar no código e fechá-lo, e à borla.

Good luck with that.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Portanto tu queres código já feito, na linguagem que tu queres, numa licença para que tu possas pegar no código e fechá-lo, e à borla.

Good luck with that.

eu nao tava a pedir um FTP feito, tava a pedir ajuda com o código -.-'

Quando e que vocês deixam de ser assim  :thumbdown:

Diz-me uma coisa:

Quando precisas de ajuda de um colega teu ou de um professor eles põe-te a ler artigos?

Eu sei o que é SSL, agora saber e uma coisa, chamar o SSL para funcionar no teu aplicativo é outra...

Pah se eu chegasse aqui e dissesse:

Façam-me um FTP com SSL que de para fazer pausa nos ficheiros, que de para listar\apagar alterar ficheiros etc etc...

Ai tinhas toda a razão de te queixares.

Não há um post num qualquer tópico em que não façam um extracto parvo de: Se queres feito desimerda-te

grande ajuda  :nono1:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

private void button13_Click(object sender, System.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;
}

ftp.AuthTls = true;


ftp.Ssl = false;

ftp.Hostname = "ftp.localhost.int";
ftp.Username = "user";
ftp.Password = "ftppass";

ftp.KeepSessionLog = true;


success = ftp.Connect();
if (!success) {
    MessageBox.Show(ftp.LastErrorText);
    return;
}


ftp.ClearControlChannel();

string localFilename = "file1.txt";
string remoteFilename = "file1.txt";


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


MessageBox.Show(ftp.LastErrorText);


localFilename = "file1_downloaded.txt";

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


ftp.Disconnect();

textBox3.Text = ftp.SessionLog;

    
    }

Código baseado em codigo exemplo de FTP TLS Chilkat

Boa Sorte, e bom estudo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :P

--

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  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

download feito

Apenas tive de indicar que utiliza TLS Explicito.

//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.");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

antes de mais obrigado pelo código, aparece-me um erro na messagebox:

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

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.");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora