Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Lập trình lệnh SEND của FTP với C như thế nào?

  1. #1
    Ngày gia nhập
    01 2011
    Bài viết
    4

    Unhappy Lập trình lệnh SEND của FTP với C như thế nào?

    Chào các bác, tình hình là em vừa mới học lập trình mà thầy giáo đã bắt làm con keylogger rồi
    Về phần log thì em đã làm tương đối, giờ em đang bị tắc ở đoạn gửi file lên FTP server. Code của em mới được đến bước đăng nhập:
    Visual C++ Code:
    1. #define WIN32_LEAN_AND_MEAN
    2.  
    3. #include <windows.h>
    4. #include <winsock2.h>
    5. #include <ws2tcpip.h>
    6. #include <stdlib.h>
    7. #include <stdio.h>
    8. #include <conio.h>
    9.  
    10.  
    11. // Need to link with Ws2_32.lib, Mswsock.lib, and Advapi32.lib
    12. #pragma comment (lib, "Ws2_32.lib")
    13. #pragma comment (lib, "Mswsock.lib")
    14. #pragma comment (lib, "AdvApi32.lib")
    15.  
    16.  
    17. #define DEFAULT_BUFLEN 512
    18. #define DEFAULT_PORT "21"
    19. #define FTP_SERVER "localhost"  // Em cài Filezilla server vào máy để chạy thử
    20.  
    21. int sendData(SOCKET s, char *data){
    22.     int iResult;
    23.     iResult = send(s, data, (int)strlen(data), 0);
    24.     if(iResult == SOCKET_ERROR){
    25.         printf("Send failed. Error: %d\n", WSAGetLastError());
    26.     } else {
    27.         printf("Bytes sent: %ld\n", iResult);
    28.     }
    29.  
    30.     return iResult;
    31. }
    32.  
    33. int __cdecl main(int argc, char **argv)
    34. {
    35.  
    36. // Đoạn này chỉ khởi tạo socket, kết nối server
    37.     WSADATA wsaData;
    38.     SOCKET ConnectSocket = INVALID_SOCKET;
    39.     struct addrinfo *result = NULL,
    40.                     *ptr = NULL,
    41.                     hints;
    42.     //char *sendbuf = "this is a test";
    43.     char recvbuf[DEFAULT_BUFLEN];
    44.     int iResult;
    45.     int recvbuflen = DEFAULT_BUFLEN;
    46.    
    47.  
    48.  
    49.     // Initialize Winsock
    50.     iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    51.     if (iResult != 0) {
    52.         printf("WSAStartup failed with error: %d\n", iResult);
    53.         return 1;
    54.     }
    55.  
    56.     ZeroMemory( &hints, sizeof(hints) );
    57.     hints.ai_family = AF_UNSPEC;
    58.     hints.ai_socktype = SOCK_STREAM;
    59.     hints.ai_protocol = IPPROTO_TCP;
    60.  
    61.     // Resolve the server address and port
    62.     iResult = getaddrinfo(FTP_SERVER, DEFAULT_PORT, &hints, &result);
    63.     if ( iResult != 0 ) {
    64.         printf("getaddrinfo failed with error: %d\n", iResult);
    65.         WSACleanup();
    66.         return 1;
    67.     }
    68.  
    69.     // Attempt to connect to an address until one succeeds
    70.     for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {
    71.  
    72.         // Create a SOCKET for connecting to server
    73.         ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype,
    74.             ptr->ai_protocol);
    75.         if (ConnectSocket == INVALID_SOCKET) {
    76.             printf("socket failed with error: %ld\n", WSAGetLastError());
    77.             WSACleanup();
    78.             return 1;
    79.         }
    80.  
    81.         // Connect to server.
    82.         iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
    83.         if (iResult == SOCKET_ERROR) {
    84.             closesocket(ConnectSocket);
    85.             ConnectSocket = INVALID_SOCKET;
    86.             continue;
    87.         }
    88.         break;
    89.     }
    90.  
    91.     freeaddrinfo(result);
    92.  
    93.     if (ConnectSocket == INVALID_SOCKET) {
    94.         printf("Unable to connect to server!\n");
    95.         WSACleanup();
    96.         return 1;
    97.     } else {
    98.         printf("Da ket noi thanh cong den server.\Bat dau gui lenh:\n\n");
    99.     }
    100.  
    101. /////////////////////////////////////////////////////////////////////////////
    102. // OK kết nối xong, đến phần việc chính
    103.  
    104.     sendData(ConnectSocket, "USER user\n"); printf(" -- user name\n");
    105.    
    106.     sendData(ConnectSocket, "PASS 123456\n"); printf(" -- pass\n");
    107.  
    108.     sendData(ConnectSocket, "PWD\n");
    109.  
    110. ///////////////////////////////////////////////////////
    111. //// Bây giờ làm thế nào nữa ạ??? /////////////////
    112. ///////////////////////////////////////////////////////
    113.    
    114.     sendData(ConnectSocket, "QUIT\n"); printf(" -- quit\n"); getch();
    115.  
    116.     getch();
    117.     return 0;
    118. }


    Bây giờ em muốn implement cái lệnh SEND hoặc PUT theo FTP, nhưng dường như lệnh này còn cần phải đặt PORT, mở thêm một kết nối phụ để truyền dữ liệu, dùng chung với STOR hay cái gì đó (em chả biết nữa ),
    em đã đọc RFC 959 rồi mà cũng không thấy nó nói kĩ cái đoạn này.

    Bác nào có thời gian + lòng tốt vui lòng chỉ giúp em với ạ, nếu có code mẫu + comment thì càng tốt.
    Em cảm ơn nhiều.

  2. #2
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Bạn xem code ở các chương trình ở đây, chú ý vào phần kernel, vức mấy cái gui qua một bên.
    Ref Link Code:

    Có nhiều source cho bạn tham khảo.
    Trích dẫn Nguyên bản được gửi bởi MrLoyal Xem bài viết
    Chào các bác, tình hình là em vừa mới học lập trình mà thầy giáo đã bắt làm con keylogger rồi
    Theo tôi nghĩ đã là thấy giáo thì chẳng ai dạy học trò làm keylog bao giờ. :-| Cùng lắm là ra mấy đề tài như, viết giao thức FTP... Ghi lại kí tự gõ... (nhưng điều này đối với người mới học c có vẻ vô lý). Bác tò mò quậy phá thì khai thật đi nhé. :-|
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Theo mình biết thì : Đối với ngôn ngữ C thuần túy thì ko hỗ trợ các giao thức mạng sẵn,
    Ví dụ như cái mình đang làm thì : giả sử bạn có 1 cục thiết bị, nếu muốn dùng nó để làm gì đó thì bạn cần hiểu cấu trúc chân cẳng của nó như thế nào, hoạt động ra làm sao và tự viết cho nó từ thấp lên cao

    Còn đối với cái bạn hỏi thì chỉ cần dùng các API do OS đã đóng gói và cung cấp sẵn cho bạn, hoặc trong các gói SDK có.
    Ví dụ, trên windows bạn dùng các win32api, còn trên linux thì bạn có thể dùng các API từ 1 SDK nào đó.
    Như cái RTOS (core linux)mình đang làm thì nó dùng 1 cái sdk là man machine, trong đó nó có định nghĩa sẵn vài API về vấn đề này.
    Hoặc đối với ubuntu theo mình biết thì nó có các gói sẵn trong os rồi...


    (có gì sai thì mong được các bạn chỉ bảo)


    (đối với vấn đề này, nên đặt câu hỏi của box VC++ nhé, hỏi ở đây sẽ ít được quan tâm vì nó không đúng với ý nghĩa của box)


    Còn đối với con key log gì đó của ông thầy bạn thì bạn chỉ cần xài MSDN là đủ rồi
    (note : đã phát triển ứng dụng trên windows thì phải biết msdn. nếu chưa biết nó là gì thì hỏi ông google đi nhé)
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  4. #4
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Đã làm được đến đăng nhập mà không biết làm tiếp. Bạn quả thực là 'làm mò, học vẹt'. Thường thì người ta phải chạy bằng telnet trước rồi mới đưa vào chương trình, nói trắng phớ ra là nó giống hệt gọi lệnh dos command, chỉ khác là gọi qua socket.

    FTP có lệnh SEND ah, cái này chắc Kevin chưa học, lệnh PUT thật là ngại quá Kevin rất ít khi sử dụng, chả biết là nó có hoạt động hay không. Kevin chỉ dùng STOR thôi, nên chẳng giúp gì cho bạn rồi.

    Đừng có xin code nhé, dễ bị cấm tham gia như chơi!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  5. #5
    Ngày gia nhập
    01 2011
    Bài viết
    4

    Vâng, cảm ơn các bác đã góp ý,

    Bác Kenvin làm ơn nói rõ chỗ STOR giúp em được không ạ, thật ngại quá
    Sau khi bác log on vào được FTP server rồi thì câu lệnh tiếp theo trong Telnet của bác là gì ạ?
    Bác thử làm trong telnet và copy ra đây giúp em được không ạ?


    Reading reading reading .

Các đề tài tương tự

  1. send mail trong asp.net xử lý như thế nào???
    Gửi bởi xiaoku trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 23
    Bài viết cuối: 22-11-2014, 11:48 AM
  2. Send text trong mạng lan như thế nào?
    Gửi bởi Joker trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 26-12-2010, 12:54 PM
  3. Thắc mắc về hàm send của socket
    Gửi bởi cold_blood_boy178 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 6
    Bài viết cuối: 19-11-2010, 01:27 PM
  4. [MFC] send and receive file như thế nào?
    Gửi bởi babamama trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 19-10-2010, 10:18 AM
  5. send 1 tổ hợp phím trong VC++ như thế nào?
    Gửi bởi tucute89 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 11-10-2010, 02:00 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn