Upload файла по HTTP протоколу - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Sanoxxx, Alowir  
Upload файла по HTTP протоколу
[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#] Проверка соединения с интернетом
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума