/* * 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, " 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, " At least you must specify the destination IP address\r"); cli_print(cli, " 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; }