| | #1 |
| Registered User Registriert seit: Oct 2008 Karma: 1 | Hallo leute Weiß jemand, wie man mit C/C++ eine Datei an ein php upload script übergeben kann und welche Funktionen man dafür braucht? ich habe schon versucht, einen manuell bearbeiteten Http Header zu senden, aber das geht irgendwie nicht (und google will auch nicht helfen): Code: #include <stdio.h>
#include <winsock.h>
#include <io.h>
unsigned long WinsockStart()
{
WSADATA wsa;
struct hostent *host;
unsigned long ulong;
if((WSAStartup(MAKEWORD(2,0), &wsa))<0)
{
printf("Fehler WSAStartup()");
return 1;
}
if((host = gethostbyname("beispiel.be.funpic.de"))<0)
{
printf("Fehler gethostbyname %d", WSAGetLastError());
return 2;
}
ulong = *(unsigned long*) host->h_addr;
return ulong;
}
int main()
{
SOCKET sock_c;
struct sockaddr_in addr;
int win = 0, send_back = 0, con=0;
char *to_send = "POST /upload.php HTTP/1.1\r\n"
"Host: beispiel.be.funpic.de\r\n"
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)\r\n"
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
"Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\r\n"
"Accept-Encoding: gzip,deflate\r\n"
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
"Keep-Alive: 300\r\n"
"Connection: keep-alive\r\n"
"Referer: http://beispiel.be.funpic.de/upload.php\r\n"
"Cookie: cken=1265637962\r\n"
"Content-Type: multipart/form-data; boundary=---------------------------12292603824179\r\n"
"Content-Length: 400\r\n"
"\r\n"
"-----------------------------12292603824179\r\n"
"Content-Disposition: form-data; name=\"upfile\"; filename=\"test.txt\"\r\n"
"Content-Type: text/plain\r\n"
"\r\n"
"test test\r\n"
"-----------------------------12292603824179\r\n"
"Content-Disposition: form-data; name=\"post\"\r\n"
"\r\n"
"hochladen\r\n"
"-----------------------------12292603824179--\r\n";
//"\0";
win = WinsockStart();
if(win == 1 || win == 2)
{
printf("Fehler WinsockStart()\n");
WSACleanup();
return EXIT_FAILURE;
}
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
addr.sin_addr.s_addr = win;
printf("IP Adresse vom Server: %s", inet_ntoa(addr.sin_addr));
sock_c = socket(AF_INET, SOCK_STREAM, 0);
con=connect(sock_c, (struct sockaddr*)&addr, sizeof(addr));
if(con<0)
{
printf("Fehler connect()con: %d WSA: %s", con, WSAGetLastError());
WSACleanup();
return EXIT_FAILURE;
}
if(send_back=send(sock_c, to_send, strlen(to_send), 0) < 0)
{
printf("Fehler send()");
WSACleanup();
return EXIT_FAILURE;
}
printf("Nicht gesendete Daten: %d", (sizeof(to_send)-send_back));
closesocket(sock_c);
WSACleanup();
return EXIT_SUCCESS;
} -bei Protocol: HTTP -bei Info : POST /upload.php HTTP/1.1 (text/plain) Aber wenn ich das Programm dann ausführe, sehe ich in Wireshark nur hinten dran stehen: -bei Protocol: TCP -bei Info : [TCP segment of a reassemble PDU] wenn ich dann bei dem Header aber alle \r weglasse, erscheint dann das: -bei Protocol: HTTP -bei Info : POST /upload.php HTTP/1.1 Continuation or non-Http traffic Hat vielleicht jemand eine Idee, worin die Ursache liegt und wie man es besser machen kann? DarkEagle __________________ Ich bin nur dafür verantwortlich was ich sage - nicht dafür, was andere verstehen. Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral |
| | |
| | #2 |
| Member Registriert seit: May 2004 Karma: 831 | Re: Datei uploaden Mir fällt auf die Schnelle auf, dass der Content-Length-Header vorne und hinten nicht stimmt. Wunder mich zwar, dass Wireshark dass dann nicht als HTTP taggt, aber werden eben noch andere Fehler drin sein. Das Protokoll lernen, welches du anwenden möchtest (das ist HTTP) oder eine Bibliothek nutzen. |
| | |
| | #3 |
| Registered User Registriert seit: Jan 2009 Karma: 1 | Re: Datei uploaden also was mir auffällt ist dass am ende ein "\r\n" fehlt also es muss zweimal dastehen Code: -----------------------------12292603824179--\r\n\r\n cyber_overrun |
| | |
| | #4 |
| Registered User Registriert seit: Oct 2008 Karma: 1 | Re: Datei uploaden mittlerweile habe ich es hinbekommen, den header mit send() zu versenden und eine Datei zu uploaden jetzt versuche ich, eine übergroße datei (bzw. String) z.B. eine 1 kb Datei bzw string fragmentiert mit der WinHttp API zu uploaden, bin aber jedesmal gescheitert hier ist der Code: Code: #include <stdio.h>
#include <windows.h>
#include <Winhttp.h>
#include <string.h>
int main()
{
HINTERNET hopen, hconnect, hhttp;
char buffer[200];
DWORD read;
BOOL r, retsend, bResults;
char header[1024], head[512];;
char *to_send="testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttestvtest"
"testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest"
"testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest"
"testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest";
char *speichername = "test31.txt";
int gr = strlen(to_send)+strlen(speichername)+287;
memset(head, 0, 10);
memset(header, 0, 10);
printf("%s", header);
sprintf(header, "%sHost: testbeispiel.funpic.de\r\n", header);
sprintf(header, "%sConnection: Keep-Alive\r\n", header);
sprintf(header, "%sContent-Type: multipart/form-data; boundary=---------------------------90721038027008\r\n", header);
sprintf(header, "%sContent-Length: %d\r\n", header, gr);
sprintf(header, "%s\r\n", header);
sprintf(header, "%s-----------------------------90721038027008\r\n", header);
sprintf(header, "%sContent-Disposition: form-data; name=\"upfile\"; filename=\"%s\"\r\n", header, speichername);
sprintf(header, "%sContent-Type: text/plain\r\n", header);
sprintf(header, "%s\r\n", header);
sprintf(head, "%s%s\r\n", head, to_send);
sprintf(head, "%s-----------------------------90721038027008\r\n", head);
sprintf(head, "%sContent-Disposition: form-data; name=\"post\"\r\n", head);
sprintf(head, "%s\r\n", head);
sprintf(head, "%shochladen\r\n\r\n", head);
sprintf(head, "%s-----------------------------90721038027008--\r\n\r\n", head);
hopen = WinHttpOpen(NULL, WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
if(hopen == NULL)
printf("Fehler InternetOpen()");
hconnect = WinHttpConnect(hopen, L"testbeispiel.funpic.de",
INTERNET_DEFAULT_HTTP_PORT,0);
if(hconnect == NULL)
printf("Fehler InternetConnect()");
hhttp = WinHttpOpenRequest(hconnect, L"POST", L"/upload.php", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES,0);
if(hhttp == NULL)
printf("Fehler HttpOpenRequest()");
BOOL ret = WinHttpAddRequestHeaders(hhttp, L"Content-Type: multipart/form-data; boundary=---------------------------90721038027008\r\n"
/*(LPVOID)(LPCSTR)header*/,-1L,
WINHTTP_ADDREQ_FLAG_ADD);
if(!ret)
printf("Fehler WinHttpAddRequestHeaders()-1");
ret = WinHttpAddRequestHeaders(hhttp, L"Content-Disposition: form-data; name=\"upfile\"; filename=\"test31.txt\"\r\n"
/*(LPVOID)(LPCSTR)header*/,-1L,
WINHTTP_ADDREQ_FLAG_ADD);
if(!ret)
printf("Fehler WinHttpAddRequestHeaders()-2");
gr = strlen(header)+strlen(head);
retsend = WinHttpSendRequest(hhttp, L"Content-Type: text/plain\r\n\r\n",-1L,NULL, 0, 0, 0);
if(!retsend)
printf("Fehler HttpSendRequest()");
bResults = WinHttpWriteData( hhttp, header, strlen(header), &read);
if(!bResults)
printf("Fehler WinHttpWriteData()");
WinHttpCloseHandle(hopen);
WinHttpCloseHandle(hconnect);
WinHttpCloseHandle(hhttp);
free(header);
return EXIT_SUCCESS;
} Hat vielleicht jemand Erfahrung damit und kann mir weiterhelfen? DarkEagle __________________ Ich bin nur dafür verantwortlich was ich sage - nicht dafür, was andere verstehen. Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral |
| | |
| | #5 |
| Registered User Registriert seit: Sep 2008 Karma: 44 | Re: Datei uploaden Hat vielleicht jemand Erfahrung damit und kann mir weiterhelfen? Versuchs mal mit einer Lib die dafür geschaffen ist. ;-) |
| | |
![]() |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Dateien Uploaden über die php.exe | dasheld2k | (In)Security allgemein | 2 | 06.10.2002 16:49 |
| Homepage uploaden | schnauzi | Web Development | 2 | 23.11.2001 16:42 |
| File Uploaden & Bewerten | Thorium | PHP, Perl und ASP | 0 | 18.04.2001 19:08 |
| Site uploaden | mycroft | Web Development | 6 | 06.01.2001 16:10 |
| Uploaden mit Frontpage | Sam-mc | Technisches Off-Topic | 0 | 01.10.2000 20:32 |
Alle Zeitangaben in WEZ +2. Es ist jetzt 04:03 Uhr.







Linear-Darstellung

