Advertisement
Guest User

Untitled

a guest
Jun 25th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.17 KB | None | 0 0
  1. // Server.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <windows.h>
  6. #include <atlstr.h>
  7. #include <tchar.h>
  8. #pragma comment(lib, "ws2_32.lib")
  9. #define SRV_PORT 44000
  10. #define buffsize 2000000
  11. typedef struct {
  12. char str[buffsize];
  13. } MESSAGE;
  14.  
  15. int sendall(char *msg, int len, SOCKET sock)
  16. {
  17. char *buf = msg;
  18. int remained = len;
  19. int error = 0, count;
  20. while (remained && !error)
  21. {
  22. count = send(sock, buf, remained, 0);
  23. error = (count == 0);
  24. remained -= count;
  25. buf += count;
  26. }
  27. return error;
  28. }
  29. int recvall(char *msg, int len, SOCKET sock)
  30. {
  31. char *buf = msg;
  32. int remained = len;
  33. int error = 0, count;
  34. while (remained && !error)
  35. {
  36. count = recv(sock, buf, remained, 0);
  37. error = (count == 0);
  38. remained -= count;
  39. buf += count;
  40. }
  41.  
  42. return error;
  43. }
  44.  
  45.  
  46. typedef struct
  47. {
  48. SOCKET sock;
  49. SOCKADDR_IN saClient;
  50. DWORD id;
  51. }THREAD_PARAM;
  52. SOCKET ListeningSocket(USHORT port)
  53. {
  54. //Init winsock
  55. WORD wVersionRequested = MAKEWORD(2, 0);
  56. WSADATA wsaData;
  57. int err;
  58. err = WSAStartup(wVersionRequested, &wsaData);
  59. if (err)
  60. return INVALID_SOCKET;
  61.  
  62. //Create socket
  63. SOCKET sock;
  64. sock = socket(AF_INET, SOCK_STREAM, 0);
  65. if (sock == INVALID_SOCKET)
  66. return INVALID_SOCKET;
  67.  
  68. //Bind the socket
  69. struct sockaddr_in addr;
  70. addr.sin_family = AF_INET;
  71. addr.sin_addr.s_addr = htonl(INADDR_ANY);
  72. addr.sin_port = htons(port);
  73. err = bind(sock, (sockaddr*)&addr, sizeof(addr));
  74. if (err)
  75. {
  76. closesocket(sock);
  77. return INVALID_SOCKET;
  78. }
  79.  
  80. //Start listening
  81. err = listen(sock, SOMAXCONN);
  82. if (err)
  83. {
  84. closesocket(sock);
  85. return INVALID_SOCKET;
  86. }
  87.  
  88. return sock;
  89. }
  90.  
  91. char *ip2str(DWORD ip) {
  92. char *res = (char*)malloc(16);
  93. sprintf_s(res, 16, "%d.%d.%d.%d", ip & 0xFF, ip >> 8 & 0xFF, ip >> 16 & 0xFF, ip >> 24 & 0xFF);
  94. return res;
  95. }
  96. BOOL DirectoryExists(LPCTSTR szPath)
  97. {
  98. DWORD dwAttrib = GetFileAttributes(szPath);
  99.  
  100. return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
  101. (dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
  102. }
  103.  
  104. DWORD WINAPI ServerThread(void *pParam)
  105. {
  106. THREAD_PARAM *pClientInfo = (THREAD_PARAM*)pParam;
  107. char *ipClient = ip2str(pClientInfo->saClient.sin_addr.S_un.S_addr);
  108. TCHAR FolderPath[MAX_PATH];
  109. TCHAR Command[MAX_PATH];
  110. MESSAGE msg;
  111. sprintf_s(msg.str, sizeof(MESSAGE::str), "%s", "Sent 1 file");
  112. recvall((char*)&msg, sizeof(MESSAGE::str), pClientInfo->sock);
  113. printf("Client No %d (%s:%d): %s\n", pClientInfo->id, ntohs(pClientInfo->saClient.sin_port), ipClient, msg.str);
  114. TCHAR tipClient[24];
  115. size_t Newsize = strlen(ipClient) + 1;
  116. size_t ConvertedChars = 0;
  117. mbstowcs_s(&ConvertedChars, tipClient, Newsize, ipClient, _TRUNCATE);
  118.  
  119. _swprintf(FolderPath, _T("D:\\VictimLog\\%s"), ipClient);
  120. _tprintf(_T("%s"), FolderPath);
  121. if (!DirectoryExists(FolderPath)) {
  122. printf("\r\nCreat folder...\r\n");
  123. _swprintf(Command, _T("mkdir %s"), FolderPath);
  124. _wsystem(Command);
  125. }
  126. else _tprintf(_T("\n%s existing."), FolderPath);
  127. closesocket(pClientInfo->sock);
  128. return 0;
  129. }
  130.  
  131. int main()
  132. {
  133. SOCKET sListeningSocket, sWorkingSocket;
  134. SOCKADDR_IN addrClient;
  135. int nClientAddressLen;
  136. HANDLE hServerThread;
  137. THREAD_PARAM tp;
  138. DWORD dwClientCount = 0;
  139. char filebuf[buffsize];
  140. int filebuflen = buffsize;
  141.  
  142. printf("Starting the server socket...");
  143. sListeningSocket = ListeningSocket(SRV_PORT);
  144. if (sListeningSocket != INVALID_SOCKET)
  145. printf("OK\n");
  146. else
  147. printf("FAILED\n");
  148.  
  149. while (1)
  150. {
  151. printf("Waiting for a client...\n");
  152. nClientAddressLen = sizeof(addrClient);
  153. sWorkingSocket = accept(sListeningSocket, (sockaddr*)&addrClient, &nClientAddressLen);
  154. if (sWorkingSocket == INVALID_SOCKET)
  155. {
  156. printf("failed!!!!!");
  157. break;
  158. }
  159. int bytes_to_read = recv(sWorkingSocket, filebuf, filebuflen, 0);
  160. if (bytes_to_read == 0)
  161. break;//ket thuc doc file
  162. if (bytes_to_read < 0)
  163. printf("File read error");
  164. tp.sock = sWorkingSocket;
  165. tp.saClient = addrClient;
  166. tp.id = ++dwClientCount;
  167. hServerThread = CreateThread(NULL, 0, ServerThread, &tp, 0, NULL);
  168.  
  169. }
  170. FILE *fp;
  171. fp = fopen("test.txt", "wb");
  172. fwrite(filebuf, 1, sizeof(filebuf), fp);
  173. fclose(fp);
  174.  
  175.  
  176.  
  177.  
  178.  
  179. WSACleanup();
  180. getchar();
  181. return 0;
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement