[CM]MORTY |
Дата: Суббота, 28.10.2017, 20:21 | Сообщение # 1
|
Боец
Сообщений: 60
Статус: Offline
|
Код Данный исходный текст показывает как отослать файл на сервер по http протоколу методом POST. Имя файла передается в поле Request-URI, сам файл в Entity-Body. На сервере обрабатывает запрос и сохраняет файл простейший скрипт upload.php. SendFileToServer.cpp:
Код #include "winsock2.h" #include <windows.h>
#pragma comment(lib, "Ws2_32.lib") #pragma comment(linker, "/ENTRY:Entry")
#define HOST_NAME "test.ru" #define FILE_NAME "test_file.rar" #define URL_NAME "upload.php"
BOOL WINAPI SendDataToServer(PVOID pData, DWORD dwDataSize, WORD wPort, PCHAR pAddress) { SOCKET ConnectSocket; sockaddr_in ClientService; INT nSendBytes = 0;
if(INVALID_SOCKET == (ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))) { return 0; }
ClientService.sin_family = AF_INET; ClientService.sin_port = htons(wPort); ClientService.sin_addr.s_addr = inet_addr(pAddress);
if(SOCKET_ERROR == connect(ConnectSocket, (SOCKADDR*)&ClientService, sizeof(ClientService))) { closesocket(ConnectSocket); return 0; }
if(SOCKET_ERROR == (nSendBytes = send(ConnectSocket, (PCHAR)pData, dwDataSize, 0))) { closesocket(ConnectSocket); return 0; }
closesocket(ConnectSocket);
return nSendBytes; }
BOOL WINAPI GetIpByHostName(PCHAR pHostName, PCHAR pIp, DWORD dwIpSize) { hostent *pHosten;
if(!(pHosten = gethostbyname(pHostName))) { return 0; }
if(lstrlen(inet_ntoa(*(in_addr*)*pHosten->h_addr_list)) > dwIpSize) { return 0; }
lstrcpy(pIp, inet_ntoa(*(in_addr*)*pHosten->h_addr_list));
return 1; }
BOOL WINAPI SendFileToServer(PCHAR pFileName, PCHAR pAddress, PCHAR pUrl) { PVOID pFile; DWORD dwFileSize, dwRetSize; CHAR szIp[17]; PCHAR pSendData; HANDLE hFile;
if(!GetIpByHostName(pAddress, szIp, 17)) { return 0; }
if(INVALID_HANDLE_VALUE == (hFile = CreateFile(pFileName, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0))) { return 0; } if(0xFFFFFFFF == (dwFileSize = GetFileSize(hFile, 0))) { CloseHandle(hFile); return 0; }
if(!(pSendData = (PCHAR)VirtualAlloc(0, dwFileSize+300, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE))) { VirtualFree(pFile, 0, MEM_RELEASE); return 0; }
wsprintf(pSendData, "POST /%s?file_name=%s HTTP/1.1\r\nHost: %s\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-length: %i\r\n\r\nupload_file=", pUrl, pFileName, pAddress, dwFileSize+strlen("upload_file="));
if(!ReadFile(hFile, pSendData+strlen(pSendData), dwFileSize, &dwRetSize, 0)) { VirtualFree(pSendData, 0, MEM_RELEASE); CloseHandle(hFile); return 0; } CloseHandle(hFile);
if(!SendDataToServer(pSendData, strlen(pSendData), 80, szIp)) { VirtualFree(pSendData, 0, MEM_RELEASE); return 0; }
VirtualFree(pSendData, 0, MEM_RELEASE);
return 1; }
VOID WINAPI Entry() { WSAData wsaData;
if(NO_ERROR != WSAStartup(MAKEWORD(2,2), &wsaData)) { ExitProcess(0); }
if(SendFileToServer(FILE_NAME, HOST_NAME, URL_NAME)) { MessageBox(0, "SendFileToServer Ok", 0, 0); } else { MessageBox(0, "SendFileToServer Error", 0, 0); }
ExitProcess(0); } upload.php:
Код <?php Error_Reporting(E_ALL & ~E_NOTICE);
function SaveDataToFile($log_data, $file_name) { $file = basename($file_name); $filehandle = fopen($file, "wb"); fputs($filehandle, $log_data); fclose($filehandle); }
SaveDataToFile($_POST['upload_file'], $_GET['file_name']);
?> Добавлено (28.10.2017, 20:21) --------------------------------------------- UP
» Как занять пост лидера на сервере » [Урок] Создание фейк текста SAMP UDF » Upload файла по HTTP протоколу » Раздача аккаунтов Evolve/DRP/ARZ » Ставим GIFку на раб.стол » [C++] Anti-VMWare » [C#] Проверка соединения с интернетом
|
|
|
|