summaryrefslogtreecommitdiff
path: root/staging/cli_launch.c
diff options
context:
space:
mode:
Diffstat (limited to 'staging/cli_launch.c')
-rw-r--r--staging/cli_launch.c141
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;
+}