Guest User

Untitled

a guest
Jul 19th, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.96 KB | None | 0 0
  1. // ftpc.cpp : Defines the entry point for the console application.
  2. //
  3. #include <windows.h>
  4. #include <stdio.h>
  5. #include <iostream>
  6. #include <fstream>
  7.  
  8. using namespace std;
  9.  
  10. SOCKET sockfd_link, sockfd_data;
  11. bool active = true;
  12.  
  13. bool login(char *username, char* password)
  14. {
  15. char buffer[300];
  16.  
  17. buffer[0] = '\0';
  18. strcpy(buffer, "USER ");
  19. strncat(buffer, username, strlen(username));
  20. strcat(buffer, "\r\n");
  21.  
  22. send(sockfd_link, (char*)&buffer, strlen(buffer), 0);
  23. buffer[0] = '\0';
  24. recv(sockfd_link, (char*)&buffer, 300, 0);
  25. buffer[3] = '\0';
  26. if(strcmp(buffer, "230") == 0)
  27. return true;
  28. else if(strcmp(buffer, "331") == 0)
  29. {
  30. buffer[0] = '\0';
  31. strcpy(buffer, "PASS ");
  32. strncat(buffer, password, strlen(password));
  33. strcat(buffer, "\r\n");
  34. send(sockfd_link, (char*)&buffer, strlen(buffer), 0);
  35. buffer[0] = '\0';
  36. recv(sockfd_link, (char*)&buffer, 300, 0);
  37. buffer[3] = '\0';
  38. if(strcmp(buffer, "230") == 0)
  39. return true;
  40. else
  41. return false;
  42. }
  43. else
  44. {
  45. return false;
  46. }
  47. }
  48.  
  49. DWORD WINAPI CheckIfCompleteReceive(LPVOID lpParam)
  50. {
  51. char buffer[50];
  52.  
  53. recv(sockfd_link, buffer, 50, 0);
  54. buffer[3] = '\0';
  55. bool *complete = (bool *)lpParam;
  56. if(strcmp(buffer, "226") == 0)
  57. {
  58. *complete = true;
  59. }
  60. else
  61. *complete = false;
  62.  
  63. return 0;
  64. }
  65.  
  66. bool get(char *path, struct sockaddr_in *sockaddr_data)
  67. {
  68. char buffer[200];
  69. DWORD threadID;
  70. int length = sizeof(struct sockaddr);
  71. listen(sockfd_data, 5);
  72. if(active)
  73. {
  74. strcpy(buffer, "RETR ");
  75. strncat(buffer, path, strlen(path));
  76. strcat(buffer, "\r\n");
  77. send(sockfd_link, (char*)&buffer, 200, 0);
  78.  
  79. recv(sockfd_link, (char*)&buffer, 200, 0);
  80. buffer[3] = '\0';
  81.  
  82. SOCKET sock_incoming;
  83. if(strcmp(buffer, "150") == 0)
  84. {
  85. sock_incoming = accept(sockfd_data, (struct sockaddr *)&sockaddr_data, &length);
  86. cout << "Otvaranje Data konekcije!\n";
  87. }
  88. else
  89. return false;
  90.  
  91. ofstream fstream_out;
  92. fstream_out.open(path, ios::out | ios::binary | ios::app);
  93.  
  94. bool *finished = false;
  95. HANDLE completeThrd = CreateThread(NULL,0,CheckIfCompleteReceive, (void *)&finished, 0, &threadID);
  96.  
  97. int nrbytes;
  98. char temp[200];
  99. while(!finished)
  100. {
  101. nrbytes = recv(sock_incoming, (char*)&buffer, 200, 0);
  102. strncpy(temp,buffer,nrbytes);
  103. temp[nrbytes] = '\0';
  104. fstream_out << temp;
  105. }
  106.  
  107.  
  108. fstream_out.close();
  109. return true;
  110.  
  111. }
  112. else
  113. {
  114.  
  115. }
  116. }
  117.  
  118. int opcije()
  119. {
  120. cout << "Komande:\n";
  121. cout << "\t1. login\n";
  122. cout << "\t2. get\n";
  123. cout << "\t3. put\n";
  124. cout << "\t4. port\n";
  125. cout << "\t5. quit\n";
  126.  
  127. char response[2];
  128. cin >> response;
  129. cout << "\n\n";
  130.  
  131. int ret = atoi(&response[0]);
  132. if(ret > 0 && ret < 6)
  133. return ret;
  134. else
  135. return 0;
  136.  
  137. }
  138.  
  139. bool port(char *param)
  140. {
  141. char buffer[50];
  142. buffer[0] = '\0';
  143. strcpy(buffer, "PORT ");
  144. strncat(buffer, param, strlen(param));
  145. strcat(buffer, "\r\n");
  146. send(sockfd_link, buffer, 50, 0);
  147. recv(sockfd_link, buffer, 50, 0);
  148. buffer[3] = '\0';
  149.  
  150. if(strcmp(buffer, "200") == 0)
  151. return true;
  152. else
  153. return false;
  154. }
  155.  
  156. int main(int argc, char** argv)
  157. {
  158. WSAData wsaData;
  159.  
  160. WSAStartup(MAKEWORD(2, 1), &wsaData);
  161.  
  162. sockfd_link = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  163. sockfd_data = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  164.  
  165. struct sockaddr_in sockaddr_link_my, sockaddr_data_my;
  166. struct sockaddr_in sockaddr_link, sockaddr_data;
  167.  
  168. memset(&sockaddr_link_my, 0, sizeof(struct sockaddr_in));
  169. sockaddr_link_my.sin_family = AF_INET;
  170. sockaddr_link_my.sin_addr.s_addr = INADDR_ANY;
  171. sockaddr_link_my.sin_port = htons(0);
  172.  
  173. memset(&sockaddr_data_my, 0, sizeof(struct sockaddr_in));
  174. sockaddr_data_my.sin_family = AF_INET;
  175. sockaddr_data_my.sin_addr.s_addr = INADDR_ANY;
  176. sockaddr_data_my.sin_port = htons(20);
  177.  
  178. bind(sockfd_link, (struct sockaddr*)&sockaddr_link_my, sizeof(struct sockaddr));
  179. bind(sockfd_data, (struct sockaddr*)&sockaddr_data_my, sizeof(struct sockaddr));
  180.  
  181. if(argc != 2)
  182. {
  183. printf("Greska u parametrima!\nParametar je IP adresa servera.\n");
  184. exit(0);
  185. }
  186.  
  187. memset(&sockaddr_link, 0, sizeof(struct sockaddr_in));
  188. sockaddr_link.sin_family = AF_INET;
  189. sockaddr_link.sin_addr.s_addr = inet_addr(argv[1]);
  190. sockaddr_link.sin_port = htons(21);
  191.  
  192. memset(&sockaddr_data, 0, sizeof(struct sockaddr_in));
  193. sockaddr_data.sin_family = AF_INET;
  194. sockaddr_data.sin_addr.s_addr = INADDR_ANY;//inet_addr(argv[1]);
  195. sockaddr_data.sin_port = htons(0); //ovde sam menjo
  196.  
  197.  
  198. if(connect(sockfd_link, (struct sockaddr*)&sockaddr_link, sizeof(struct sockaddr)) == SOCKET_ERROR)
  199. {
  200. printf("Greska u konektovanju!\n");
  201. }
  202.  
  203. char buffer[100];
  204. int ret = recv(sockfd_link, buffer, 100, 0);
  205. buffer[3] = '\0';
  206. if(ret == 0)
  207. printf("Server nas ne voli!\n");
  208. else if(ret < 0)
  209. printf("server prica kineski!\n");
  210. else
  211. {
  212. if(strcmp(buffer, "220") == 0)
  213. printf("Uspesna konekcija!\n");
  214. else
  215. printf("ne vrne 220\n");
  216. }
  217.  
  218. while((ret = opcije()) != 5)
  219. {
  220. if(ret == 0)
  221. printf("Nepostojeca opcija!\n\n");
  222. else if(ret == 1)
  223. {
  224. char username[15], password[15];
  225. password[0] = '\0';
  226. cout << "Unesite username: ";
  227. cin >> username;
  228. if(!login(username, password))
  229. {
  230. cout << "Unesite password: ";
  231. cin >> password;
  232. if(!login(username, password))
  233. {
  234. cout << "Greska u unosu!\n\n";
  235. }
  236. else
  237. cout << "Uspesno logovanje.\n";
  238. }
  239. else
  240. cout << "Uspesno logovanje.\n";
  241. }
  242. else if(ret == 2)
  243. {
  244. char path[50];
  245. cout << "Unesite putanju do fajla: ";
  246. cin >> path;
  247.  
  248. /*if(active)
  249. {
  250.  
  251. }
  252. else
  253. {
  254.  
  255. }*/
  256.  
  257.  
  258. if(get(path, &sockaddr_data))
  259. cout << "Fajl je uspesno prosledjen.\n";
  260. else
  261. cout << "Greska u prosledjivanju fajla!\n";
  262. }
  263. else if(ret == 4)
  264. {
  265. char buffer[40];
  266. cout << "Unesite parametre za port: ";
  267. cin >> buffer;
  268.  
  269. if(port(buffer))
  270. cout << "Uspesna redirekcija data konekcije.\n";
  271. else
  272. cout << "Greska u redirektovanju data konekcije!\n";
  273. }
  274.  
  275. }
  276.  
  277. return 0;
  278. }
Add Comment
Please, Sign In to add comment