DS Packetbot

10/31/2010 02:01 bammes#1
hey

ich weis jetzt wie man einen text mit c++ an einen server schickt.

aber ich weis nicht, was ich zu die-staemme senden soll, um mich z.B. einzuloggen.
soll ich einfach alles schicken, was livehttp headers ausspuckt oder wie?
10/31/2010 02:54 . χaωe#2
Du musst die Headers anpassen. Ersma natülich die Daten zum einloggen, also PW und User.
Vllt kannst du mal die Header posten, weil ich ka hab wie die bei die-staemme aussehen. Dann kann ich dir vllt. besser helfen :)
10/31/2010 11:40 bammes#3
hier mal n header
##################################
Antwort-HeaderQuelltext anzeigen
Transfer-Encoding chunked
X-Powered-By PHP/5.2.0-8+etch16
Set-Cookie user=AmnesysUltimate; expires=Mon, 31-Oct-2011 10:39:48 GMT; httponly password=52bfee8994f2dd07eebd5abd2217128a146eefb6; expires=Mon, 31-Oct-2011 10:39:48 GMT; httponly
Content-Encoding gzip
Vary Accept-Encoding
Content-Type text/html; charset=utf-8
Date Sun, 31 Oct 2010 10:39:48 GMT
Server lighttpd/1.4.19
Anfrage-HeaderQuelltext anzeigen
Host [Only registered and activated users can see links. Click Here To Register...]
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.11
Accept application/json, text/javascript, */*
Accept-Language de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Content-Type application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With XMLHttpRequest
Referer [Only registered and activated users can see links. Click Here To Register...]
Content-Length 61
Cookie portal_tid=1269459166839-17730; __utma=139010342.349433081.1269459167.1287924770.1 288521514.115; __utmz=139010342.1287921547.113.79.utmcsr=de66.die-staemme.de|utmccn=(referral)|utmcmd=referral|utmcc t=/game.php; __utmb=139010342.2.10.1288521514; __utmc=139010342
Pragma no-cache
Cache-Control no-cache
10/31/2010 15:43 . χaωe#4
Wenn du dich mit dem gleichen Account einloggen willst kannst du einfach den ersten Header schicken und auf die Antwort warten :)
10/31/2010 20:43 bammes#5
oke ich versuchs mal

edit:
nope geht ned

irgendiwe komisch was muss ich genau senden?

und antwort des servers:

HTML Code:
HTTP/1.1 400 Bad Request

Date: Sun, 31 Oct 2010 20:05:33 GMT

Server: Apache/1.3.31 (Unix) FrontPage/5.0.2.2635 PHP/4.4.7 with Suhosin-Patch

Connection: close

Transfer-Encoding: chunked

Content-Type: text/html; charset=iso-8859-1



15a

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>400 Bad Request</TITLE>
</HEAD><BODY>
<H1>Bad Request</H1>
Your browser sent a request that this server could not understand.<P>
Invalid URI in request POST die-staemme.de/ HTTP/1.1<P>
<HR>
<ADDRESS>Apache/1.3.31 Server at www.die-staemme.de Port 80</ADDRESS>
</BODY></HTML>


0
11/01/2010 14:01 bammes#6
up
11/01/2010 14:06 SmackJew#7
Der Server sagt dir der Request ist verkackt. Sollen wir jetzt raten wie dein Request aussah? Meine Güte...
11/01/2010 14:19 bammes#8
oke hier is der request:

POST die-staemme.de/ HTTP/1.1\r\n
Host: [Only registered and activated users can see links. Click Here To Register...]
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.12) Gecko/20101026\r\n
Accept: application/json, text/javascript, */*\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: 115\r\n
Connection: keep-alive\r\n
Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\nX-Request-with: XMLHttpRequest\r\n
Refer: [Only registered and activated users can see links. Click Here To Register...]
Content-Length: 61\r\n
Cookie: portal_tid=1269459166839-17730; __utma=139010342.349433081.1269459167.1288521514.1 288554435.116; __utmz=139010342.1287921547.113.79.utmcsr=de66.die-staemme.de|utmccn=(referral)|utmcmd=referral|utmcc t=/game.php; __utmb=139010342.2.10.1288554435; __utmc=139010342\r\n Pragma: no-cache\r\n
Cache-Control: no-cache\r\n\r\n
11/01/2010 20:28 ms​#9
Seine Kekse zu posten ist immer eine gute Idee.
11/01/2010 21:21 bammes#10
oke hab cokies rausgenommen (iwie auch logisch^^)

