PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Bot entwicklung



KillAV
10.03.2010, 12:27
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?

inout
10.03.2010, 12:35
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.Ä.?

KillAV
10.03.2010, 13:06
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.

aL1ien
10.03.2010, 14:28
Du startest also aus einem Programm heraus mehrere Bots, oder wofür verwendest du Multithreading?

KillAV
10.03.2010, 16:14
Ich verwende Multithreading für die erhaltenen Befehle.


Du startest also aus einem Programm heraus mehrere Bots

Rede von dem kompletten Botnet.

fred777
10.03.2010, 16:48
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?

KillAV
10.03.2010, 16:55
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.

KillAV
10.03.2010, 18:40
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(&parameters,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...

aL1ien
10.03.2010, 19:48
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...