|
You last visited: Today at 01:17
Advertisement
DS Packetbot
Discussion on DS Packetbot within the C/C++ forum part of the Coders Den category.
10/31/2010, 02:01
|
#1
|
elite*gold: 0
Join Date: Jan 2010
Posts: 250
Received Thanks: 21
|
DS Packetbot
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
|
#2
|
elite*gold: 0
Join Date: Oct 2010
Posts: 287
Received Thanks: 111
|
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
|
#3
|
elite*gold: 0
Join Date: Jan 2010
Posts: 250
Received Thanks: 21
|
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 
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 
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
|
#4
|
elite*gold: 0
Join Date: Oct 2010
Posts: 287
Received Thanks: 111
|
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
|
#5
|
elite*gold: 0
Join Date: Jan 2010
Posts: 250
Received Thanks: 21
|
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
|
#6
|
elite*gold: 0
Join Date: Jan 2010
Posts: 250
Received Thanks: 21
|
up
|
|
|
11/01/2010, 14:06
|
#7
|
elite*gold: 0
Join Date: Jul 2010
Posts: 388
Received Thanks: 196
|
Der Server sagt dir der Request ist verkackt. Sollen wir jetzt raten wie dein Request aussah? Meine Güte...
|
|
|
11/01/2010, 14:19
|
#8
|
elite*gold: 0
Join Date: Jan 2010
Posts: 250
Received Thanks: 21
|
oke hier is der request:
POST die-staemme.de/ HTTP/1.1\r\n
Host: 
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: 
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
|
#9
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
|
Seine Kekse zu posten ist immer eine gute Idee.
|
|
|
11/01/2010, 21:21
|
#10
|
elite*gold: 0
Join Date: Jan 2010
Posts: 250
Received Thanks: 21
|
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
|
#11
|
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
|
Quote:
Originally Posted by bammes
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 server, string 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 GetIP( string Host);
int main()
{
string source=HttpRequest("www.google.de","/")
}
string HTTPRequest(string server, string 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=0 ;
string request ;
size_t pos;
WSADATA w;
int res = WSAStartup( MAKEWORD( 2,0 ), &w );
if( res != 0 )
{
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==1) request+="X-Requested-With: XMLHttpRequest\r\nX-Prototype-Version: 1.6.1\r\n";
if (modified==2) request+="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::npos) sCookies.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 = socket( AF_INET, SOCK_STREAM, 0 );
if( sSocket == INVALID_SOCKET)
{
cout<<"fail 2"<< WSAGetLastError()<<"\n";
cout<<request<<"\n";
return "fail 2";
}
unsigned long ip = GetIP( server );
SOCKADDR_IN service;
service.sin_family = AF_INET;
service.sin_port = htons( 80 );
service.sin_addr.s_addr = ip;
res = connect( sSocket, (SOCKADDR *)(&service), sizeof( service ) );
if( res == SOCKET_ERROR )
{
cout<<"fail 3"<< ip<< WSAGetLastError()<<"\n";
cout<<request<<"\n";
return "fail 3";
}
send( sSocket, request.c_str(), request.size(), 0 );
if (WaitForAnswer==1)
{
char *buffer = (char *) malloc(BUFFER_SIZE);
while (1)
{
res = recv( sSocket, buffer, BUFFER_SIZE-1, 0);
buffer[res] = '\0';
out += buffer;
if ((res<=0 || 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 GetIP( string Host)
{
struct hostent* HomeP;
unsigned long HostIp;
HostIp = inet_addr( Host.c_str() );
if( HostIp == INADDR_NONE )
{
HomeP = gethostbyname( Host.c_str() );
if( !HomeP )
{
return 0;
}
else HostIp = *(unsigned long *)HomeP->h_addr;
}
return HostIp;
} // ==> GetIP( string host)
|
|
|
11/01/2010, 23:48
|
#12
|
elite*gold: 0
Join Date: Jan 2010
Posts: 250
Received Thanks: 21
|
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(socket, buf + bytesSent, size - bytesSent, 0); } while(bytesSent < size); } void GetLine(int socket, std::stringstream& line) { for(char c; recv(socket, &c, 1, 0) > 0; line << c) { if(c == '\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
hostent* phe = 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** p = phe->h_aliases; *p != 0; ++p) { cout << *p << " "; } 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_INET, SOCK_STREAM, IPPROTO_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** p = phe->h_addr_list; int result; // Ergebnis von connect do { if(*p == NULL) { cout << "Verbindung fehlgschlagen!" << endl; return 1; }
service.sin_addr.s_addr = *reinterpret_cast<unsigned long*>(*p); ++p; result = connect(Socket, reinterpret_cast<sockaddr*>(&service), sizeof(service)); } while(result == -1);
cout << "Verbindung erfolgreich!" << endl; const string request = "/*der request*/";
SendAll(Socket, request.c_str(), request.size()); ofstream fout("output.txt");
cout << "Empfange und schreibe Antwort in output.txt..." << endl; while(true) { stringstream line; try { GetLine(Socket, line); } catch(exception& e) // 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
|
#13
|
elite*gold: 0
Join Date: Jan 2010
Posts: 250
Received Thanks: 21
|
habe den ccode jetzt SO geändert s kommt aber immer noch gleiche fehlermeldung von die-staemme
PHP Code:
hostent* phe = 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** p = phe->h_aliases; *p != 0; ++p) { cout << *p << " "; } 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_INET, SOCK_STREAM, IPPROTO_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** p = phe->h_addr_list; // p mit erstem Listenelement initialisieren int result; // Ergebnis von connect do { if(*p == NULL) // Ende der Liste { cout << "Verbindung fehlgschlagen!" << endl; return 1; }
service.sin_addr.s_addr = *reinterpret_cast<unsigned long*>(*p); ++p; result = connect(Socket, reinterpret_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=0 ; while (pos!=string::npos) { sicherheit++ ; if (sicherheit>1000) break; pos=sCookies.find(" ") ; if (pos!=string::npos) sCookies.replace(pos,1,"") ; } sicherheit=0; request += "Cookie: " + sCookies + "\r\n";
SendAll(Socket, request.c_str(), request.size()); ofstream fout("output.txt");
cout << "Empfange und schreibe Antwort in output.txt..." << endl; while(true) { stringstream line; try { GetLine(Socket, line); } catch(exception& e) // 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
|
#14
|
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
|
Quote:
Originally Posted by bammes
habe den ccode jetzt SO geändert s kommt aber immer noch gleiche fehlermeldung von die-staemme
PHP Code:
hostent* phe = 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** p = phe->h_aliases; *p != 0; ++p) { cout << *p << " "; } 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_INET, SOCK_STREAM, IPPROTO_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** p = phe->h_addr_list; // p mit erstem Listenelement initialisieren int result; // Ergebnis von connect do { if(*p == NULL) // Ende der Liste { cout << "Verbindung fehlgschlagen!" << endl; return 1; }
service.sin_addr.s_addr = *reinterpret_cast<unsigned long*>(*p); ++p; result = connect(Socket, reinterpret_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=0 ; while (pos!=string::npos) { sicherheit++ ; if (sicherheit>1000) break; pos=sCookies.find(" ") ; if (pos!=string::npos) sCookies.replace(pos,1,"") ; } sicherheit=0; request += "Cookie: " + sCookies + "\r\n";
SendAll(Socket, request.c_str(), request.size()); ofstream fout("output.txt");
cout << "Empfange und schreibe Antwort in output.txt..." << endl; while(true) { stringstream line; try { GetLine(Socket, line); } catch(exception& e) // 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
|
#15
|
elite*gold: 0
Join Date: Jan 2010
Posts: 250
Received Thanks: 21
|
ich weis net genau wie man verlinkt (habe VC++ 2008)
denke des geht rechtsklick auf projekt->eigenschaften->Linker->... weiter weis ich ned
|
|
|
 |
|
Similar Threads
|
Packetbot in vb 08
08/19/2010 - .NET Languages - 2 Replies
Hallo,
Ich wollte mal anfangen über Winsock Packet Bots zu programmieren und habe dazu dieses Tutorial gefunden :http://www.elitepvpers.com/forum/gamehacking-tutor ials/161132-tutorial-packets-sniffing-analysis.htm l
Es ist mir auch gelungen Loginpackete für das Spiel zu finden und diese zu entschlüsseln, aber wie soll ich jetzt weiter machen? Ich weiß nicht wie man diese Packete in vb senden kann, kann mir das jemand vll erklären?
habe natürlich schon sufu benutzt und gegoogled aber ohne...
|
Packetbot für freewar
07/20/2010 - AutoIt - 3 Replies
hi
ich hab mir mal das tutorial von shadow992 zum autoit botschreiben angeguckt und wollt jetzt einen packetbot für freewar.de schreiben.
Leider klappt da schonmal was beim einloggen nicht. ich bin noch ein ziehmlicher anfänger und es wär toll wenn ihr mir weiterhelfen könntet.
hier mein quellcode (hab den angegebenen account erstellt damit ihr den code selbst testen könnt)
Die funktionen GetCoockies, TCPRequest und Change sind bereits vorgefertigt und im oben erwähnten Tutorial erklärt.
|
Packetbot URL Ansteuern
06/26/2010 - AutoIt - 7 Replies
Also das ist mein angehender Packetbot
im dem kleinen gekennzeichnetten segment soll der Bot diese Url ansteuern wie schaffe ich das?
#include
HotKeySet("{ESC}","_Exit")
;================Benutzername&Passwort speichern======================
$name=""
$pw=""
$name1=""
|
All times are GMT +1. The time now is 01:22.
|
|