aber immer noch der gleiche fehler

könnt ihr mir pls n beispiel geben für eine zeile? z.B. für User-Agent:...... .
kommt da überhaupt ein ":" hin oder wie muss das ganze eigentlich aussehen?

edit: und wo muss man überhaupt die benutzerdaten hinsetzen??
11/01/2010 21:50 Shadow992#11
Quote:
Originally Posted by bammes View Post
oke hab cokies rausgenommen (iwie auch logisch^^)

aber immer noch der gleiche fehler

könnt ihr mir pls n beispiel geben für eine zeile? z.B. für User-Agent:...... .
kommt da überhaupt ein ":" hin oder wie muss das ganze eigentlich aussehen?

edit: und wo muss man überhaupt die benutzerdaten hinsetzen??
Ich bin mal so nett und gebe dir eine Funktion von mir (libwininet und libwsock muss zusätzlich noch gelinkt werden, außerdem braucht man natürlich noch ein paar Includes, wie Windows.h, string.h usw.):
PHP Code:
string HTTPRequest(string serverstring sSeite "",string sPost "",string sCookies "",string sReferer "",short modified=0,short WaitForAnswer=1,string StopFound="",bool normal_stop=1,short ContStop=1,string Stop="");
unsigned long GetIPstring Host);

int main()
{
  
string source=HttpRequest("www.google.de","/")
}

string HTTPRequest(string serverstring sSeite ,string sPost ,string sCookies ,string sReferer ,short modified,short WaitForAnswer,string StopFound,bool normal_stop,short ContStop,string Stop)
{

    const 
int BUFFER_SIZE 65535;
    
int sicherheit=;
    
string request ;
    
size_t pos;
    
WSADATA w;
    
int res WSAStartupMAKEWORD2,), &);
    if( 
res != )
    {
        
cout<<"fail 1"<< WSAGetLastError()<<"\n";
        return 
"fail 1";
    }

    if (
sPost == "")
    {
        
request "GET " +sSeite" HTTP/1.1\r\n" ;
    }
    else
    {
        
request "POST " +sSeite" HTTP/1.1\r\n" ;
    }

    
request+="Host: "  ;
    
request+=server;
    
request+= "\r\n";
    
request+="User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)\r\n";
    
request+="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
    
request+="Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
    
request+="Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
    
request+="Keep-Alive: 300\r\n";
    
request+="Content-Type: application/x-www-form-urlencoded\r\n" ;
    
request+="Connection: keep-alive\r\n";
    if (
modified==1request+="X-Requested-With: XMLHttpRequest\r\nX-Prototype-Version: 1.6.1\r\n";
    if (
modified==2request+="If-None-Match: \"740d1-10ea-4890fad4f1b00\"";

    if (
sReferer != "")
    {
        
request+= "Referer: " sReferer +"\r\n" ;
    }
    if (
sCookies != "")
    {
        while (
pos!=string::npos)
        {
            
sicherheit++ ;
            if (
sicherheit>1000) break;
            
pos=sCookies.find(" ") ;
            if (
pos!=string::npossCookies.replace(pos,1,"") ;
        }
        
sicherheit=0;
        
request += "Cookie: " sCookies "\r\n";
    }

    if (
sPost != "")
    {
        
char num[7] ;
        
sprintf(num"%d"sPost.length()) ;

        
request+= "Content-Length: ";
        
request+=num;
        
request+="\r\n";
    }
    
request+="\r\n" ;

    if (
sPost != "")
    {
        
request+= sPost;
    }
    
string out;

    
unsigned int sSocket socketAF_INETSOCK_STREAM);
    if( 
sSocket == INVALID_SOCKET)
    {
        
cout<<"fail 2"<< WSAGetLastError()<<"\n";
        
cout<<request<<"\n";
        return 
"fail 2";
    }
    
unsigned long ip GetIPserver );
    
SOCKADDR_IN service;
    
service.sin_family AF_INET;
    
service.sin_port htons80 );
    
service.sin_addr.s_addr ip;
    
res connectsSocket, (SOCKADDR *)(&service), sizeofservice ) );
    if( 
res == SOCKET_ERROR )
    {
        
cout<<"fail 3"<< ip<< WSAGetLastError()<<"\n";
        
cout<<request<<"\n";
        return 
"fail 3";
    }
    
