int cmd_igmpv2_specquery (struct cli_def *cli, char *command, char *argv[], int argc) { int mrt=100, sum=-1; u_int8_t IP[4]; u_int32_t mip=0; if ( (strcmp(argv[argc-1],"?")==0) || (argc>3) ) { cli_print(cli, "Configure a IGMPv2 group-specific query.\n"); cli_print(cli, "ARGUMENTS: <IP-address> [<MRT> [<checksum>]]\n"); cli_print(cli, "<IP-Address> ... multicast group to be queried (can be ANY IP address!)\r"); cli_print(cli, "<MRT> ... maximum response time in 100 msec units (default: 10 s)\r"); cli_print(cli, "<checksum> ... user-defined checksum (usually wrong by intention) in \r"); cli_print(cli, " hexadecimal notation (e. g. 'c7b3').\n"); return CLI_OK; } if (argc==0) { cli_print(cli, "You must at least specify the group address\n"); return CLI_OK; } if (argc>=1) { if (mops_pdesc_ip (IP, argv[0])==0) // check if format is really an IP address mip = str2ip32(argv[0]); else { cli_print(cli, "Invalid IP address\n"); return CLI_OK; } } if (argc>=2) { if (mz_strisnum(argv[1])==0) { cli_print(cli, "Maximum response time must only contain numbers!\n"); return CLI_OK; } mrt = (int) str2int(argv[1]); } if (argc==3) { if (mz_strishex(argv[2])==0) { cli_print(cli, "Checksum must only contain hexadecimal numbers!\n"); return CLI_OK; } sum = (int) xstr2int(argv[2]); if (sum>0xffff) { cli_print(cli, "Checksum must be a 2-byte value!\n"); return CLI_OK; } } clipkt->ip_dst = mip; clipkt->ip_ttl = 1; clipkt->ndelay.tv_sec = 125; clipkt->ndelay.tv_nsec = 0; if (mops_create_igmpv2 (clipkt, 0, IGMP_GSPEC_QUERY, mrt, sum, mip)) cli_print(cli, "Invalid parameters!\n"); return CLI_OK; }
int cmd_arp_tip (struct cli_def *cli, const char *command, char *argv[], int argc) { struct mops_ext_arp * pd = clipkt->p_desc; if ( (strncmp(argv[argc-1],"?",1)==0) || (argc!=1) ) { cli_print(cli,"Specify a target IP address (format: A.B.C.D)\n"); } else if (mops_pdesc_ip (pd->target_ip, argv[0])) { cli_print(cli,"Invalid IP address (use format: A.B.C.D)\n"); } return CLI_OK; }
int cmd_igmpv1_report (struct cli_def *cli, char *command, char *argv[], int argc) { int sum; u_int8_t IP[4]; u_int32_t mip=0; if ( (strcmp(argv[argc-1],"?")==0) || (argc>2) || (argc==0)) { cli_print(cli, "Configure a IGMPv1 membership report.\n"); cli_print(cli, "ARGUMENTS: <IP-Address> [<checksum>]\n"); cli_print(cli, "<IP-Address> ... multicast group address to be reported (but ANY IP\r"); cli_print(cli, " address allowed, Mausezahn is really generous...)\r"); cli_print(cli, "<checksum> ... user-defined checksum (usually wrong by intention) in \r"); cli_print(cli, " hexadecimal notation (e. g. 'c7b3').\n"); return CLI_OK; } if (argc>=1) { if (mops_pdesc_ip (IP, argv[0])==0) // check if format is really an IP address mip = str2ip32(argv[0]); else { cli_print(cli, "Invalid IP address\n"); return CLI_OK; } } if (argc==2) { if (mz_strishex(argv[1])==0) { cli_print(cli, "Checksum must only contain hexadecimal numbers!\n"); return CLI_OK; } sum = (int) xstr2int(argv[1]); if (sum>0xffff) { cli_print(cli, "Checksum must be a 2-byte value!\n"); return CLI_OK; } } else sum = -1; clipkt->ip_dst = mip; clipkt->ip_ttl = 1; clipkt->ndelay.tv_sec = 1; clipkt->ndelay.tv_nsec = 0; if (mops_create_igmpv2 (clipkt, 0, IGMP_V1_REPORT, 0, sum, mip)) cli_print(cli, "Invalid parameters!\n"); return CLI_OK; }
int cmd_igmpv2_leave (struct cli_def *cli, char *command, char *argv[], int argc) { int sum; u_int8_t IP[4]; u_int32_t mip=0; if ( (strcmp(argv[argc-1],"?")==0) || (argc>2) || (argc==0)) { cli_print(cli, "Configure a IGMPv2 leave group message.\n"); cli_print(cli, "ARGUMENTS: <IP-Address> [<checksum>]\n"); cli_print(cli, "<IP-Address> ... multicast group address that should be left; use\r"); cli_print(cli, " the special address 0.0.0.0 for a 'general leave'\r"); cli_print(cli, "<checksum> ... user-defined checksum (usually wrong by intention) in \r"); cli_print(cli, " hexadecimal notation (e. g. 'c7b3').\n"); return CLI_OK; } if (argc>=1) { if (mops_pdesc_ip (IP, argv[0])==0) // check if format is really an IP address mip = str2ip32(argv[0]); else { cli_print(cli, "Invalid IP address\n"); return CLI_OK; } } if (argc==2) { if (mz_strishex(argv[1])==0) { cli_print(cli, "Checksum must only contain hexadecimal numbers!\n"); return CLI_OK; } sum = (int) xstr2int(argv[1]); if (sum>0xffff) { cli_print(cli, "Checksum must be a 2-byte value!\n"); return CLI_OK; } } else sum = -1; clipkt->ip_dst = str2ip32("224.0.0.2"); clipkt->ip_ttl = 1; clipkt->ndelay.tv_sec = 1; clipkt->ndelay.tv_nsec = 0; if (mops_create_igmpv2 (clipkt, 0, IGMP_LEAVE, 0, sum, mip)) cli_print(cli, "Invalid parameters!\n"); return CLI_OK; }
int conf_ip_address (struct cli_def *cli, const char *command, char *argv[], int argc) { if ( (strcmp(argv[argc-1],"?")==0) || (argc>1) ) { cli_print(cli, "A.B.C.D Specify a default interface IP address\n"); return CLI_OK; } if (argc) { if (mops_pdesc_ip (device_list[clidev].ip_mops, argv[0])) { cli_print(cli,"Invalid IP address (use format: A.B.C.D)\n"); } } else cli_print(cli, "A.B.C.D Specify a default interface IP address\n"); return CLI_OK; }
int launch_synflood (struct cli_def *cli, 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; }