diff --git a/.gitignore b/.gitignore index 4c3dc40..889d9e6 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ CMakeFiles *.cmake Makefile CMakeCache.txt +src/zopt.h +src/zopt.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e2d2b4..0a403b7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,11 +42,11 @@ endif() if(WITH_JSON) include(FindPkgConfig) - pkg_check_modules(JSON json-c) - if(NOT JSON_FOUND) - set(JSON_CFLAGS "") - set(JSON_LIBS "-ljson-c") - include_directories("/usr/local/include/json-c/") + pkg_check_modules(JSON json) + if(JSON_FOUND) + include_directories(JSON_INCLUDE_DIRS) + else() + message(FATAL_ERROR "Did not find libjson") endif() add_definitions("-DJSON") diff --git a/src/zopt.c b/src/zopt.c deleted file mode 100644 index 3210e44..0000000 --- a/src/zopt.c +++ /dev/null @@ -1,1399 +0,0 @@ -/* - File autogenerated by gengetopt version 2.22.5 - generated with the following command: - gengetopt -C --no-help --no-version -i zopt.ggo -F zopt - - The developers of gengetopt consider the fixed text that goes in all - gengetopt output files to be in the public domain: - we make no copyright claims on it. -*/ - -/* If we use autoconf. */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include - -#ifndef FIX_UNUSED -#define FIX_UNUSED(X) (void) (X) /* avoid warnings for unused params */ -#endif - -#include - -#include "zopt.h" - -const char *gengetopt_args_info_purpose = "A fast Internet-wide scanner."; - -const char *gengetopt_args_info_usage = "Usage: zmap [OPTIONS]..."; - -const char *gengetopt_args_info_description = ""; - -const char *gengetopt_args_info_help[] = { - "Basic arguments:", - " -p, --target-port=port TCP port number to scan (for SYN scans)", - " -o, --output-file=name Output file", - " -b, --blacklist-file=path File of subnets to exclude, in CIDR notation, \n e.g. 192.168.0.0/16", - " -w, --whitelist-file=path File of subnets to constrain scan to, in CIDR \n notation, e.g. 192.168.0.0/16", - " -f, --output-fields=fields Fields that should be output in result set", - "\nScan options:", - " -n, --max-targets=n Cap number of targets to probe (as a number or \n a percentage of the address space)", - " -N, --max-results=n Cap number of results to return", - " -t, --max-runtime=ses Cap length of time for sending packets", - " -r, --rate=pps Set send rate in packets/sec", - " -B, --bandwidth=bps Set send rate in bits/second (supports suffixes \n G, M and K)", - " -c, --cooldown-time=secs How long to continue receiving after sending \n last probe (default=`8')", - " -e, --seed=n Seed used to select address permutation", - " -T, --sender-threads=n Threads used to send packets (default=`1')", - " -P, --probes=n Number of probes to send to each IP \n (default=`1')", - " -d, --dryrun Don't actually send packets", - "\nNetwork options:", - " -s, --source-port=port|range Source port(s) for scan packets", - " -S, --source-ip=ip|range Source address(es) for scan packets", - " -G, --gateway-mac=addr Specify gateway MAC address", - " -i, --interface=name Specify network interface to use", - " -X, --vpn Sends IP packets instead of Ethernet (for VPNs)", - "\nAdvanced options:", - " -M, --probe-module=name Select probe module (default=`tcp_synscan')", - " -O, --output-module=name Select output module (default=`simple_file')", - " --probe-args=args Arguments to pass to probe module", - " --output-args=args Arguments to pass to output module", - " --list-output-modules List available output modules", - " --list-probe-modules List available probe modules", - " --list-output-fields List all fields that can be output by selected \n probe module", - "\nAdditional options:", - " -C, --config=filename Read a configuration file, which can specify \n any of these options \n (default=`/etc/zmap/zmap.conf')", - " -q, --quiet Do not print status updates", - " -g, --summary Print configuration and summary at end of scan", - " -v, --verbosity=n Level of log detail (0-5) (default=`3')", - " -h, --help Print help and exit", - " -V, --version Print version and exit", - "\nExamples:\n zmap -p 443 (scans the whole Internet for hosts with port 443 open)\n zmap -N 5 -B 10M -p 80 -o - (find 5 HTTP servers, scanning at 10 Mb/s)", - 0 -}; - -typedef enum {ARG_NO - , ARG_STRING - , ARG_INT -} cmdline_parser_arg_type; - -static -void clear_given (struct gengetopt_args_info *args_info); -static -void clear_args (struct gengetopt_args_info *args_info); - -static int -cmdline_parser_internal (int argc, char **argv, struct gengetopt_args_info *args_info, - struct cmdline_parser_params *params, const char *additional_error); - -struct line_list -{ - char * string_arg; - struct line_list * next; -}; - -static struct line_list *cmd_line_list = 0; -static struct line_list *cmd_line_list_tmp = 0; - -static void -free_cmd_list(void) -{ - /* free the list of a previous call */ - if (cmd_line_list) - { - while (cmd_line_list) { - cmd_line_list_tmp = cmd_line_list; - cmd_line_list = cmd_line_list->next; - free (cmd_line_list_tmp->string_arg); - free (cmd_line_list_tmp); - } - } -} - - -static char * -gengetopt_strdup (const char *s); - -static -void clear_given (struct gengetopt_args_info *args_info) -{ - args_info->target_port_given = 0 ; - args_info->output_file_given = 0 ; - args_info->blacklist_file_given = 0 ; - args_info->whitelist_file_given = 0 ; - args_info->output_fields_given = 0 ; - args_info->max_targets_given = 0 ; - args_info->max_results_given = 0 ; - args_info->max_runtime_given = 0 ; - args_info->rate_given = 0 ; - args_info->bandwidth_given = 0 ; - args_info->cooldown_time_given = 0 ; - args_info->seed_given = 0 ; - args_info->sender_threads_given = 0 ; - args_info->probes_given = 0 ; - args_info->dryrun_given = 0 ; - args_info->source_port_given = 0 ; - args_info->source_ip_given = 0 ; - args_info->gateway_mac_given = 0 ; - args_info->interface_given = 0 ; - args_info->vpn_given = 0 ; - args_info->probe_module_given = 0 ; - args_info->output_module_given = 0 ; - args_info->probe_args_given = 0 ; - args_info->output_args_given = 0 ; - args_info->list_output_modules_given = 0 ; - args_info->list_probe_modules_given = 0 ; - args_info->list_output_fields_given = 0 ; - args_info->config_given = 0 ; - args_info->quiet_given = 0 ; - args_info->summary_given = 0 ; - args_info->verbosity_given = 0 ; - args_info->help_given = 0 ; - args_info->version_given = 0 ; -} - -static -void clear_args (struct gengetopt_args_info *args_info) -{ - FIX_UNUSED (args_info); - args_info->target_port_orig = NULL; - args_info->output_file_arg = NULL; - args_info->output_file_orig = NULL; - args_info->blacklist_file_arg = NULL; - args_info->blacklist_file_orig = NULL; - args_info->whitelist_file_arg = NULL; - args_info->whitelist_file_orig = NULL; - args_info->output_fields_arg = NULL; - args_info->output_fields_orig = NULL; - args_info->max_targets_arg = NULL; - args_info->max_targets_orig = NULL; - args_info->max_results_orig = NULL; - args_info->max_runtime_orig = NULL; - args_info->rate_orig = NULL; - args_info->bandwidth_arg = NULL; - args_info->bandwidth_orig = NULL; - args_info->cooldown_time_arg = 8; - args_info->cooldown_time_orig = NULL; - args_info->seed_orig = NULL; - args_info->sender_threads_arg = 1; - args_info->sender_threads_orig = NULL; - args_info->probes_arg = 1; - args_info->probes_orig = NULL; - args_info->source_port_arg = NULL; - args_info->source_port_orig = NULL; - args_info->source_ip_arg = NULL; - args_info->source_ip_orig = NULL; - args_info->gateway_mac_arg = NULL; - args_info->gateway_mac_orig = NULL; - args_info->interface_arg = NULL; - args_info->interface_orig = NULL; - args_info->probe_module_arg = gengetopt_strdup ("tcp_synscan"); - args_info->probe_module_orig = NULL; - args_info->output_module_arg = gengetopt_strdup ("simple_file"); - args_info->output_module_orig = NULL; - args_info->probe_args_arg = NULL; - args_info->probe_args_orig = NULL; - args_info->output_args_arg = NULL; - args_info->output_args_orig = NULL; - args_info->config_arg = gengetopt_strdup ("/etc/zmap/zmap.conf"); - args_info->config_orig = NULL; - args_info->verbosity_arg = 3; - args_info->verbosity_orig = NULL; - -} - -static -void init_args_info(struct gengetopt_args_info *args_info) -{ - - - args_info->target_port_help = gengetopt_args_info_help[1] ; - args_info->output_file_help = gengetopt_args_info_help[2] ; - args_info->blacklist_file_help = gengetopt_args_info_help[3] ; - args_info->whitelist_file_help = gengetopt_args_info_help[4] ; - args_info->output_fields_help = gengetopt_args_info_help[5] ; - args_info->max_targets_help = gengetopt_args_info_help[7] ; - args_info->max_results_help = gengetopt_args_info_help[8] ; - args_info->max_runtime_help = gengetopt_args_info_help[9] ; - args_info->rate_help = gengetopt_args_info_help[10] ; - args_info->bandwidth_help = gengetopt_args_info_help[11] ; - args_info->cooldown_time_help = gengetopt_args_info_help[12] ; - args_info->seed_help = gengetopt_args_info_help[13] ; - args_info->sender_threads_help = gengetopt_args_info_help[14] ; - args_info->probes_help = gengetopt_args_info_help[15] ; - args_info->dryrun_help = gengetopt_args_info_help[16] ; - args_info->source_port_help = gengetopt_args_info_help[18] ; - args_info->source_ip_help = gengetopt_args_info_help[19] ; - args_info->gateway_mac_help = gengetopt_args_info_help[20] ; - args_info->interface_help = gengetopt_args_info_help[21] ; - args_info->vpn_help = gengetopt_args_info_help[22] ; - args_info->probe_module_help = gengetopt_args_info_help[24] ; - args_info->output_module_help = gengetopt_args_info_help[25] ; - args_info->probe_args_help = gengetopt_args_info_help[26] ; - args_info->output_args_help = gengetopt_args_info_help[27] ; - args_info->list_output_modules_help = gengetopt_args_info_help[28] ; - args_info->list_probe_modules_help = gengetopt_args_info_help[29] ; - args_info->list_output_fields_help = gengetopt_args_info_help[30] ; - args_info->config_help = gengetopt_args_info_help[32] ; - args_info->quiet_help = gengetopt_args_info_help[33] ; - args_info->summary_help = gengetopt_args_info_help[34] ; - args_info->verbosity_help = gengetopt_args_info_help[35] ; - args_info->help_help = gengetopt_args_info_help[36] ; - args_info->version_help = gengetopt_args_info_help[37] ; - -} - -void -cmdline_parser_print_version (void) -{ - printf ("%s %s\n", - (strlen(CMDLINE_PARSER_PACKAGE_NAME) ? CMDLINE_PARSER_PACKAGE_NAME : CMDLINE_PARSER_PACKAGE), - CMDLINE_PARSER_VERSION); -} - -static void print_help_common(void) { - cmdline_parser_print_version (); - - if (strlen(gengetopt_args_info_purpose) > 0) - printf("\n%s\n", gengetopt_args_info_purpose); - - if (strlen(gengetopt_args_info_usage) > 0) - printf("\n%s\n", gengetopt_args_info_usage); - - printf("\n"); - - if (strlen(gengetopt_args_info_description) > 0) - printf("%s\n\n", gengetopt_args_info_description); -} - -void -cmdline_parser_print_help (void) -{ - int i = 0; - print_help_common(); - while (gengetopt_args_info_help[i]) - printf("%s\n", gengetopt_args_info_help[i++]); -} - -void -cmdline_parser_init (struct gengetopt_args_info *args_info) -{ - clear_given (args_info); - clear_args (args_info); - init_args_info (args_info); -} - -void -cmdline_parser_params_init(struct cmdline_parser_params *params) -{ - if (params) - { - params->override = 0; - params->initialize = 1; - params->check_required = 1; - params->check_ambiguity = 0; - params->print_errors = 1; - } -} - -struct cmdline_parser_params * -cmdline_parser_params_create(void) -{ - struct cmdline_parser_params *params = - (struct cmdline_parser_params *)malloc(sizeof(struct cmdline_parser_params)); - cmdline_parser_params_init(params); - return params; -} - -static void -free_string_field (char **s) -{ - if (*s) - { - free (*s); - *s = 0; - } -} - - -static void -cmdline_parser_release (struct gengetopt_args_info *args_info) -{ - - free_string_field (&(args_info->target_port_orig)); - free_string_field (&(args_info->output_file_arg)); - free_string_field (&(args_info->output_file_orig)); - free_string_field (&(args_info->blacklist_file_arg)); - free_string_field (&(args_info->blacklist_file_orig)); - free_string_field (&(args_info->whitelist_file_arg)); - free_string_field (&(args_info->whitelist_file_orig)); - free_string_field (&(args_info->output_fields_arg)); - free_string_field (&(args_info->output_fields_orig)); - free_string_field (&(args_info->max_targets_arg)); - free_string_field (&(args_info->max_targets_orig)); - free_string_field (&(args_info->max_results_orig)); - free_string_field (&(args_info->max_runtime_orig)); - free_string_field (&(args_info->rate_orig)); - free_string_field (&(args_info->bandwidth_arg)); - free_string_field (&(args_info->bandwidth_orig)); - free_string_field (&(args_info->cooldown_time_orig)); - free_string_field (&(args_info->seed_orig)); - free_string_field (&(args_info->sender_threads_orig)); - free_string_field (&(args_info->probes_orig)); - free_string_field (&(args_info->source_port_arg)); - free_string_field (&(args_info->source_port_orig)); - free_string_field (&(args_info->source_ip_arg)); - free_string_field (&(args_info->source_ip_orig)); - free_string_field (&(args_info->gateway_mac_arg)); - free_string_field (&(args_info->gateway_mac_orig)); - free_string_field (&(args_info->interface_arg)); - free_string_field (&(args_info->interface_orig)); - free_string_field (&(args_info->probe_module_arg)); - free_string_field (&(args_info->probe_module_orig)); - free_string_field (&(args_info->output_module_arg)); - free_string_field (&(args_info->output_module_orig)); - free_string_field (&(args_info->probe_args_arg)); - free_string_field (&(args_info->probe_args_orig)); - free_string_field (&(args_info->output_args_arg)); - free_string_field (&(args_info->output_args_orig)); - free_string_field (&(args_info->config_arg)); - free_string_field (&(args_info->config_orig)); - free_string_field (&(args_info->verbosity_orig)); - - - - clear_given (args_info); -} - - -static void -write_into_file(FILE *outfile, const char *opt, const char *arg, const char *values[]) -{ - FIX_UNUSED (values); - if (arg) { - fprintf(outfile, "%s=\"%s\"\n", opt, arg); - } else { - fprintf(outfile, "%s\n", opt); - } -} - - -int -cmdline_parser_dump(FILE *outfile, struct gengetopt_args_info *args_info) -{ - int i = 0; - - if (!outfile) - { - fprintf (stderr, "%s: cannot dump options to stream\n", CMDLINE_PARSER_PACKAGE); - return EXIT_FAILURE; - } - - if (args_info->target_port_given) - write_into_file(outfile, "target-port", args_info->target_port_orig, 0); - if (args_info->output_file_given) - write_into_file(outfile, "output-file", args_info->output_file_orig, 0); - if (args_info->blacklist_file_given) - write_into_file(outfile, "blacklist-file", args_info->blacklist_file_orig, 0); - if (args_info->whitelist_file_given) - write_into_file(outfile, "whitelist-file", args_info->whitelist_file_orig, 0); - if (args_info->output_fields_given) - write_into_file(outfile, "output-fields", args_info->output_fields_orig, 0); - if (args_info->max_targets_given) - write_into_file(outfile, "max-targets", args_info->max_targets_orig, 0); - if (args_info->max_results_given) - write_into_file(outfile, "max-results", args_info->max_results_orig, 0); - if (args_info->max_runtime_given) - write_into_file(outfile, "max-runtime", args_info->max_runtime_orig, 0); - if (args_info->rate_given) - write_into_file(outfile, "rate", args_info->rate_orig, 0); - if (args_info->bandwidth_given) - write_into_file(outfile, "bandwidth", args_info->bandwidth_orig, 0); - if (args_info->cooldown_time_given) - write_into_file(outfile, "cooldown-time", args_info->cooldown_time_orig, 0); - if (args_info->seed_given) - write_into_file(outfile, "seed", args_info->seed_orig, 0); - if (args_info->sender_threads_given) - write_into_file(outfile, "sender-threads", args_info->sender_threads_orig, 0); - if (args_info->probes_given) - write_into_file(outfile, "probes", args_info->probes_orig, 0); - if (args_info->dryrun_given) - write_into_file(outfile, "dryrun", 0, 0 ); - if (args_info->source_port_given) - write_into_file(outfile, "source-port", args_info->source_port_orig, 0); - if (args_info->source_ip_given) - write_into_file(outfile, "source-ip", args_info->source_ip_orig, 0); - if (args_info->gateway_mac_given) - write_into_file(outfile, "gateway-mac", args_info->gateway_mac_orig, 0); - if (args_info->interface_given) - write_into_file(outfile, "interface", args_info->interface_orig, 0); - if (args_info->vpn_given) - write_into_file(outfile, "vpn", 0, 0 ); - if (args_info->probe_module_given) - write_into_file(outfile, "probe-module", args_info->probe_module_orig, 0); - if (args_info->output_module_given) - write_into_file(outfile, "output-module", args_info->output_module_orig, 0); - if (args_info->probe_args_given) - write_into_file(outfile, "probe-args", args_info->probe_args_orig, 0); - if (args_info->output_args_given) - write_into_file(outfile, "output-args", args_info->output_args_orig, 0); - if (args_info->list_output_modules_given) - write_into_file(outfile, "list-output-modules", 0, 0 ); - if (args_info->list_probe_modules_given) - write_into_file(outfile, "list-probe-modules", 0, 0 ); - if (args_info->list_output_fields_given) - write_into_file(outfile, "list-output-fields", 0, 0 ); - if (args_info->config_given) - write_into_file(outfile, "config", args_info->config_orig, 0); - if (args_info->quiet_given) - write_into_file(outfile, "quiet", 0, 0 ); - if (args_info->summary_given) - write_into_file(outfile, "summary", 0, 0 ); - if (args_info->verbosity_given) - write_into_file(outfile, "verbosity", args_info->verbosity_orig, 0); - if (args_info->help_given) - write_into_file(outfile, "help", 0, 0 ); - if (args_info->version_given) - write_into_file(outfile, "version", 0, 0 ); - - - i = EXIT_SUCCESS; - return i; -} - -int -cmdline_parser_file_save(const char *filename, struct gengetopt_args_info *args_info) -{ - FILE *outfile; - int i = 0; - - outfile = fopen(filename, "w"); - - if (!outfile) - { - fprintf (stderr, "%s: cannot open file for writing: %s\n", CMDLINE_PARSER_PACKAGE, filename); - return EXIT_FAILURE; - } - - i = cmdline_parser_dump(outfile, args_info); - fclose (outfile); - - return i; -} - -void -cmdline_parser_free (struct gengetopt_args_info *args_info) -{ - cmdline_parser_release (args_info); -} - -/** @brief replacement of strdup, which is not standard */ -char * -gengetopt_strdup (const char *s) -{ - char *result = 0; - if (!s) - return result; - - result = (char*)malloc(strlen(s) + 1); - if (result == (char*)0) - return (char*)0; - strcpy(result, s); - return result; -} - -int -cmdline_parser (int argc, char **argv, struct gengetopt_args_info *args_info) -{ - return cmdline_parser2 (argc, argv, args_info, 0, 1, 1); -} - -int -cmdline_parser_ext (int argc, char **argv, struct gengetopt_args_info *args_info, - struct cmdline_parser_params *params) -{ - int result; - result = cmdline_parser_internal (argc, argv, args_info, params, 0); - - if (result == EXIT_FAILURE) - { - cmdline_parser_free (args_info); - exit (EXIT_FAILURE); - } - - return result; -} - -int -cmdline_parser2 (int argc, char **argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required) -{ - int result; - struct cmdline_parser_params params; - - params.override = override; - params.initialize = initialize; - params.check_required = check_required; - params.check_ambiguity = 0; - params.print_errors = 1; - - result = cmdline_parser_internal (argc, argv, args_info, ¶ms, 0); - - if (result == EXIT_FAILURE) - { - cmdline_parser_free (args_info); - exit (EXIT_FAILURE); - } - - return result; -} - -int -cmdline_parser_required (struct gengetopt_args_info *args_info, const char *prog_name) -{ - FIX_UNUSED (args_info); - FIX_UNUSED (prog_name); - return EXIT_SUCCESS; -} - - -static char *package_name = 0; - -/** - * @brief updates an option - * @param field the generic pointer to the field to update - * @param orig_field the pointer to the orig field - * @param field_given the pointer to the number of occurrence of this option - * @param prev_given the pointer to the number of occurrence already seen - * @param value the argument for this option (if null no arg was specified) - * @param possible_values the possible values for this option (if specified) - * @param default_value the default value (in case the option only accepts fixed values) - * @param arg_type the type of this option - * @param check_ambiguity @see cmdline_parser_params.check_ambiguity - * @param override @see cmdline_parser_params.override - * @param no_free whether to free a possible previous value - * @param multiple_option whether this is a multiple option - * @param long_opt the corresponding long option - * @param short_opt the corresponding short option (or '-' if none) - * @param additional_error possible further error specification - */ -static -int update_arg(void *field, char **orig_field, - unsigned int *field_given, unsigned int *prev_given, - char *value, const char *possible_values[], - const char *default_value, - cmdline_parser_arg_type arg_type, - int check_ambiguity, int override, - int no_free, int multiple_option, - const char *long_opt, char short_opt, - const char *additional_error) -{ - char *stop_char = 0; - const char *val = value; - int found; - char **string_field; - FIX_UNUSED (field); - - stop_char = 0; - found = 0; - - if (!multiple_option && prev_given && (*prev_given || (check_ambiguity && *field_given))) - { - if (short_opt != '-') - fprintf (stderr, "%s: `--%s' (`-%c') option given more than once%s\n", - package_name, long_opt, short_opt, - (additional_error ? additional_error : "")); - else - fprintf (stderr, "%s: `--%s' option given more than once%s\n", - package_name, long_opt, - (additional_error ? additional_error : "")); - return 1; /* failure */ - } - - FIX_UNUSED (default_value); - - if (field_given && *field_given && ! override) - return 0; - if (prev_given) - (*prev_given)++; - if (field_given) - (*field_given)++; - if (possible_values) - val = possible_values[found]; - - switch(arg_type) { - case ARG_INT: - if (val) *((int *)field) = strtol (val, &stop_char, 0); - break; - case ARG_STRING: - if (val) { - string_field = (char **)field; - if (!no_free && *string_field) - free (*string_field); /* free previous string */ - *string_field = gengetopt_strdup (val); - } - break; - default: - break; - }; - - /* check numeric conversion */ - switch(arg_type) { - case ARG_INT: - if (val && !(stop_char && *stop_char == '\0')) { - fprintf(stderr, "%s: invalid numeric value: %s\n", package_name, val); - return 1; /* failure */ - } - break; - default: - ; - }; - - /* store the original value */ - switch(arg_type) { - case ARG_NO: - break; - default: - if (value && orig_field) { - if (no_free) { - *orig_field = value; - } else { - if (*orig_field) - free (*orig_field); /* free previous string */ - *orig_field = gengetopt_strdup (value); - } - } - }; - - return 0; /* OK */ -} - - -int -cmdline_parser_internal ( - int argc, char **argv, struct gengetopt_args_info *args_info, - struct cmdline_parser_params *params, const char *additional_error) -{ - int c; /* Character of the parsed option. */ - - int error = 0; - struct gengetopt_args_info local_args_info; - - int override; - int initialize; - int check_required; - int check_ambiguity; - - package_name = argv[0]; - - override = params->override; - initialize = params->initialize; - check_required = params->check_required; - check_ambiguity = params->check_ambiguity; - - if (initialize) - cmdline_parser_init (args_info); - - cmdline_parser_init (&local_args_info); - - optarg = 0; - optind = 0; - opterr = params->print_errors; - optopt = '?'; - - while (1) - { - int option_index = 0; - - static struct option long_options[] = { - { "target-port", 1, NULL, 'p' }, - { "output-file", 1, NULL, 'o' }, - { "blacklist-file", 1, NULL, 'b' }, - { "whitelist-file", 1, NULL, 'w' }, - { "output-fields", 1, NULL, 'f' }, - { "max-targets", 1, NULL, 'n' }, - { "max-results", 1, NULL, 'N' }, - { "max-runtime", 1, NULL, 't' }, - { "rate", 1, NULL, 'r' }, - { "bandwidth", 1, NULL, 'B' }, - { "cooldown-time", 1, NULL, 'c' }, - { "seed", 1, NULL, 'e' }, - { "sender-threads", 1, NULL, 'T' }, - { "probes", 1, NULL, 'P' }, - { "dryrun", 0, NULL, 'd' }, - { "source-port", 1, NULL, 's' }, - { "source-ip", 1, NULL, 'S' }, - { "gateway-mac", 1, NULL, 'G' }, - { "interface", 1, NULL, 'i' }, - { "vpn", 0, NULL, 'X' }, - { "probe-module", 1, NULL, 'M' }, - { "output-module", 1, NULL, 'O' }, - { "probe-args", 1, NULL, 0 }, - { "output-args", 1, NULL, 0 }, - { "list-output-modules", 0, NULL, 0 }, - { "list-probe-modules", 0, NULL, 0 }, - { "list-output-fields", 0, NULL, 0 }, - { "config", 1, NULL, 'C' }, - { "quiet", 0, NULL, 'q' }, - { "summary", 0, NULL, 'g' }, - { "verbosity", 1, NULL, 'v' }, - { "help", 0, NULL, 'h' }, - { "version", 0, NULL, 'V' }, - { 0, 0, 0, 0 } - }; - - c = getopt_long (argc, argv, "p:o:b:w:f:n:N:t:r:B:c:e:T:P:ds:S:G:i:XM:O:C:qgv:hV", long_options, &option_index); - - if (c == -1) break; /* Exit from `while (1)' loop. */ - - switch (c) - { - case 'p': /* TCP port number to scan (for SYN scans). */ - - - if (update_arg( (void *)&(args_info->target_port_arg), - &(args_info->target_port_orig), &(args_info->target_port_given), - &(local_args_info.target_port_given), optarg, 0, 0, ARG_INT, - check_ambiguity, override, 0, 0, - "target-port", 'p', - additional_error)) - goto failure; - - break; - case 'o': /* Output file. */ - - - if (update_arg( (void *)&(args_info->output_file_arg), - &(args_info->output_file_orig), &(args_info->output_file_given), - &(local_args_info.output_file_given), optarg, 0, 0, ARG_STRING, - check_ambiguity, override, 0, 0, - "output-file", 'o', - additional_error)) - goto failure; - - break; - case 'b': /* File of subnets to exclude, in CIDR notation, e.g. 192.168.0.0/16. */ - - - if (update_arg( (void *)&(args_info->blacklist_file_arg), - &(args_info->blacklist_file_orig), &(args_info->blacklist_file_given), - &(local_args_info.blacklist_file_given), optarg, 0, 0, ARG_STRING, - check_ambiguity, override, 0, 0, - "blacklist-file", 'b', - additional_error)) - goto failure; - - break; - case 'w': /* File of subnets to constrain scan to, in CIDR notation, e.g. 192.168.0.0/16. */ - - - if (update_arg( (void *)&(args_info->whitelist_file_arg), - &(args_info->whitelist_file_orig), &(args_info->whitelist_file_given), - &(local_args_info.whitelist_file_given), optarg, 0, 0, ARG_STRING, - check_ambiguity, override, 0, 0, - "whitelist-file", 'w', - additional_error)) - goto failure; - - break; - case 'f': /* Fields that should be output in result set. */ - - - if (update_arg( (void *)&(args_info->output_fields_arg), - &(args_info->output_fields_orig), &(args_info->output_fields_given), - &(local_args_info.output_fields_given), optarg, 0, 0, ARG_STRING, - check_ambiguity, override, 0, 0, - "output-fields", 'f', - additional_error)) - goto failure; - - break; - case 'n': /* Cap number of targets to probe (as a number or a percentage of the address space). */ - - - if (update_arg( (void *)&(args_info->max_targets_arg), - &(args_info->max_targets_orig), &(args_info->max_targets_given), - &(local_args_info.max_targets_given), optarg, 0, 0, ARG_STRING, - check_ambiguity, override, 0, 0, - "max-targets", 'n', - additional_error)) - goto failure; - - break; - case 'N': /* Cap number of results to return. */ - - - if (update_arg( (void *)&(args_info->max_results_arg), - &(args_info->max_results_orig), &(args_info->max_results_given), - &(local_args_info.max_results_given), optarg, 0, 0, ARG_INT, - check_ambiguity, override, 0, 0, - "max-results", 'N', - additional_error)) - goto failure; - - break; - case 't': /* Cap length of time for sending packets. */ - - - if (update_arg( (void *)&(args_info->max_runtime_arg), - &(args_info->max_runtime_orig), &(args_info->max_runtime_given), - &(local_args_info.max_runtime_given), optarg, 0, 0, ARG_INT, - check_ambiguity, override, 0, 0, - "max-runtime", 't', - additional_error)) - goto failure; - - break; - case 'r': /* Set send rate in packets/sec. */ - - - if (update_arg( (void *)&(args_info->rate_arg), - &(args_info->rate_orig), &(args_info->rate_given), - &(local_args_info.rate_given), optarg, 0, 0, ARG_INT, - check_ambiguity, override, 0, 0, - "rate", 'r', - additional_error)) - goto failure; - - break; - case 'B': /* Set send rate in bits/second (supports suffixes G, M and K). */ - - - if (update_arg( (void *)&(args_info->bandwidth_arg), - &(args_info->bandwidth_orig), &(args_info->bandwidth_given), - &(local_args_info.bandwidth_given), optarg, 0, 0, ARG_STRING, - check_ambiguity, override, 0, 0, - "bandwidth", 'B', - additional_error)) - goto failure; - - break; - case 'c': /* How long to continue receiving after sending last probe. */ - - - if (update_arg( (void *)&(args_info->cooldown_time_arg), - &(args_info->cooldown_time_orig), &(args_info->cooldown_time_given), - &(local_args_info.cooldown_time_given), optarg, 0, "8", ARG_INT, - check_ambiguity, override, 0, 0, - "cooldown-time", 'c', - additional_error)) - goto failure; - - break; - case 'e': /* Seed used to select address permutation. */ - - - if (update_arg( (void *)&(args_info->seed_arg), - &(args_info->seed_orig), &(args_info->seed_given), - &(local_args_info.seed_given), optarg, 0, 0, ARG_INT, - check_ambiguity, override, 0, 0, - "seed", 'e', - additional_error)) - goto failure; - - break; - case 'T': /* Threads used to send packets. */ - - - if (update_arg( (void *)&(args_info->sender_threads_arg), - &(args_info->sender_threads_orig), &(args_info->sender_threads_given), - &(local_args_info.sender_threads_given), optarg, 0, "1", ARG_INT, - check_ambiguity, override, 0, 0, - "sender-threads", 'T', - additional_error)) - goto failure; - - break; - case 'P': /* Number of probes to send to each IP. */ - - - if (update_arg( (void *)&(args_info->probes_arg), - &(args_info->probes_orig), &(args_info->probes_given), - &(local_args_info.probes_given), optarg, 0, "1", ARG_INT, - check_ambiguity, override, 0, 0, - "probes", 'P', - additional_error)) - goto failure; - - break; - case 'd': /* Don't actually send packets. */ - - - if (update_arg( 0 , - 0 , &(args_info->dryrun_given), - &(local_args_info.dryrun_given), optarg, 0, 0, ARG_NO, - check_ambiguity, override, 0, 0, - "dryrun", 'd', - additional_error)) - goto failure; - - break; - case 's': /* Source port(s) for scan packets. */ - - - if (update_arg( (void *)&(args_info->source_port_arg), - &(args_info->source_port_orig), &(args_info->source_port_given), - &(local_args_info.source_port_given), optarg, 0, 0, ARG_STRING, - check_ambiguity, override, 0, 0, - "source-port", 's', - additional_error)) - goto failure; - - break; - case 'S': /* Source address(es) for scan packets. */ - - - if (update_arg( (void *)&(args_info->source_ip_arg), - &(args_info->source_ip_orig), &(args_info->source_ip_given), - &(local_args_info.source_ip_given), optarg, 0, 0, ARG_STRING, - check_ambiguity, override, 0, 0, - "source-ip", 'S', - additional_error)) - goto failure; - - break; - case 'G': /* Specify gateway MAC address. */ - - - if (update_arg( (void *)&(args_info->gateway_mac_arg), - &(args_info->gateway_mac_orig), &(args_info->gateway_mac_given), - &(local_args_info.gateway_mac_given), optarg, 0, 0, ARG_STRING, - check_ambiguity, override, 0, 0, - "gateway-mac", 'G', - additional_error)) - goto failure; - - break; - case 'i': /* Specify network interface to use. */ - - - if (update_arg( (void *)&(args_info->interface_arg), - &(args_info->interface_orig), &(args_info->interface_given), - &(local_args_info.interface_given), optarg, 0, 0, ARG_STRING, - check_ambiguity, override, 0, 0, - "interface", 'i', - additional_error)) - goto failure; - - break; - case 'X': /* Sends IP packets instead of Ethernet (for VPNs). */ - - - if (update_arg( 0 , - 0 , &(args_info->vpn_given), - &(local_args_info.vpn_given), optarg, 0, 0, ARG_NO, - check_ambiguity, override, 0, 0, - "vpn", 'X', - additional_error)) - goto failure; - - break; - case 'M': /* Select probe module. */ - - - if (update_arg( (void *)&(args_info->probe_module_arg), - &(args_info->probe_module_orig), &(args_info->probe_module_given), - &(local_args_info.probe_module_given), optarg, 0, "tcp_synscan", ARG_STRING, - check_ambiguity, override, 0, 0, - "probe-module", 'M', - additional_error)) - goto failure; - - break; - case 'O': /* Select output module. */ - - - if (update_arg( (void *)&(args_info->output_module_arg), - &(args_info->output_module_orig), &(args_info->output_module_given), - &(local_args_info.output_module_given), optarg, 0, "simple_file", ARG_STRING, - check_ambiguity, override, 0, 0, - "output-module", 'O', - additional_error)) - goto failure; - - break; - case 'C': /* Read a configuration file, which can specify any of these options. */ - - - if (update_arg( (void *)&(args_info->config_arg), - &(args_info->config_orig), &(args_info->config_given), - &(local_args_info.config_given), optarg, 0, "/etc/zmap/zmap.conf", ARG_STRING, - check_ambiguity, override, 0, 0, - "config", 'C', - additional_error)) - goto failure; - - break; - case 'q': /* Do not print status updates. */ - - - if (update_arg( 0 , - 0 , &(args_info->quiet_given), - &(local_args_info.quiet_given), optarg, 0, 0, ARG_NO, - check_ambiguity, override, 0, 0, - "quiet", 'q', - additional_error)) - goto failure; - - break; - case 'g': /* Print configuration and summary at end of scan. */ - - - if (update_arg( 0 , - 0 , &(args_info->summary_given), - &(local_args_info.summary_given), optarg, 0, 0, ARG_NO, - check_ambiguity, override, 0, 0, - "summary", 'g', - additional_error)) - goto failure; - - break; - case 'v': /* Level of log detail (0-5). */ - - - if (update_arg( (void *)&(args_info->verbosity_arg), - &(args_info->verbosity_orig), &(args_info->verbosity_given), - &(local_args_info.verbosity_given), optarg, 0, "3", ARG_INT, - check_ambiguity, override, 0, 0, - "verbosity", 'v', - additional_error)) - goto failure; - - break; - case 'h': /* Print help and exit. */ - - - if (update_arg( 0 , - 0 , &(args_info->help_given), - &(local_args_info.help_given), optarg, 0, 0, ARG_NO, - check_ambiguity, override, 0, 0, - "help", 'h', - additional_error)) - goto failure; - - break; - case 'V': /* Print version and exit. */ - - - if (update_arg( 0 , - 0 , &(args_info->version_given), - &(local_args_info.version_given), optarg, 0, 0, ARG_NO, - check_ambiguity, override, 0, 0, - "version", 'V', - additional_error)) - goto failure; - - break; - - case 0: /* Long option with no short option */ - /* Arguments to pass to probe module. */ - if (strcmp (long_options[option_index].name, "probe-args") == 0) - { - - - if (update_arg( (void *)&(args_info->probe_args_arg), - &(args_info->probe_args_orig), &(args_info->probe_args_given), - &(local_args_info.probe_args_given), optarg, 0, 0, ARG_STRING, - check_ambiguity, override, 0, 0, - "probe-args", '-', - additional_error)) - goto failure; - - } - /* Arguments to pass to output module. */ - else if (strcmp (long_options[option_index].name, "output-args") == 0) - { - - - if (update_arg( (void *)&(args_info->output_args_arg), - &(args_info->output_args_orig), &(args_info->output_args_given), - &(local_args_info.output_args_given), optarg, 0, 0, ARG_STRING, - check_ambiguity, override, 0, 0, - "output-args", '-', - additional_error)) - goto failure; - - } - /* List available output modules. */ - else if (strcmp (long_options[option_index].name, "list-output-modules") == 0) - { - - - if (update_arg( 0 , - 0 , &(args_info->list_output_modules_given), - &(local_args_info.list_output_modules_given), optarg, 0, 0, ARG_NO, - check_ambiguity, override, 0, 0, - "list-output-modules", '-', - additional_error)) - goto failure; - - } - /* List available probe modules. */ - else if (strcmp (long_options[option_index].name, "list-probe-modules") == 0) - { - - - if (update_arg( 0 , - 0 , &(args_info->list_probe_modules_given), - &(local_args_info.list_probe_modules_given), optarg, 0, 0, ARG_NO, - check_ambiguity, override, 0, 0, - "list-probe-modules", '-', - additional_error)) - goto failure; - - } - /* List all fields that can be output by selected probe module. */ - else if (strcmp (long_options[option_index].name, "list-output-fields") == 0) - { - - - if (update_arg( 0 , - 0 , &(args_info->list_output_fields_given), - &(local_args_info.list_output_fields_given), optarg, 0, 0, ARG_NO, - check_ambiguity, override, 0, 0, - "list-output-fields", '-', - additional_error)) - goto failure; - - } - - break; - case '?': /* Invalid option. */ - /* `getopt_long' already printed an error message. */ - goto failure; - - default: /* bug: option not considered. */ - fprintf (stderr, "%s: option unknown: %c%s\n", CMDLINE_PARSER_PACKAGE, c, (additional_error ? additional_error : "")); - abort (); - } /* switch */ - } /* while */ - - - - - cmdline_parser_release (&local_args_info); - - if ( error ) - return (EXIT_FAILURE); - - return 0; - -failure: - - cmdline_parser_release (&local_args_info); - return (EXIT_FAILURE); -} - -#ifndef CONFIG_FILE_LINE_SIZE -#define CONFIG_FILE_LINE_SIZE 2048 -#endif -#define ADDITIONAL_ERROR " in configuration file " - -#define CONFIG_FILE_LINE_BUFFER_SIZE (CONFIG_FILE_LINE_SIZE+3) -/* 3 is for "--" and "=" */ - -static int -_cmdline_parser_configfile (const char *filename, int *my_argc) -{ - FILE* file; - char my_argv[CONFIG_FILE_LINE_BUFFER_SIZE+1]; - char linebuf[CONFIG_FILE_LINE_SIZE]; - int line_num = 0; - int result = 0, equal; - char *fopt, *farg; - char *str_index; - size_t len, next_token; - char delimiter; - - if ((file = fopen(filename, "r")) == 0) - { - fprintf (stderr, "%s: Error opening configuration file '%s'\n", - CMDLINE_PARSER_PACKAGE, filename); - return EXIT_FAILURE; - } - - while ((fgets(linebuf, CONFIG_FILE_LINE_SIZE, file)) != 0) - { - ++line_num; - my_argv[0] = '\0'; - len = strlen(linebuf); - if (len > (CONFIG_FILE_LINE_BUFFER_SIZE-1)) - { - fprintf (stderr, "%s:%s:%d: Line too long in configuration file\n", - CMDLINE_PARSER_PACKAGE, filename, line_num); - result = EXIT_FAILURE; - break; - } - - /* find first non-whitespace character in the line */ - next_token = strspn (linebuf, " \t\r\n"); - str_index = linebuf + next_token; - - if ( str_index[0] == '\0' || str_index[0] == '#') - continue; /* empty line or comment line is skipped */ - - fopt = str_index; - - /* truncate fopt at the end of the first non-valid character */ - next_token = strcspn (fopt, " \t\r\n="); - - if (fopt[next_token] == '\0') /* the line is over */ - { - farg = 0; - equal = 0; - goto noarg; - } - - /* remember if equal sign is present */ - equal = (fopt[next_token] == '='); - fopt[next_token++] = '\0'; - - /* advance pointers to the next token after the end of fopt */ - next_token += strspn (fopt + next_token, " \t\r\n"); - - /* check for the presence of equal sign, and if so, skip it */ - if ( !equal ) - if ((equal = (fopt[next_token] == '='))) - { - next_token++; - next_token += strspn (fopt + next_token, " \t\r\n"); - } - str_index += next_token; - - /* find argument */ - farg = str_index; - if ( farg[0] == '\"' || farg[0] == '\'' ) - { /* quoted argument */ - str_index = strchr (++farg, str_index[0] ); /* skip opening quote */ - if (! str_index) - { - fprintf - (stderr, - "%s:%s:%d: unterminated string in configuration file\n", - CMDLINE_PARSER_PACKAGE, filename, line_num); - result = EXIT_FAILURE; - break; - } - } - else - { /* read up the remaining part up to a delimiter */ - next_token = strcspn (farg, " \t\r\n#\'\""); - str_index += next_token; - } - - /* truncate farg at the delimiter and store it for further check */ - delimiter = *str_index, *str_index++ = '\0'; - - /* everything but comment is illegal at the end of line */ - if (delimiter != '\0' && delimiter != '#') - { - str_index += strspn(str_index, " \t\r\n"); - if (*str_index != '\0' && *str_index != '#') - { - fprintf - (stderr, - "%s:%s:%d: malformed string in configuration file\n", - CMDLINE_PARSER_PACKAGE, filename, line_num); - result = EXIT_FAILURE; - break; - } - } - - noarg: - if (!strcmp(fopt,"include")) { - if (farg && *farg) { - result = _cmdline_parser_configfile(farg, my_argc); - } else { - fprintf(stderr, "%s:%s:%d: include requires a filename argument.\n", - CMDLINE_PARSER_PACKAGE, filename, line_num); - } - continue; - } - len = strlen(fopt); - strcat (my_argv, len > 1 ? "--" : "-"); - strcat (my_argv, fopt); - if (len > 1 && ((farg && *farg) || equal)) - strcat (my_argv, "="); - if (farg && *farg) - strcat (my_argv, farg); - ++(*my_argc); - - cmd_line_list_tmp = (struct line_list *) malloc (sizeof (struct line_list)); - cmd_line_list_tmp->next = cmd_line_list; - cmd_line_list = cmd_line_list_tmp; - cmd_line_list->string_arg = gengetopt_strdup(my_argv); - } /* while */ - - if (file) - fclose(file); - return result; -} - -int -cmdline_parser_configfile ( - const char *filename, - struct gengetopt_args_info *args_info, - int override, int initialize, int check_required) -{ - struct cmdline_parser_params params; - - params.override = override; - params.initialize = initialize; - params.check_required = check_required; - params.check_ambiguity = 0; - params.print_errors = 1; - - return cmdline_parser_config_file (filename, args_info, ¶ms); -} - -int -cmdline_parser_config_file (const char *filename, - struct gengetopt_args_info *args_info, - struct cmdline_parser_params *params) -{ - int i, result; - int my_argc = 1; - char **my_argv_arg; - char *additional_error; - - /* store the program name */ - cmd_line_list_tmp = (struct line_list *) malloc (sizeof (struct line_list)); - cmd_line_list_tmp->next = cmd_line_list; - cmd_line_list = cmd_line_list_tmp; - cmd_line_list->string_arg = gengetopt_strdup (CMDLINE_PARSER_PACKAGE); - - result = _cmdline_parser_configfile(filename, &my_argc); - - if (result != EXIT_FAILURE) { - my_argv_arg = (char **) malloc((my_argc+1) * sizeof(char *)); - cmd_line_list_tmp = cmd_line_list; - - for (i = my_argc - 1; i >= 0; --i) { - my_argv_arg[i] = cmd_line_list_tmp->string_arg; - cmd_line_list_tmp = cmd_line_list_tmp->next; - } - - my_argv_arg[my_argc] = 0; - - additional_error = (char *)malloc(strlen(filename) + strlen(ADDITIONAL_ERROR) + 1); - strcpy (additional_error, ADDITIONAL_ERROR); - strcat (additional_error, filename); - result = - cmdline_parser_internal (my_argc, my_argv_arg, args_info, - params, - additional_error); - - free (additional_error); - free (my_argv_arg); - } - - free_cmd_list(); - if (result == EXIT_FAILURE) - { - cmdline_parser_free (args_info); - exit (EXIT_FAILURE); - } - - return result; -} diff --git a/src/zopt.h b/src/zopt.h deleted file mode 100644 index d5bbead..0000000 --- a/src/zopt.h +++ /dev/null @@ -1,306 +0,0 @@ -/** @file zopt.h - * @brief The header file for the command line option parser - * generated by GNU Gengetopt version 2.22.5 - * http://www.gnu.org/software/gengetopt. - * DO NOT modify this file, since it can be overwritten - * @author GNU Gengetopt by Lorenzo Bettini */ - -#ifndef ZOPT_H -#define ZOPT_H - -/* If we use autoconf. */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include /* for FILE */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#ifndef CMDLINE_PARSER_PACKAGE -/** @brief the program name (used for printing errors) */ -#define CMDLINE_PARSER_PACKAGE "zmap" -#endif - -#ifndef CMDLINE_PARSER_PACKAGE_NAME -/** @brief the complete program name (used for help and version) */ -#define CMDLINE_PARSER_PACKAGE_NAME "zmap" -#endif - -#ifndef CMDLINE_PARSER_VERSION -/** @brief the program version */ -#define CMDLINE_PARSER_VERSION "1.0.0" -#endif - -/** @brief Where the command line options are stored */ -struct gengetopt_args_info -{ - int target_port_arg; /**< @brief TCP port number to scan (for SYN scans). */ - char * target_port_orig; /**< @brief TCP port number to scan (for SYN scans) original value given at command line. */ - const char *target_port_help; /**< @brief TCP port number to scan (for SYN scans) help description. */ - char * output_file_arg; /**< @brief Output file. */ - char * output_file_orig; /**< @brief Output file original value given at command line. */ - const char *output_file_help; /**< @brief Output file help description. */ - char * blacklist_file_arg; /**< @brief File of subnets to exclude, in CIDR notation, e.g. 192.168.0.0/16. */ - char * blacklist_file_orig; /**< @brief File of subnets to exclude, in CIDR notation, e.g. 192.168.0.0/16 original value given at command line. */ - const char *blacklist_file_help; /**< @brief File of subnets to exclude, in CIDR notation, e.g. 192.168.0.0/16 help description. */ - char * whitelist_file_arg; /**< @brief File of subnets to constrain scan to, in CIDR notation, e.g. 192.168.0.0/16. */ - char * whitelist_file_orig; /**< @brief File of subnets to constrain scan to, in CIDR notation, e.g. 192.168.0.0/16 original value given at command line. */ - const char *whitelist_file_help; /**< @brief File of subnets to constrain scan to, in CIDR notation, e.g. 192.168.0.0/16 help description. */ - char * output_fields_arg; /**< @brief Fields that should be output in result set. */ - char * output_fields_orig; /**< @brief Fields that should be output in result set original value given at command line. */ - const char *output_fields_help; /**< @brief Fields that should be output in result set help description. */ - char * max_targets_arg; /**< @brief Cap number of targets to probe (as a number or a percentage of the address space). */ - char * max_targets_orig; /**< @brief Cap number of targets to probe (as a number or a percentage of the address space) original value given at command line. */ - const char *max_targets_help; /**< @brief Cap number of targets to probe (as a number or a percentage of the address space) help description. */ - int max_results_arg; /**< @brief Cap number of results to return. */ - char * max_results_orig; /**< @brief Cap number of results to return original value given at command line. */ - const char *max_results_help; /**< @brief Cap number of results to return help description. */ - int max_runtime_arg; /**< @brief Cap length of time for sending packets. */ - char * max_runtime_orig; /**< @brief Cap length of time for sending packets original value given at command line. */ - const char *max_runtime_help; /**< @brief Cap length of time for sending packets help description. */ - int rate_arg; /**< @brief Set send rate in packets/sec. */ - char * rate_orig; /**< @brief Set send rate in packets/sec original value given at command line. */ - const char *rate_help; /**< @brief Set send rate in packets/sec help description. */ - char * bandwidth_arg; /**< @brief Set send rate in bits/second (supports suffixes G, M and K). */ - char * bandwidth_orig; /**< @brief Set send rate in bits/second (supports suffixes G, M and K) original value given at command line. */ - const char *bandwidth_help; /**< @brief Set send rate in bits/second (supports suffixes G, M and K) help description. */ - int cooldown_time_arg; /**< @brief How long to continue receiving after sending last probe (default='8'). */ - char * cooldown_time_orig; /**< @brief How long to continue receiving after sending last probe original value given at command line. */ - const char *cooldown_time_help; /**< @brief How long to continue receiving after sending last probe help description. */ - int seed_arg; /**< @brief Seed used to select address permutation. */ - char * seed_orig; /**< @brief Seed used to select address permutation original value given at command line. */ - const char *seed_help; /**< @brief Seed used to select address permutation help description. */ - int sender_threads_arg; /**< @brief Threads used to send packets (default='1'). */ - char * sender_threads_orig; /**< @brief Threads used to send packets original value given at command line. */ - const char *sender_threads_help; /**< @brief Threads used to send packets help description. */ - int probes_arg; /**< @brief Number of probes to send to each IP (default='1'). */ - char * probes_orig; /**< @brief Number of probes to send to each IP original value given at command line. */ - const char *probes_help; /**< @brief Number of probes to send to each IP help description. */ - const char *dryrun_help; /**< @brief Don't actually send packets help description. */ - char * source_port_arg; /**< @brief Source port(s) for scan packets. */ - char * source_port_orig; /**< @brief Source port(s) for scan packets original value given at command line. */ - const char *source_port_help; /**< @brief Source port(s) for scan packets help description. */ - char * source_ip_arg; /**< @brief Source address(es) for scan packets. */ - char * source_ip_orig; /**< @brief Source address(es) for scan packets original value given at command line. */ - const char *source_ip_help; /**< @brief Source address(es) for scan packets help description. */ - char * gateway_mac_arg; /**< @brief Specify gateway MAC address. */ - char * gateway_mac_orig; /**< @brief Specify gateway MAC address original value given at command line. */ - const char *gateway_mac_help; /**< @brief Specify gateway MAC address help description. */ - char * interface_arg; /**< @brief Specify network interface to use. */ - char * interface_orig; /**< @brief Specify network interface to use original value given at command line. */ - const char *interface_help; /**< @brief Specify network interface to use help description. */ - const char *vpn_help; /**< @brief Sends IP packets instead of Ethernet (for VPNs) help description. */ - char * probe_module_arg; /**< @brief Select probe module (default='tcp_synscan'). */ - char * probe_module_orig; /**< @brief Select probe module original value given at command line. */ - const char *probe_module_help; /**< @brief Select probe module help description. */ - char * output_module_arg; /**< @brief Select output module (default='simple_file'). */ - char * output_module_orig; /**< @brief Select output module original value given at command line. */ - const char *output_module_help; /**< @brief Select output module help description. */ - char * probe_args_arg; /**< @brief Arguments to pass to probe module. */ - char * probe_args_orig; /**< @brief Arguments to pass to probe module original value given at command line. */ - const char *probe_args_help; /**< @brief Arguments to pass to probe module help description. */ - char * output_args_arg; /**< @brief Arguments to pass to output module. */ - char * output_args_orig; /**< @brief Arguments to pass to output module original value given at command line. */ - const char *output_args_help; /**< @brief Arguments to pass to output module help description. */ - const char *list_output_modules_help; /**< @brief List available output modules help description. */ - const char *list_probe_modules_help; /**< @brief List available probe modules help description. */ - const char *list_output_fields_help; /**< @brief List all fields that can be output by selected probe module help description. */ - char * config_arg; /**< @brief Read a configuration file, which can specify any of these options (default='/etc/zmap/zmap.conf'). */ - char * config_orig; /**< @brief Read a configuration file, which can specify any of these options original value given at command line. */ - const char *config_help; /**< @brief Read a configuration file, which can specify any of these options help description. */ - const char *quiet_help; /**< @brief Do not print status updates help description. */ - const char *summary_help; /**< @brief Print configuration and summary at end of scan help description. */ - int verbosity_arg; /**< @brief Level of log detail (0-5) (default='3'). */ - char * verbosity_orig; /**< @brief Level of log detail (0-5) original value given at command line. */ - const char *verbosity_help; /**< @brief Level of log detail (0-5) help description. */ - const char *help_help; /**< @brief Print help and exit help description. */ - const char *version_help; /**< @brief Print version and exit help description. */ - - unsigned int target_port_given ; /**< @brief Whether target-port was given. */ - unsigned int output_file_given ; /**< @brief Whether output-file was given. */ - unsigned int blacklist_file_given ; /**< @brief Whether blacklist-file was given. */ - unsigned int whitelist_file_given ; /**< @brief Whether whitelist-file was given. */ - unsigned int output_fields_given ; /**< @brief Whether output-fields was given. */ - unsigned int max_targets_given ; /**< @brief Whether max-targets was given. */ - unsigned int max_results_given ; /**< @brief Whether max-results was given. */ - unsigned int max_runtime_given ; /**< @brief Whether max-runtime was given. */ - unsigned int rate_given ; /**< @brief Whether rate was given. */ - unsigned int bandwidth_given ; /**< @brief Whether bandwidth was given. */ - unsigned int cooldown_time_given ; /**< @brief Whether cooldown-time was given. */ - unsigned int seed_given ; /**< @brief Whether seed was given. */ - unsigned int sender_threads_given ; /**< @brief Whether sender-threads was given. */ - unsigned int probes_given ; /**< @brief Whether probes was given. */ - unsigned int dryrun_given ; /**< @brief Whether dryrun was given. */ - unsigned int source_port_given ; /**< @brief Whether source-port was given. */ - unsigned int source_ip_given ; /**< @brief Whether source-ip was given. */ - unsigned int gateway_mac_given ; /**< @brief Whether gateway-mac was given. */ - unsigned int interface_given ; /**< @brief Whether interface was given. */ - unsigned int vpn_given ; /**< @brief Whether vpn was given. */ - unsigned int probe_module_given ; /**< @brief Whether probe-module was given. */ - unsigned int output_module_given ; /**< @brief Whether output-module was given. */ - unsigned int probe_args_given ; /**< @brief Whether probe-args was given. */ - unsigned int output_args_given ; /**< @brief Whether output-args was given. */ - unsigned int list_output_modules_given ; /**< @brief Whether list-output-modules was given. */ - unsigned int list_probe_modules_given ; /**< @brief Whether list-probe-modules was given. */ - unsigned int list_output_fields_given ; /**< @brief Whether list-output-fields was given. */ - unsigned int config_given ; /**< @brief Whether config was given. */ - unsigned int quiet_given ; /**< @brief Whether quiet was given. */ - unsigned int summary_given ; /**< @brief Whether summary was given. */ - unsigned int verbosity_given ; /**< @brief Whether verbosity was given. */ - unsigned int help_given ; /**< @brief Whether help was given. */ - unsigned int version_given ; /**< @brief Whether version was given. */ - -} ; - -/** @brief The additional parameters to pass to parser functions */ -struct cmdline_parser_params -{ - int override; /**< @brief whether to override possibly already present options (default 0) */ - int initialize; /**< @brief whether to initialize the option structure gengetopt_args_info (default 1) */ - int check_required; /**< @brief whether to check that all required options were provided (default 1) */ - int check_ambiguity; /**< @brief whether to check for options already specified in the option structure gengetopt_args_info (default 0) */ - int print_errors; /**< @brief whether getopt_long should print an error message for a bad option (default 1) */ -} ; - -/** @brief the purpose string of the program */ -extern const char *gengetopt_args_info_purpose; -/** @brief the usage string of the program */ -extern const char *gengetopt_args_info_usage; -/** @brief all the lines making the help output */ -extern const char *gengetopt_args_info_help[]; - -/** - * The command line parser - * @param argc the number of command line options - * @param argv the command line options - * @param args_info the structure where option information will be stored - * @return 0 if everything went fine, NON 0 if an error took place - */ -int cmdline_parser (int argc, char **argv, - struct gengetopt_args_info *args_info); - -/** - * The command line parser (version with additional parameters - deprecated) - * @param argc the number of command line options - * @param argv the command line options - * @param args_info the structure where option information will be stored - * @param override whether to override possibly already present options - * @param initialize whether to initialize the option structure my_args_info - * @param check_required whether to check that all required options were provided - * @return 0 if everything went fine, NON 0 if an error took place - * @deprecated use cmdline_parser_ext() instead - */ -int cmdline_parser2 (int argc, char **argv, - struct gengetopt_args_info *args_info, - int override, int initialize, int check_required); - -/** - * The command line parser (version with additional parameters) - * @param argc the number of command line options - * @param argv the command line options - * @param args_info the structure where option information will be stored - * @param params additional parameters for the parser - * @return 0 if everything went fine, NON 0 if an error took place - */ -int cmdline_parser_ext (int argc, char **argv, - struct gengetopt_args_info *args_info, - struct cmdline_parser_params *params); - -/** - * Save the contents of the option struct into an already open FILE stream. - * @param outfile the stream where to dump options - * @param args_info the option struct to dump - * @return 0 if everything went fine, NON 0 if an error took place - */ -int cmdline_parser_dump(FILE *outfile, - struct gengetopt_args_info *args_info); - -/** - * Save the contents of the option struct into a (text) file. - * This file can be read by the config file parser (if generated by gengetopt) - * @param filename the file where to save - * @param args_info the option struct to save - * @return 0 if everything went fine, NON 0 if an error took place - */ -int cmdline_parser_file_save(const char *filename, - struct gengetopt_args_info *args_info); - -/** - * Print the help - */ -void cmdline_parser_print_help(void); -/** - * Print the version - */ -void cmdline_parser_print_version(void); - -/** - * Initializes all the fields a cmdline_parser_params structure - * to their default values - * @param params the structure to initialize - */ -void cmdline_parser_params_init(struct cmdline_parser_params *params); - -/** - * Allocates dynamically a cmdline_parser_params structure and initializes - * all its fields to their default values - * @return the created and initialized cmdline_parser_params structure - */ -struct cmdline_parser_params *cmdline_parser_params_create(void); - -/** - * Initializes the passed gengetopt_args_info structure's fields - * (also set default values for options that have a default) - * @param args_info the structure to initialize - */ -void cmdline_parser_init (struct gengetopt_args_info *args_info); -/** - * Deallocates the string fields of the gengetopt_args_info structure - * (but does not deallocate the structure itself) - * @param args_info the structure to deallocate - */ -void cmdline_parser_free (struct gengetopt_args_info *args_info); - -/** - * The config file parser (deprecated version) - * @param filename the name of the config file - * @param args_info the structure where option information will be stored - * @param override whether to override possibly already present options - * @param initialize whether to initialize the option structure my_args_info - * @param check_required whether to check that all required options were provided - * @return 0 if everything went fine, NON 0 if an error took place - * @deprecated use cmdline_parser_config_file() instead - */ -int cmdline_parser_configfile (const char *filename, - struct gengetopt_args_info *args_info, - int override, int initialize, int check_required); - -/** - * The config file parser - * @param filename the name of the config file - * @param args_info the structure where option information will be stored - * @param params additional parameters for the parser - * @return 0 if everything went fine, NON 0 if an error took place - */ -int cmdline_parser_config_file (const char *filename, - struct gengetopt_args_info *args_info, - struct cmdline_parser_params *params); - -/** - * Checks that all the required options were specified - * @param args_info the structure to check - * @param prog_name the name of the program that will be used to print - * possible errors - * @return - */ -int cmdline_parser_required (struct gengetopt_args_info *args_info, - const char *prog_name); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* ZOPT_H */