sendsSocketrequest.c_str(), request.size(), );
    if (
WaitForAnswer==1)
    {
        
char *buffer = (char *) malloc(BUFFER_SIZE);
        while (
1)
        {
            
res recvsSocketbufferBUFFER_SIZE-10);
            
buffer[res] = '\0';
            
out += buffer;
            if ((
res<=|| out.find("</html>")!=string::npos || out.find("</HTML>")!=string::npos || out.find("/html>")!=string::npos || out.find("/body>")!=string::npos)&& normal_stop==1) break;
            if (
out.find(StopFound)!=string::npos && StopFound != "") break;
            if (
out.find("Content-Length: 0")!=string::npos && ContStop==1) break;
            if (
out.find(Stop)!=string::npos and Stop!="") break;
            if (
sicherheit>100) break;
            
sicherheit++ ;
        }
        
delete [] buffer;
    }


    
//closesocket(sSocket);
    //shutdown(sSocket, SD_SEND);
    
WSACleanup();


    return 
out;
// ==> HTTPRequest(string server, string sSeite ,string sPost ,string sCookies ,string sReferer ,short modified,short WaitForAnswer,string StopFound,short ContStop,string Stop)

unsigned long GetIPstring Host)
{
    
struct hostentHomeP;
    
unsigned long HostIp;

    
HostIp inet_addrHost.c_str() );
    if( 
HostIp == INADDR_NONE )
    {
        
HomeP gethostbynameHost.c_str() );
        if( !
HomeP )
        {
            return 
0;
        }
        else 
HostIp = *(unsigned long *)HomeP->h_addr;
    }
    return 
HostIp;
// ==> GetIP( string host) 
11/01/2010 23:48 bammes#12
also ich habe das ganze so gemacht:

