Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
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;
}
Пример #5
0
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;
}
Пример #6
0
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;
}