Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Bot entwicklung
Hallo,
ich habe mal angefangen einen IRC Bot zu schreiben.
Dieser stürtzt leider manchmal ab wenn mehrere Bot's online sind.
Der Bot arbeitet mit Threads...
Wie schaffen den stable Bots das die nicht bei 1k Bots schon abstürzen?
Schwer zu sagen, zeig doch mal den Code, mit dem zu die Threads verwaltest...
Hast du evtl. nicht alle globalen Zugriffe korrekt abgesichert/synchonisiert mit z.B. CriticalSections o.Ä.?
Arbeite mit _beginthreadex()
So ungefähr sieht des aus:
int irc_start() {
reserviere speicher für buffer
empfange bytes vom server und schreibe in buffer
starte "derThread" mit beginthreadex() und übergebe buffer
}
int derThread(char *wert) {
kopiere Wert von der Variablen "wert"
gebe buffer("wert") mit free() frei
}
Grob gesehen sieht das ganze jetzt so aus.
Kann den Code leider nicht komplett posten.
Du startest also aus einem Programm heraus mehrere Bots, oder wofür verwendest du Multithreading?
Ich verwende Multithreading für die erhaltenen Befehle.
Du startest also aus einem Programm heraus mehrere Bots
Rede von dem kompletten Botnet.
Wann genau stürzt er ab, wenn du das Programm x mal bei dir selbst startest oder auf verschiedenen Rechnern, evtl. liegt es auch am IRC Server?
Gibt es bestimmte Meldungen?
Also habe schon ein paar Victims mit dem Bot...
Wenn ich z.B denn login Befehl gebe:
.login pw
Erhalte ich von den Bots die Ausgabe:
Successful logged inUnd danach stürzen einige Bots immer ab.
Am Server liegt es 100% nicht
blackberry
10.03.2010, 16:58
Schonmal mit OllyDbg versucht?
Oder einfach ein paar Debug-Ausgaben einfügen und schauen wo das Ding abstürzt.
Aber mal ehrlich: wenn du keinen Code rausgibst verstehe ich nicht, wieso dieser Thread überhaupt hier steht.
for(;;) {
err = 0;
// WaitForSingleObject((HANDLE)x,300); //test
if(b == NULL) {
memset(puffer,0,sizeof(puffer));
CloseHandle((HANDLE)x);
}
else {
while(1)
if(b == NULL)
break;
CloseHandle((HANDLE)x);
memset(puffer,0,sizeof(puffer));
}
err = recv(socket,puffer,MAX-1,0);
if((err == 0) || (err == SOCKET_ERROR)) {
//printf("WSAGetLastError: %i\n",WSAGetLastError());
shutdown(socket,2);
closesocket(socket);
WSACleanup();
return 1;
}
else {
puffer[err] = '\0';
b = calloc(strlen(puffer)+1,sizeof(char));
if(b != NULL) {
strncpy(b,puffer,strlen(puffer));
cmd.msg = &b;
x = _beginthreadex(NULL,0,split_cmd,&cmd,0,NULL);
}
}
//split_cmd()
unsigned __stdcall split_cmd(irc *cmd) {
char *p,user[24],*buf;
argv parameters;
int err,socket;
memset(¶meters,0,sizeof(argv));
buf = calloc(strlen(*cmd->msg)+1,sizeof(char));
if(buf == NULL)
return 1;
else
memset(buf,0,sizeof(buf));
strncpy(buf,*cmd->msg,strlen(*cmd->msg));
free(*cmd->msg);
*cmd->msg = NULL;
Irgendwo in diesem Code muss ein Fehler sein...
der einfach ein paar Debug-Ausgaben einfügen und schauen wo das Ding abstürzt.
Bei Victims sehe ich die Ausgaben nicht...
Lass die Ausgaben im Chat(query) erscheinen.
blackberry
10.03.2010, 20:44
Bei Victims sehe ich die Ausgaben nicht...
Dann werde ich dir mal ein kleines Geheimnis verraten:
Es ist möglich Dateien auf dem eigenen Computer auszuführen (ja, wirklich - das geht echt!) und dann dort zu debuggen!
GregorSamsa
10.03.2010, 21:22
Nein BlackBerry, du lügst!
@Threadstarter: Sicher dass du nicht vllt. einfach probleme im Speichermanagement hast?
Shcua dir doch mal meinen Source zu den IRC-Bot an, vllt. hilft der dir weiter...
Powered by vBulletin® Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.