PHP Code:
void SendAll(int socket, const char* const buf, const int size)
{
    
int bytesSent 0// Anzahl Bytes die wir bereits vom Buffer gesendet haben
    
do
    {
        
bytesSent += send(socketbuf bytesSentsize bytesSent0);
    } while(
bytesSent size);
}
void GetLine(int socketstd::stringstreamline)
{
    for(
char crecv(socket, &c10) > 0line << c)
    {
        if(
== '\n')
        {
            return;
        }
    }
}
int main()
{
    
    
using namespace std;

#ifndef linux
    
WSADATA w;
    if(
int result WSAStartup(MAKEWORD(2,2), &w) != 0)
    {
        
cout << "Winsock 2 konnte nicht gestartet werden! Error #" << result << endl;
        return 
1;
    }
#endif


    
hostentphe gethostbyname("die-staemme.de");

    if(
phe == NULL)
    {
        
cout << "Host konnte nicht aufgeloest werden!" << endl;
        return 
1;
    }

    
cout << "\nHostname: " << phe->h_name << endl
         
<< "Aliases: ";

    for(
char** phe->h_aliases; *!= 0; ++p)
    {
        
cout << *<< " ";
    }
    
cout << endl;

    if(
phe->h_addrtype != AF_INET)
    {
        
cout << "Ungueltiger Adresstyp!" << endl;
        return 
1;
    }

    if(
phe->h_length != 4)
    {
        
cout << "Ungueltiger IP-Typ!" << endl;
        return 
1;
    }

    
int Socket socket(AF_INETSOCK_STREAMIPPROTO_TCP);
    if(
Socket == -1)
    {
        
cout << "Socket konnte nicht erstellt werden!" << endl;
        return 
1;
    }

    
sockaddr_in service;
    
service.sin_family AF_INET;
    
service.sin_port htons(80); 

    
char** phe->h_addr_list
    
int result// Ergebnis von connect
    
do
    {
        if(*
== NULL
        {
            
cout << "Verbindung fehlgschlagen!" << endl;
            return 
1;
        }

        
service.sin_addr.s_addr = *reinterpret_cast<unsigned long*>(*p);
        ++
p;
        
result connect(Socketreinterpret_cast<sockaddr*>(&service), sizeof(service));
    }
    while(
result == -1);

    
cout << "Verbindung erfolgreich!" << endl;
    const 
string request "/*der request*/";

    
SendAll(Socketrequest.c_str(), request.size());
    
ofstream fout("output.txt");

    
cout << "Empfange und schreibe Antwort in output.txt..." << endl;
    while(
true)
    {
        
stringstream line;
        try
        {
            
GetLine(Socketline);
        }
        catch(
exceptione// Ein Fehler oder Verbindungsabbruch
        
{
            break; 
// Schleife verlassen
        
}
        
fout << line.str() << endl// Zeile in die Datei schreiben.
    
}
    
closesocket(Socket);
    
cin>>a;
}; 
mir fehlt nur der richtige request
trotzdem thx werde es mal so wie du probieren (der teil mit dem request)
11/02/2010 00:20 bammes#13
habe den ccode jetzt SO geändert s kommt aber immer noch gleiche fehlermeldung von die-staemme
PHP Code:
   hostentphe gethostbyname("die-staemme.de");

    if(
phe == NULL)
    {
        
cout << "Host konnte nicht aufgeloest werden!" << endl;
        return 
1;
    }

    
cout << "\nHostname: " << phe->h_name << endl
         
<< "Aliases: ";

    for(
char** phe->h_aliases; *!= 0; ++p)
    {
        
cout << *<< " ";
    }
    
cout << endl;

    if(
phe->h_addrtype != AF_INET)
    {
        
cout << "Ungueltiger Adresstyp!" << endl;
        return 
1;
    }

    if(
phe->h_length != 4)
    {
        
cout << "Ungueltiger IP-Typ!" << endl;
        return 
1;
    }

    
int Socket socket(AF_INETSOCK_STREAMIPPROTO_TCP);
    if(
Socket == -1)
    {
        
cout << "Socket konnte nicht erstellt werden!" << endl;
        return 
1;
    }

    
sockaddr_in service;
    
service.sin_family AF_INET;
    
service.sin_port htons(80); // Das HTTP-Protokoll benutzt Port 80

    
char** phe->h_addr_list// p mit erstem Listenelement initialisieren
    
int result// Ergebnis von connect
    
do
    {
        if(*
== NULL// Ende der Liste
        
{
            
cout << "Verbindung fehlgschlagen!" << endl;
            return 
1;
        }

        
service.sin_addr.s_addr = *reinterpret_cast<unsigned long*>(*p);
        ++
p;
        
result connect(Socketreinterpret_cast<sockaddr*>(&service), sizeof(service));
    }
    while(
result == -1);

    
cout << "Verbindung erfolgreich!" << endl;
    
string sCookies "portal_tid=1269459166839-17730; __utma=139010342.349433081.1269459167.1288554435.1288652647.117; __utmz=139010342.1287921547.113.79.utmcsr=de66.die-staemme.de|utmccn=(referral)|utmcmd=referral|utmcct=/game.php; __utmb=139010342.2.10.1288652647; __utmc=139010342";
    
string request "";
                
request+="Host: "  ;
                
request+="die-staemme.de";
                
request+= "\r\n";
                
request+="User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)\r\n";
                
request+="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
                
request+="Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
                
request+="Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
                
request+="Keep-Alive: 300\r\n";
                
request+="Content-Type: application/x-www-form-urlencoded\r\n" ;
                
request+="Connection: keep-alive\r\n";
                

                
                
request+= "Referer: http://www.die-staemme.de/index.php\r\n" ;
                
                     
int sicherheit=;
                while (
pos!=string::npos)
                    {
                        
sicherheit++ ;
                        if (
sicherheit>1000) break;
                        
pos=sCookies.find(" ") ;
                        if (
pos!=string::npossCookies.replace(pos,1,"") ;
                    }
                    
sicherheit=0;
                    
request += "Cookie: " sCookies "\r\n";
                

    
SendAll(Socketrequest.c_str(), request.size());
    
ofstream fout("output.txt");

    
cout << "Empfange und schreibe Antwort in output.txt..." << endl;
    while(
true)
    {
        
stringstream line;
        try
        {
            
GetLine(Socketline);
        }
        catch(
exceptione// Ein Fehler oder Verbindungsabbruch
        
{
            break; 
// Schleife verlassen
        
}
        
fout << line.str() << endl// Zeile in die Datei schreiben.
    
}
    
closesocket(Socket);
    
cin>>a;
}; 
11/02/2010 10:55 Shadow992#14
Quote:
Originally Posted by bammes View Post
habe den ccode jetzt SO geändert s kommt aber immer noch gleiche fehlermeldung von die-staemme
PHP Code:
   hostentphe gethostbyname("die-staemme.de");

    if(
phe == NULL)
    {
        
cout << "Host konnte nicht aufgeloest werden!" << endl;
        return 
1;
    }

    
cout << "\nHostname: " << phe->h_name << endl
         
<< "Aliases: ";

    for(
char** phe->h_aliases; *!= 0; ++p)
    {
        
cout << *<< " ";
    }
    
cout << endl;

    if(
phe->h_addrtype != AF_INET)
    {
        
cout << "Ungueltiger Adresstyp!" << endl;
        return 
1;
    }

    if(
phe->h_length != 4)
    {
        
cout << "Ungueltiger IP-Typ!" << endl;
        return 
1;
    }

    
int Socket socket(AF_INETSOCK_STREAMIPPROTO_TCP);
    if(
Socket == -1)
    {
        
cout << "Socket konnte nicht erstellt werden!" << endl;
        return 
1;
    }

    
sockaddr_in service;
    
service.sin_family AF_INET;
    
service.sin_port htons(80); // Das HTTP-Protokoll benutzt Port 80

    
char** phe->h_addr_list// p mit erstem Listenelement initialisieren
    
int result// Ergebnis von connect
    
do
    {
        if(*
== NULL// Ende der Liste
        
{
            
cout << "Verbindung fehlgschlagen!" << endl;
            return 
1;
        }

        
service.sin_addr.s_addr = *reinterpret_cast<unsigned long*>(*p);
        ++
p;
        
result connect(Socketreinterpret_cast<sockaddr*>(&service), sizeof(service));
    }
    while(
result == -1);

    
cout << "Verbindung erfolgreich!" << endl;
    
string sCookies "portal_tid=1269459166839-17730; __utma=139010342.349433081.1269459167.1288554435.1288652647.117; __utmz=139010342.1287921547.113.79.utmcsr=de66.die-staemme.de|utmccn=(referral)|utmcmd=referral|utmcct=/game.php; __utmb=139010342.2.10.1288652647; __utmc=139010342";
    
string request "";
                
request+="Host: "  ;
                
request+="die-staemme.de";
                
request+= "\r\n";
                
request+="User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)\r\n";
                
request+="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
                
request+="Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
                
request+="Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
                
request+="Keep-Alive: 300\r\n";
                
request+="Content-Type: application/x-www-form-urlencoded\r\n" ;
                
request+="Connection: keep-alive\r\n";
                

                
                
request+= "Referer: http://www.die-staemme.de/index.php\r\n" ;
                
                     
int sicherheit=;
                while (
pos!=string::npos)
                    {
                        
sicherheit++ ;
                        if (
sicherheit>1000) break;
                        
pos=sCookies.find(" ") ;
                        if (
pos!=string::npossCookies.replace(pos,1,"") ;
                    }
                    
sicherheit=0;
                    
request += "Cookie: " sCookies "\r\n";
                

    
SendAll(Socketrequest.c_str(), request.size());
    
ofstream fout("output.txt");

    
cout << "Empfange und schreibe Antwort in output.txt..." << endl;
    while(
true)
    {
        
stringstream line;
        try
        {
            
GetLine(Socketline);
        }
        catch(
exceptione// Ein Fehler oder Verbindungsabbruch
        
{
            break; 
// Schleife verlassen
        
}
        
fout << line.str() << endl// Zeile in die Datei schreiben.
    
}
    
closesocket(Socket);
    
cin>>a;
}; 
Warum probierst du es nicht einfach mal mit der Funktion oben?
Kopier meine Funktion einfach mal und probier das Request da, falls es geht stimmt irgendetwas mit deiner Funktion nicht, falls es auch nicht geht, liegt das an deinen Parametern.

Edit:
Das Einlogg-Skript für die Stämme würde mit meiner Funktion so aussehen:
Code:
string user="test",pw="test";
string post="user="+user+"&password="+pw+"&clear=true";
string source=HTTPRequest("www.die-stämme.de","/index.php?action=login&server_list=1&show_server_selection=1",post);
11/02/2010 12:21 bammes#15
ich weis net genau wie man verlinkt (habe VC++ 2008)
denke des geht rechtsklick auf projekt->eigenschaften->Linker->... weiter weis ich ned