Code:
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define BUFFER_LENGTH 4096
main(){
int s,bytes,count,count2;
char buffer[BUFFER_LENGTH],post[124],login[150],httpreq[256],timestamp_string[11],sessionID[13],phpsid[33];
struct sockaddr_in addr;
struct hostent *host;
time_t timestamp;
addr.sin_addr.s_addr = inet_addr(""xxx.xxx.xxx.xxx");
addr.sin_port = htons(80);
addr.sin_family = AF_INET;
s=socket(PF_INET,SOCK_STREAM,0);
if(s==-1)perror("socket()");
if(connect(s,(struct sockaddr*)&addr,sizeof(addr))==-1)perror("connect()");
strcpy(httpreq,"<Paketheaderinhalte>");
strcpy(post,"POST /Pfad");
strcat(post,httpreq);
strcpy(login,"<Paketinhalte>");
time(×tamp);
sprintf(timestamp_string,"%i",timestamp);
strcat(login,timestamp_string);
strcat(login,"<Paketinhalte>");
if(send(s,post,sizeof(post),0)==-1)perror("send()");
if(send(s,login,sizeof(login),0)==-1)perror("send()");
bytes=recv(s,buffer,sizeof(buffer)-1,0);
if(bytes==-1)perror("recv()");
buffer[bytes]='\0';
printf("\n\n%s\n\n",buffer);
for(count=0;count<strlen(buffer);count++){
if(buffer[count]=='D' && buffer[count+1]=='='){
count+=2;
for(count2=0;count2<=31;count2++){
phpsid[count2]=buffer[count++];
}
phpsid[32]='\0';
}
else if(buffer[count]=='n' && buffer[count+1]=='='){
count+=2;
for(count2=0;count2<=11;count2++){
sessionID[count2]=buffer[count++];
}
sessionID[12]='\0';
count=strlen(buffer);
}
}
printf("\n\nsessionID=%s\n\nPHPSID=%s\n\n",sessionID,phpsid);
/* Bis hier funktioniert alles wie es soll, zumindest wenn man sich den mitgesnifften Output ansieht! */
strcpy(buffer,"GET /Pfad");
strcat(buffer,sessionID);
strcat(buffer,"&PHPSESSID=");
strcat(buffer,phpsid);
strcat(buffer," HTTP/1.1");
strcat(buffer,httpreq);
printf("\n\n%s\n\n",buffer);
/* Der Inhalt des Puffers wurde ausgegeben, alles scheint normal... */
if(send(s,buffer,sizeof(buffer),0) == -1) perror("send()");
bytes=recv(s,buffer,sizeof(buffer)-1,0);
if(bytes==-1){perror("recv()");}
else{printf("%s",buffer);}
/* Der Inhalt des Puffers wird ausgegeben und sieht komplett so aus wie beim letzten mal... */
close(s);
}
strncpy etc. habe ich noch nicht umgesetzt, da ich erstmal die Anzahl der potentiellen Fehlerquellen gering halten wollte und habe deshalb noch strcpy etc. benutzt... ohne erfolg...
Lesezeichen