diff options
Diffstat (limited to 'staging/cli_launch.c')
-rw-r--r-- | staging/cli_launch.c | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/staging/cli_launch.c b/staging/cli_launch.c new file mode 100644 index 0000000..19b6ba0 --- /dev/null +++ b/staging/cli_launch.c @@ -0,0 +1,141 @@ +/* + * Mausezahn - A fast versatile traffic generator + * Copyright (C) 2008-2010 Herbert Haas + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License version 2 as published by the + * Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, see http://www.gnu.org/licenses/gpl-2.0.html + * +*/ + + + +#include "mz.h" +#include "cli.h" +#include "mops.h" + + + +int launch_bpdu (struct cli_def *cli, const char *command, char *argv[], int argc) +{ + int conf=0; + struct mops_ext_bpdu * pd; + + if ( (strncmp(argv[argc-1],"?",2)==0) || (argc>1) ) { + cli_print(cli, "Launch a(nother) BPDU process:\n"); + cli_print(cli, "<CR> Per default a TCN-BPDU is sent.\r"); + cli_print(cli, "conf Use this keyword to emit configuration BPDUs\r"); + cli_print(cli, " (with this host as root bridge)\n"); + return CLI_OK; + } + + if (argc==1) { + if (mz_strcmp(argv[0], "conf", 1)==0) conf=1; + } + + if ((clipkt = mops_alloc_packet(mp_head)) == NULL) { // Problem, memory full? + cli_print(cli, "Cannot allocate additional memory!\n"); + return CLI_OK; + } + + strncpy (clipkt->packet_name, "sysBPDU", 7); + // OK, created a new packet + cli_print(cli, "Allocated new packet %s at slot %i",clipkt->packet_name, clipkt->id); + mops_set_defaults(clipkt); + if (mops_ext_add_pdesc (clipkt, MOPS_BPDU)) + cli_print(cli, "Cannot configure BPDU parameters!?\n"); + else { + clipkt->use_ETHER = 1; + clipkt->use_SNAP = 1; + clipkt->count = 0; + clipkt->ndelay.tv_sec = 2; + clipkt->ndelay.tv_nsec = 0; + pd = clipkt->p_desc; + if (conf) + pd->bpdu_type = 0x00; + else + pd->bpdu_type = 0x80; + mops_set_conf(clipkt); + if (mops_tx_simple (clipkt)) { + cli_print(cli, "Cannot create sending process.\r"); + } + } + + return CLI_OK; +} + + + +int launch_synflood (struct cli_def *cli, const char *command, char *argv[], int argc) +{ + u_int8_t IP[4]; + int valid_ip=0, valid_port=0; + + if ( (strncmp(argv[argc-1],"?",2)==0) || (argc>2) || (argc==0)) { + cli_print(cli, "Launch a(nother) TCP SYN-Flood process:\n"); + cli_print(cli, "<dst-ip-addr> At least you must specify the destination IP address\r"); + cli_print(cli, "<dst-ip-addr> <port-nr> Optionally specify the destination port (default: range from 1-1023)\n"); + return CLI_OK; + } + + if (mops_pdesc_ip (IP, argv[0])==0) { // check if format is really an IP address + valid_ip=1; + } else { + cli_print(cli, "Invalid IP address\n"); + return CLI_OK; + } + + if (argc==2) { + if (mz_strisnum(argv[1])==0) { + cli_print(cli, "Invalid port number\n"); + return CLI_OK; + } + valid_port = (int) str2int(argv[1]); + if (valid_port>65535) { + cli_print(cli, "Invalid port number\n"); + return CLI_OK; + } + } + + + if ((clipkt = mops_alloc_packet(mp_head)) == NULL) { // Problem, memory full? + cli_print(cli, "Cannot allocate additional memory!\n"); + return CLI_OK; + } + + strncpy (clipkt->packet_name, "sysFlood_TCPSYN", 15); + // OK, created a new packet + cli_print(cli, "Allocated new packet %s at slot %i",clipkt->packet_name, clipkt->id); + mops_set_defaults(clipkt); + clipkt->use_ETHER = 1; + clipkt->use_IP = 1; + clipkt->use_TCP = 1; + clipkt->ip_proto = 6; + clipkt->count = 0; + clipkt->ip_dst = str2ip32(argv[0]); + clipkt->ip_src_israndom=1; + if (valid_port) { + clipkt->dp = valid_port; + } else { + clipkt->dp_isrange=1; + clipkt->dp_start=1; + clipkt->dp_stop=1023; + } + clipkt->ndelay.tv_sec = 0; + clipkt->ndelay.tv_nsec = 0; + mops_set_conf(clipkt); + mops_tcp_add_option (clipkt,64,0,0,0,0); + if (mops_tx_simple (clipkt)) { + cli_print(cli, "Cannot create sending process.\r"); + } + + return CLI_OK; +} |