Guest User

Untitled

a guest
Nov 23rd, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.98 KB | None | 0 0
  1.  
  2. #include "stdafx.h"
  3. #include <windows.h>
  4. #include <iostream>
  5. #include <conio.h>
  6. #include <string>
  7. #include <sstream>
  8. #include <fstream>
  9. #pragma comment (lib,"Ws2_32.lib")
  10. using namespace std;
  11.  
  12. int StringToInt(string s)
  13. {
  14. return atoi(s.c_str());
  15. }
  16.  
  17. class Sock
  18. {
  19. private:
  20. WSADATA wsa;
  21. SOCKET sock;
  22. SOCKET DataSock;
  23. SOCKADDR_IN cel;
  24. SOCKADDR_IN local;
  25. SOCKADDR_IN DataAddr;
  26. int err;
  27. string host;
  28. public:
  29. Sock();
  30. void Connect(string IP);
  31. int DataConnect(int Port);
  32. void SetNonBlock(bool state);
  33. void WyslijWiersz(string co);
  34. int PobierzHosta(string alias, sockaddr_in &addr);
  35. string Odbierz();
  36. string OdbierzDane();
  37. void OdbierzPlik(string nazwa,int rozmiar);
  38. int PobierzPort(string s);
  39.  
  40. ~Sock();
  41. };
  42.  
  43. Sock::Sock()
  44. {
  45. err = 0;
  46. //====WSA====
  47. if(WSAStartup(MAKEWORD(2,2), &wsa) != 0)
  48. {
  49. cout <<"Bład podczas inicjalizacji WSA: "<<WSAGetLastError();
  50. }
  51. else cout <<"Zainicjalizowano WSA."<<endl;
  52.  
  53. //SOCKET
  54. sock = socket(AF_INET, SOCK_STREAM, 0);
  55.  
  56. if(sock == INVALID_SOCKET)
  57. {
  58. cout <<"Błąd inicalizacji gniazda: "<<WSAGetLastError();
  59. }
  60. else cout <<"Zainicjalizowano gniazdo."<<endl;
  61.  
  62.  
  63. cel.sin_family = AF_INET;
  64. }
  65.  
  66. Sock::~Sock()
  67. {
  68. closesocket(sock);
  69. shutdown(sock,2);
  70. closesocket(DataSock);
  71. shutdown(DataSock,2);
  72. WSACleanup();
  73. cout << "Posprzatano" << endl;
  74. }
  75.  
  76. void Sock::Connect(std::string IP)
  77. {
  78. host = IP;
  79. sockaddr_in addr;
  80. PobierzHosta(IP, addr);
  81. cel.sin_addr.s_addr = addr.sin_addr.s_addr;
  82. cel.sin_port = htons(21);
  83.  
  84. if(connect(sock, (SOCKADDR*)&cel, sizeof(cel)) != 0 )
  85. {
  86. cout << "Nie udalo sie poalczyc z serwerem."<<endl;
  87. }
  88. else
  89. {
  90. cout <<"Polaczono z serwerem"<<endl;
  91. }
  92. }
  93.  
  94. int Sock::PobierzHosta(string alias,sockaddr_in &addr)
  95. {
  96. hostent* hInfo = NULL;
  97. hInfo = gethostbyname(alias.c_str());
  98.  
  99. if(hInfo == NULL)
  100. {
  101. int err = WSAGetLastError();
  102. if(err == WSAHOST_NOT_FOUND || err == WSANO_DATA) cout << "Nie znaleziono hosta\n";
  103. else cout << "Blad: " << err << endl;
  104. return -1;
  105. }
  106. if(hInfo->h_addrtype == AF_INET) addr.sin_addr.s_addr = *(u_long *) hInfo->h_addr_list[0];
  107. else return -1;
  108.  
  109. return 0;
  110.  
  111. }
  112.  
  113. void Sock::SetNonBlock(bool state)
  114. {
  115. u_long tryb = state;
  116. if(ioctlsocket(sock,FIONBIO,&tryb) == NO_ERROR)
  117. {
  118. cout << "Zmieniono tryb gniazda." << endl;
  119. }
  120. else
  121. {
  122. cout << "Blad: " << WSAGetLastError() << endl;
  123. }
  124. }
  125.  
  126. string Sock::Odbierz()
  127. {
  128. string s = "";
  129. fd_set set;
  130. timeval timeout = {0,1000000};
  131. char bufor[1024];
  132. memset(bufor,0,1024);
  133.  
  134. do
  135. {
  136. FD_ZERO(&set);
  137. FD_SET(sock,&set);
  138. err = select(FD_SETSIZE, &set,NULL,NULL,&timeout);
  139. if(FD_ISSET(sock,&set) != 0)
  140. {
  141. err = recv(sock,bufor,1023,0);
  142. if(err > 0)
  143. {
  144. bufor[err]=0;
  145. s+= bufor;
  146. }
  147. }
  148. }
  149. while(err != 0);
  150. return s;
  151. }
  152.  
  153. void Sock::WyslijWiersz(string co)
  154. {
  155. stringstream ss;
  156. ss << co.length();
  157. int wyslano = 0;
  158. int n=0;
  159. co += "\r\n";
  160. do
  161. {
  162. n = send(sock,co.c_str(),co.length(),0);
  163. if(n<= 0)
  164. {
  165. cout << "Cos nie tak z wyslaniem tekstu" << endl;
  166. break;
  167. }
  168. wyslano += n;
  169. }
  170. while(wyslano != co.length());
  171. }
  172.  
  173. int Sock::PobierzPort(string s)
  174. {
  175. size_t PozycjaOstatniegoPrzecinka = s.find_last_of(",");
  176. int ilosc = s.find_last_of(")")-PozycjaOstatniegoPrzecinka-1;
  177. int NajmniejZnaczacy = StringToInt(s.substr(PozycjaOstatniegoPrzecinka+1,ilosc));
  178.  
  179. size_t PozycjaPrzedOstatniegoPrzecinka = s.substr(0,PozycjaOstatniegoPrzecinka).find_last_of(",",PozycjaOstatniegoPrzecinka);
  180. ilosc = PozycjaOstatniegoPrzecinka - PozycjaPrzedOstatniegoPrzecinka - 1;
  181. int NajbardziejZnaczacy = StringToInt(s.substr(PozycjaPrzedOstatniegoPrzecinka+1,ilosc));
  182. return NajbardziejZnaczacy*256+NajmniejZnaczacy;
  183. }
  184. int Sock::DataConnect(int port)
  185. {
  186. DataAddr.sin_family = AF_INET;
  187. DataAddr.sin_port = htons(port);
  188. DataAddr.sin_addr.s_addr = cel.sin_addr.s_addr;
  189.  
  190. DataSock = socket(AF_INET,SOCK_STREAM,0);
  191.  
  192. if(connect(DataSock,(SOCKADDR*)&DataAddr,sizeof(cel)) !=0)
  193. {
  194. cout << "Blad utworzenia polaczenia dla danych" << endl;
  195. return 1;
  196. }
  197. else
  198. {
  199. cout << "Ustanowiono polaczenie dla danych" <<endl;
  200. return 0;
  201. }
  202. }
  203.  
  204. void Sock::OdbierzPlik(std::string nazwa, int rozmiar)
  205. {
  206. unsigned int sumadanych = 0;
  207. fd_set set;
  208. timeval timeout = {0,1000000};
  209. char bufor[1024];
  210. memset(bufor,0,1024);
  211. ofstream plik;
  212. //plik.open(&nazwa,std::ios::out | std::ios::binary);
  213.  
  214. if(plik.good() == 0)
  215. {
  216. cout << "Nie udalo sie otworzyc pliku" << endl;
  217. return;
  218. }
  219. else
  220. {
  221. cout << endl;
  222. do
  223. {
  224. FD_ZERO(&set);
  225. FD_SET(DataSock,&set);
  226. err = select(FD_SETSIZE,&set,NULL,NULL,&timeout);
  227. memset(bufor,0,1024);
  228. if(FD_ISSET(DataSock,&set) != 0)
  229. {
  230. err = recv(DataSock,bufor,1024,0);
  231.  
  232. if(err > 0)
  233. {
  234. plik.write(bufor,err);
  235. sumadanych += err;
  236. }
  237. }
  238. }while(err != 0);
  239. }
  240. plik.close();
  241. }
  242.  
  243.  
  244.  
  245. int _tmain(int argc, _TCHAR* argv[])
  246. {
  247. Sock hPolaczenie;
  248. hPolaczenie.Connect("91.210.242.203");
  249. hPolaczenie.SetNonBlock(true);
  250. cout << "\r\n" << endl;
  251. cout << "POWITANIE"<< endl;
  252. cout << hPolaczenie.Odbierz();
  253. hPolaczenie.WyslijWiersz("USER renault_ftp");
  254. cout << hPolaczenie.Odbierz();
  255. hPolaczenie.WyslijWiersz("PASS 3edc4rfv");
  256. cout << hPolaczenie.Odbierz();
  257.  
  258. hPolaczenie.WyslijWiersz("CDUP");
  259. cout << hPolaczenie.Odbierz();
  260.  
  261. // Tryb Binarny
  262. hPolaczenie.WyslijWiersz("TYPE I");
  263. cout << hPolaczenie.Odbierz();
  264.  
  265. hPolaczenie.WyslijWiersz("PASV");
  266. string info = hPolaczenie.Odbierz();
  267. int port = hPolaczenie.PobierzPort(info);
  268.  
  269. hPolaczenie.DataConnect(port);
  270. hPolaczenie.WyslijWiersz("SIZE KatalogRenault.zip");
  271. cout << hPolaczenie.Odbierz();
  272. string rozm = hPolaczenie.Odbierz();
  273. int rozmiar = StringToInt(rozm.substr(4,rozm.length()-5));
  274.  
  275. hPolaczenie.WyslijWiersz("RETR KatalogRenault.zip");
  276. cout << hPolaczenie.Odbierz();
  277.  
  278. hPolaczenie.OdbierzPlik("KatalogRenault.zip",rozmiar);
  279. cout << hPolaczenie.Odbierz();
  280.  
  281. hPolaczenie.WyslijWiersz("STOR KatalogRenault.zip");
  282. cout << hPolaczenie.Odbierz();
  283.  
  284. getchar();
  285. return 0;
  286.  
  287. }
Add Comment
Please, Sign In to add comment