Download ClogBot.c
/*
ClogBot - A [C]reepy [log]ging [B]ot
Copyright (C) 2005 Michael R. Dornkasch aka stoerimpuls
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
- [c] by Michael R. Dornkasch
- root [at] stoerimpuls.net
- stoerimpuls.net
- Have [ph]un
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define RYTHMUS 30
struct hostent *hostent;
struct sockaddr_in sockaddr;
int strumpf;
extern int fehla;
int wieschau;
int hausnuma;
int socket_option=0;
char stoss[4096];
fd_set lesestrumpf;
struct zeitstrumpf;
time_t zeit,gestarted,letzter_kontakt,
letzter_ping;
char deinname[64];
int stosszaler;
char rederaum[32];
char zeit_zeile[128];
int irc_port=6667;
char daten_form[255];
char rede_dienst_steller[128];
char spitzname[16];
int zeitrein;
int zeiger_zeile;
char stoss_rein_buffer[1024];
int raus_schrift;
char numma1[256];
char numma3[256];
char rein_stoss_terminal[1024];
int strumpf_rein_zahler;
int zeiger_zeile;
char numma2[256];
int strumpf_rein_zeiger;
int raus_zeiger;
void versch_server_nachr(void) {
strumpf_rein_zeiger = 0;
raus_zeiger= 0;
while ((stoss_rein_buffer[strumpf_rein_zeiger] != ' ') &&
(stoss_rein_buffer[strumpf_rein_zeiger] != 0))
numma1[raus_zeiger++] = stoss_rein_buffer[strumpf_rein_zeiger++];
numma1[raus_zeiger] = 0;
numma2[0] = 0;
if (stoss_rein_buffer[strumpf_rein_zeiger]) {
strumpf_rein_zeiger++;
raus_zeiger = 0;
while ((stoss_rein_buffer[strumpf_rein_zeiger] != ' ') &&
(stoss_rein_buffer[strumpf_rein_zeiger] != 0))
numma2[raus_zeiger++] = stoss_rein_buffer[strumpf_rein_zeiger++];
numma2[raus_zeiger] = 0;
}
numma3[0] = 0;
if (stoss_rein_buffer[strumpf_rein_zeiger]) {
strumpf_rein_zeiger++;
raus_zeiger = 0;
while ((stoss_rein_buffer[strumpf_rein_zeiger] != ' ') &&
(stoss_rein_buffer[strumpf_rein_zeiger] != 0))
numma3[raus_zeiger++] = stoss_rein_buffer[strumpf_rein_zeiger++];
numma3[raus_zeiger] = 0;
}
}
int main(int argc,char *argv[]) {
FILE * outfl = fopen ( "ClogBotLogs.txt", "a+" );
strcpy(rede_dienst_steller,"irc.freenode.org");
strcpy(spitzname,"ClogBot");
strcpy(rederaum,"#test");
gethostname(deinname,sizeof(deinname));
strcpy(zeit_zeile,rede_dienst_steller);
hostent = gethostbyname(zeit_zeile);
if (hostent == NULL) { return(1); }
strumpf = socket(AF_INET,SOCK_STREAM,0);
if (strumpf < 0) { return(1); }
memset(&sockaddr,0,sizeof(sockaddr));
sockaddr.sin_family = AF_INET;
memcpy((char *)&(sockaddr.sin_addr.s_addr),(char *)hostent->h_addr_list[0],
(size_t)hostent->h_length);
sockaddr.sin_port = htons(irc_port);
if (connect(strumpf,(struct sockaddr *)&sockaddr,sizeof(sockaddr)) < 0) { close(strumpf);
return(1); }
fcntl(strumpf,F_SETFL,O_NONBLOCK);
fcntl(1,F_SETFL,O_NONBLOCK);
strcpy(stoss,"NICK ");
strcat(stoss,spitzname);
strcat(stoss,"\r\n");
write(strumpf,stoss,strlen(stoss));
strcpy(stoss,"USER ");
strcat(stoss,spitzname);
strcat(stoss," ");
strcat(stoss,deinname);
strcat(stoss," ");
strcat(stoss,rede_dienst_steller);
strcat(stoss," ClogBot - http://stoerimpuls.net \r\n");
write(strumpf,stoss,strlen(stoss));
sleep(5);
strumpf_rein_zahler = 0;
stosszaler = 0;
gestarted = time((time_t *) 0);
letzter_kontakt = time((time_t *) 0);
event_loop:
raus_schrift = read(strumpf,stoss,1);
if (raus_schrift == 1) {
if (stoss[0] == 13) stoss[0] = 13;
if (stoss[0] != 10) stoss_rein_buffer[strumpf_rein_zahler++] = stoss[0];
if (stoss[0] == 10) {
stoss_rein_buffer[strumpf_rein_zahler] = 0;
strumpf_rein_zahler = 0;
letzter_kontakt = time((time_t *) 0);
versch_server_nachr();
if (!strncmp(stoss_rein_buffer,"PING",4)) {
strcpy(stoss,stoss_rein_buffer);
stoss[1] = 'O';
strcat(stoss,"\r\n");
write(strumpf,stoss,strlen(stoss));
goto event_loop;
}
if (!strcmp(numma2,"PONG")) goto event_loop;
if (!strcmp(numma2,"PRIVMSG")) {
fprintf( outfl, "<");
zeitrein = 1;
while (numma1[zeitrein] != '!') fprintf( outfl, "%c",numma1[zeitrein++]);
fprintf( outfl, "> ");
while (stoss_rein_buffer[strumpf_rein_zeiger++] != ':') { };
while (stoss_rein_buffer[strumpf_rein_zeiger] != 0)
fprintf( outfl, "%c",stoss_rein_buffer[strumpf_rein_zeiger++]);
fputs ("\n", outfl );
fflush ( outfl );
goto event_loop;
}
if (!strcmp(numma2,"001")) {
strcpy(stoss,"JOIN ");
strcat(stoss,rederaum);
strcat(stoss,"\r\n");
write(strumpf,stoss,strlen(stoss));
}
}
goto event_loop;
}
zeit = time((time_t *) 0);
if (zeit - letzter_kontakt > 70) { goto exit_point; }
if ((zeit - letzter_kontakt > RYTHMUS) && (zeit - letzter_ping > RYTHMUS)) {
strcpy(stoss,"PING ");
strcat(stoss,deinname);
strcat(stoss,"\r\n");
write(strumpf,stoss,strlen(stoss));
letzter_ping = time((time_t*) 0);
}
sleep(1);
goto event_loop;
exit_point:
strcpy(stoss,"QUIT\r\n");
write(strumpf,stoss,strlen(stoss));
shutdown(strumpf,2);
close(strumpf);
fclose ( outfl );
return(0);
}