2017-12-14 5 views
0

자격 증명을 사용하여 FTP에 액세스하려고합니다.C++ 및 Curl : 핸드 셰이크를 수신하지 못했습니다. 더 많은 데이터가 필요합니다.

내가 사용한 기능 중 많은 부분을 연구했지만 결코 컬을 사용하지 않고 내가하는 일에 대한 제한된 이해를하지 못했습니다. 나는 한때 C로 작동하는 FTP 클라이언트와 서버를 개발했지만 유닉스와 얼마 전에 유닉스에 불과했기 때문에 대부분의 경우 나에게 곱슬 곱슬 함을 느꼈다. (나는 곱슬 곱슬 함을 사용하고 싶다. 게다가 나는 모든 것을 포장하고 싶다. 나는 결국 곱슬을 사용하는 방법을 알아야 할 것이다.)

코드는 지금까지 (헤더 파일은 포함되어 있지 않지만 분명한 이유로 . 그들은) FileZilla의 시험 작동

bool FTPClient::DownloadFile() 
    { 
CURL *curl; 
CURLcode res; 
char buffer[CURL_ERROR_SIZE + 1] = {}; 
struct FtpFile ftpfile = 
{ 
    "test", 
    NULL 
}; 


curl_global_init(CURL_GLOBAL_DEFAULT); 

curl = curl_easy_init(); 
if (curl) 
{ 

    curl_easy_setopt(curl, CURLOPT_URL, 
     "https://[login]:[password]@lifesanctuary.eu/Update"); 
    curl_easy_setopt(curl, CURLOPT_PORT, 21); 
    curl_easy_setopt(curl, CURLOPT_SSL_CIPHER_LIST, "TLSv1"); 
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite); 
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile); 
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); 
    curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, buffer); 
    res = curl_easy_perform(curl); 
    curl_easy_cleanup(curl); 

    if (CURLE_OK != res) 
    { 
     //ERREUR 
     fprintf(stderr, "erreur CURL %d:\n%s\n", res, buffer); 
     curl_global_cleanup(); 
     return false; 
    } 
} 

if (ftpfile.stream) 
    fclose(ftpfile.stream); 

curl_global_cleanup(); 

return true; 
    } 

출력 :

* Trying 91.121.145.87... 
    * TCP_NODELAY set 
    * Connected to lifesanctuary.eu (91.121.145.87) port 21 (#0) 
    * schannel: SSL/TLS connection with lifesanctuary.eu port 21 (step 1/3) 
    * schannel: checking server certificate revocation 
    * schannel: sending initial handshake data: sending 185 bytes... 
    * schannel: sent initial handshake data: sent 185 bytes 
    * schannel: SSL/TLS connection with lifesanctuary.eu port 21 (step 2/3) 
    * schannel: failed to receive handshake, need more data 
    * schannel: SSL/TLS connection with lifesanctuary.eu port 21 (step 2/3) 
    * schannel: encrypted data got 53 
    * schannel: encrypted data buffer: offset 53 length 4096 
    * schannel: next InitializeSecurityContext failed: SEC_E_INVALID_TOKEN (0x80090308) - Le jeton fourni Ó la fonction nÆest pas valide 
    * Closing connection 0 
    * schannel: shutting down SSL/TLS connection with lifesanctuary.eu port 21 
    * schannel: clear security context handle 
    erreur CURL 35: 
    schannel: next InitializeSecurityContext failed: SEC_E_INVALID_TOKEN (0x80090308) - Le jeton fourni Ó la fonction nÆest pas valide 

문제가 무엇인지 모르겠습니다. 나는 리드를 가지고 조금만 검색하고, 관련이 없거나 단순히 이해하지 못하는 것을 발견했다는 결론에 도달했습니다.

: -

한 것이 있기 때문에 암호화, SSL/TLS의 수 있습니다 내가 그 라인을 넣어 내가 왜 그 도메인에 매우 지식이 아니에요 서버를 설정 한 사람은, 따라서, 그것은 TLS를 사용 하더군요

curl_easy_setopt(curl, CURLOPT_SSL_CIPHER_LIST, "TLSv1"); 

그러나 나는 그 밖의 방법을 알지 못했으며 "TLSv1"이 내 맥락에서 볼 수있는 유일한 매개 변수였습니다. 나는 그것이 문제일지도 모른다라고 생각한다.

또 다른 문제는 인증서 관련 일 수 있다고 생각합니다. 나는 왜 그런지 잘 모르겠다. 그러나 나는 관련된 인증서를 다룰 수 없다고 확신한다. 나는 그 인증서가 무엇 인지도 정확히 알지 못한다. 내가 filezilla로 내 ftp에 로그인 할 때 받아 들일 것을 알지만 여기서는 분명히하지 않습니다.

그럼 어떻게 될까요? 인증서 문제? 암호화 문제? 어쩌면 완전히 다른 무언가일까요? 미리 감사드립니다.

편집 : - 나는 때문에 내 지식 아무것도 HTTPS를 필요로하고 내가 그런 측면에서 아무것도 처리하지 않습니다에 인증서 문제입니다 가정하고, 는 - 나는 그것이 암호화 문제가있을 수 있습니다 고려하고이 오류 코드 때문에 대부분 그 것으로 인해 발생하는 것 같습니다. - 나는 확실히 다른 어떤 것이 될지도 모릅니다.

답변

0

나는이 서버를 건 사람으로부터 일련의 잘못된 정보가 원인이라고 생각합니다. 나는 "https : //"를 여러 번 사용하여 "ftp : //"가 사용되어야한다는 것을 알았지 만 지금은 내가 말한 암호화 시스템을 사용하면 안된다는 것을 나타내는 다른 오류가 발생합니다. 용도. 나는이 문제를 코드에서가 아니라 팀에서 더 많은 문제로 들림으로써 마무리하고있다.

관련 문제