int main(int argc, char **argv) { GList *o; void *plugin_data = NULL; OSyncError *error = NULL; if (!g_thread_supported()) g_thread_init(NULL); parse_args(argc, argv); /* Set defaults if not set on the command line */ if (!syncgroup) syncgroup = strdup("osyncplugin"); if (pluginlist) { if (!plugin_list(&error)) goto error; goto success; } if (!init(&error)) goto error; for (o=cmdlist; o; o = o->next) if (!run_command((Command *) o->data, &plugin_data, &error)) goto error_disconnect_and_finalize; success: if (plugin_env) osync_plugin_env_unref(plugin_env); for (o=cmdlist; o; o = o->next) { Command *cmd = o->data; free_command(&cmd); } return EXIT_SUCCESS; error_disconnect_and_finalize: if (plugin_data) disconnect(NULL, NULL); //error_finalize: finalize_plugin(&plugin_data); //error_free_plugin_env: if (plugin_env) osync_plugin_env_unref(plugin_env); for (o=cmdlist; o; o = o->next) { Command *cmd = o->data; free_command(&cmd); } error: fprintf(stderr, "Error: %s\n", osync_error_print(&error)); osync_error_unref(&error); return EXIT_FAILURE; }
void set_plugin(char *plugin) { if(!strcasecmp(plugin, "list")) { plugin_list(); clean_exit(0); } GBL_OPTIONS->plugin = strdup(plugin); }
/** * Console command handler: dmm list */ static void cmd_dmm_list(const idCmdArgs& args) { int zombies = 0; if (args.argc > 2) { if (!cstrcmp(args.argv[2], "zombies")) { CONSOLE_PRINTF(CINFO INVALID_PARAMS("list")); return; } else zombies = 1; } plugin_list(zombies); }
int main(int argc, char **argv, char **envp) { int pid, c; const char *prj; char buf[4096]; char buf2[4096]; int flag_d = 0; int __optind = 0; int nscr = 0; char *ptr; environ = envp; radare_init(); while ((c = getopt(argc, argv, "l:fs:hb:wLvuVnxi:e:p:d")) != -1) { switch( c ) { case 'd': flag_d = 1; __optind = optind; break; case 'i': config.script[nscr++] = optarg; config.script[nscr] = NULL; break; case 'f': config.block_size = 0; break; case 'n': config.noscript = 1; break; case 'p': config_set("file.project", optarg); break; case 'w': config_set("file.write", "true"); break; case 's': config.seek = (ut64)get_offset(optarg); if (config.seek < 0) config.seek = (ut64)0; config_set("dbg.bep", optarg); break; case 'l': plugin_registry(optarg); break; case 'L': return plugin_list(); case 'b': config.block_size = (size_t)get_offset(optarg); config.block = (unsigned char *)realloc(config.block, config.block_size); config_set_i("cfg.bsize", config.block_size); break; case 'V': printf("radare %s %dbit on %s%dbit "TARGET" %s%s\n", VERSION, sizeof(ut64)*8, (LIL_ENDIAN)?"le":"be", sizeof(void *)*8, (DEBUGGER)? "dbg " :"", (HAVE_GUI)? "gui" :""); return 0; case 'u': config.unksize = 1; break; case 'x': config.mode = MODE_HEXDUMP; break; case 'e': config_eval(optarg); break; case 'h': help_message(0); return 0; case 'v': config_set("cfg.verbose", "false"); break; default: return 1; } } if (optind < argc) config.file = argv[optind++]; if (!flag_d && optind < argc) eprintf("warning: Only the first file has been opened.\n"); /* TODO: we have to recheck this :) */ if (flag_d) { optind--; config.debug = 1; prj = config_get("file.project"); if (__optind==argc) { if (prj == NULL) return help_message(1); snprintf(buf2, 4095, "dbg://%s", project_get_file(prj) ); config.file = strdup(buf2); } else { // XXX : overflowable, must use strcatdup or stgh like that // TODO: support hex pids too pid = atoi(argv[optind]); buf[0]='\0'; /* by process-id */ if (pid > 0) { sprintf(buf2, "pid://%d", pid); config.file = strdup(buf2); } else { #if DEBUGGER /* by program path */ for(c=optind; argv[c]; c++) { char *arg = argv[c]; if (c == optind) arg = (char *)resolve_path(argv[c]); ps.argv[c-optind] = arg; strcat(buf, arg); if (argv[c+1]) strcat(buf, " "); } ps.args = strdup(buf); if (strstr(buf, "://")) strcpy(buf2, buf); else sprintf(buf2, "dbg://%s", buf); config.file = strdup(buf2); ps.filename = strdup(buf2); //ptr = strchr(config.file, ' '); //if (ptr) *ptr = '\0'; //config.file = strdup(buf2); #else eprintf("TODO: Needs debugger\n"); #endif } } config_set("cfg.debug", "true"); } plugin_load(); return radare_go(); }
void parse_options(int argc, char **argv) { int c; static struct option long_options[] = { { "help", no_argument, NULL, 'h' }, { "version", no_argument, NULL, 'v' }, { "iface", required_argument, NULL, 'i' }, { "iflist", no_argument, NULL, 'I' }, { "netmask", required_argument, NULL, 'n' }, { "write", required_argument, NULL, 'w' }, { "read", required_argument, NULL, 'r' }, { "pcapfilter", required_argument, NULL, 'f' }, { "reversed", no_argument, NULL, 'R' }, { "proto", required_argument, NULL, 't' }, { "plugin", required_argument, NULL, 'P' }, { "filter", required_argument, NULL, 'F' }, { "superquiet", no_argument, NULL, 'Q' }, { "quiet", no_argument, NULL, 'q' }, { "script", required_argument, NULL, 's' }, { "silent", no_argument, NULL, 'z' }, { "unoffensive", no_argument, NULL, 'u' }, { "load-hosts", required_argument, NULL, 'j' }, { "save-hosts", required_argument, NULL, 'k' }, { "wep-key", required_argument, NULL, 'W' }, { "config", required_argument, NULL, 'a' }, { "dns", no_argument, NULL, 'd' }, { "regex", required_argument, NULL, 'e' }, { "visual", required_argument, NULL, 'V' }, { "ext-headers", no_argument, NULL, 'E' }, { "log", required_argument, NULL, 'L' }, { "log-info", required_argument, NULL, 'l' }, { "log-msg", required_argument, NULL, 'm' }, { "compress", no_argument, NULL, 'c' }, { "text", no_argument, NULL, 'T' }, { "curses", no_argument, NULL, 'C' }, { "gtk", no_argument, NULL, 'G' }, { "daemon", no_argument, NULL, 'D' }, { "mitm", required_argument, NULL, 'M' }, { "only-mitm", no_argument, NULL, 'o' }, { "bridge", required_argument, NULL, 'B' }, { "promisc", no_argument, NULL, 'p' }, { 0 , 0 , 0 , 0} }; #ifdef HAVE_GTK if (strcmp(argv[0], "ettercap-gtk") == 0) select_gtk_interface(); #endif #ifdef HAVE_NCURSES if (strcmp(argv[0], "ettercap-curses") == 0) select_curses_interface(); #endif if (strcmp(argv[0], "ettercap-text") == 0) select_text_interface(); for (c = 0; c < argc; c++) DEBUG_MSG("parse_options -- [%d] [%s]", c, argv[c]); /* OPTIONS INITIALIZATION */ GBL_PCAP->promisc = 1; GBL_FORMAT = &ascii_format; /* OPTIONS INITIALIZED */ optind = 0; while ((c = getopt_long (argc, argv, "a:B:CchDdEe:F:f:GhIi:j:k:L:l:M:m:n:oP:pQqiRr:s:Tt:UuV:vW:w:z", long_options, (int *)0)) != EOF) { switch (c) { case 'M': GBL_OPTIONS->mitm = 1; if (mitm_set(optarg) != ESUCCESS) FATAL_ERROR("MITM method '%s' not supported...\n", optarg); break; case 'o': GBL_OPTIONS->only_mitm = 1; //select_text_interface(); break; case 'B': GBL_OPTIONS->iface_bridge = strdup(optarg); set_bridge_sniff(); break; case 'p': GBL_PCAP->promisc = 0; break; case 'T': select_text_interface(); break; case 'C': #ifdef HAVE_NCURSES select_curses_interface(); #else fprintf(stdout, "\nncurses-interface not supported.\n\n"); clean_exit(-1); #endif break; case 'G': #ifdef HAVE_GTK select_gtk_interface(); #else fprintf(stdout, "\nGTK-Interface not supported.\n\n"); clean_exit(-1); #endif break; case 'D': select_daemon_interface(); break; case 'R': GBL_OPTIONS->reversed = 1; break; case 't': GBL_OPTIONS->proto = strdup(optarg); break; case 'P': /* user has requested the list */ if (!strcasecmp(optarg, "list")) { plugin_list(); clean_exit(0); } /* else set the plugin */ GBL_OPTIONS->plugin = strdup(optarg); break; case 'i': GBL_OPTIONS->iface = strdup(optarg); break; case 'I': /* this option is only useful in the text interface */ select_text_interface(); GBL_OPTIONS->iflist = 1; break; case 'n': GBL_OPTIONS->netmask = strdup(optarg); break; case 'r': /* we don't want to scan the lan while reading from file */ GBL_OPTIONS->silent = 1; GBL_OPTIONS->read = 1; GBL_OPTIONS->pcapfile_in = strdup(optarg); break; case 'w': GBL_OPTIONS->write = 1; GBL_OPTIONS->pcapfile_out = strdup(optarg); break; case 'f': GBL_PCAP->filter = strdup(optarg); break; case 'F': if (filter_load_file(optarg, GBL_FILTERS) != ESUCCESS) FATAL_ERROR("Cannot load filter file \"%s\"", optarg); break; case 'L': if (set_loglevel(LOG_PACKET, optarg) == -EFATAL) clean_exit(-EFATAL); break; case 'l': if (set_loglevel(LOG_INFO, optarg) == -EFATAL) clean_exit(-EFATAL); break; case 'm': if (set_msg_loglevel(LOG_TRUE, optarg) == -EFATAL) clean_exit(-EFATAL); break; case 'c': GBL_OPTIONS->compress = 1; break; case 'e': if (set_regex(optarg) == -EFATAL) clean_exit(-EFATAL); break; case 'Q': GBL_OPTIONS->superquiet = 1; /* no break, quiet must be enabled */ case 'q': GBL_OPTIONS->quiet = 1; break; case 's': GBL_OPTIONS->script = strdup(optarg); break; case 'z': GBL_OPTIONS->silent = 1; break; case 'u': GBL_OPTIONS->unoffensive = 1; break; case 'd': GBL_OPTIONS->resolve = 1; break; case 'j': GBL_OPTIONS->silent = 1; GBL_OPTIONS->load_hosts = 1; GBL_OPTIONS->hostsfile = strdup(optarg); break; case 'k': GBL_OPTIONS->save_hosts = 1; GBL_OPTIONS->hostsfile = strdup(optarg); break; case 'V': if (set_format(optarg) != ESUCCESS) clean_exit(-EFATAL); break; case 'E': GBL_OPTIONS->ext_headers = 1; break; case 'W': set_wep_key(optarg); break; case 'a': GBL_CONF->file = strdup(optarg); break; case 'h': ec_usage(); break; case 'v': printf("%s %s\n", GBL_PROGRAM, GBL_VERSION); clean_exit(0); break; case ':': // missing parameter fprintf(stdout, "\nTry `%s --help' for more options.\n\n", GBL_PROGRAM); clean_exit(-1); break; case '?': // unknown option fprintf(stdout, "\nTry `%s --help' for more options.\n\n", GBL_PROGRAM); clean_exit(-1); break; } } DEBUG_MSG("parse_options: options parsed"); /* TARGET1 and TARGET2 parsing */ if (argv[optind]) { GBL_OPTIONS->target1 = strdup(argv[optind]); DEBUG_MSG("TARGET1: %s", GBL_OPTIONS->target1); if (argv[optind+1]) { GBL_OPTIONS->target2 = strdup(argv[optind+1]); DEBUG_MSG("TARGET2: %s", GBL_OPTIONS->target2); } } /* create the list form the TARGET format (MAC/IPrange/PORTrange) */ compile_display_filter(); DEBUG_MSG("parse_options: targets parsed"); /* check for other options */ if (GBL_SNIFF->start == NULL) set_unified_sniff(); if (GBL_OPTIONS->read && GBL_PCAP->filter) FATAL_ERROR("Cannot read from file and set a filter on interface"); if (GBL_OPTIONS->read && GBL_SNIFF->type != SM_UNIFIED ) FATAL_ERROR("You can read from a file ONLY in unified sniffing mode !"); if (GBL_OPTIONS->mitm && GBL_SNIFF->type != SM_UNIFIED ) FATAL_ERROR("You can't do mitm attacks in bridged sniffing mode !"); if (GBL_SNIFF->type == SM_BRIDGED && GBL_PCAP->promisc == 0) FATAL_ERROR("During bridged sniffing the iface must be in promisc mode !"); if (GBL_OPTIONS->quiet && GBL_UI->type != UI_TEXT) FATAL_ERROR("The quiet option is useful only with text only UI"); if (GBL_OPTIONS->load_hosts && GBL_OPTIONS->save_hosts) FATAL_ERROR("Cannot load and save at the same time the hosts list..."); if (GBL_OPTIONS->unoffensive && GBL_OPTIONS->mitm) FATAL_ERROR("Cannot use mitm attacks in unoffensive mode"); if (GBL_OPTIONS->read && GBL_OPTIONS->mitm) FATAL_ERROR("Cannot use mitm attacks while reading from file"); if (GBL_UI->init == NULL) { FATAL_ERROR("Please select an User Interface"); } /* force text interface for only mitm attack */ //if (GBL_OPTIONS->only_mitm) { // if (GBL_OPTIONS->mitm) // select_text_interface(); // else // FATAL_ERROR("Only mitm requires at least one mitm method"); //} DEBUG_MSG("parse_options: options combination looks good"); return; }
void parse_options(int argc, char **argv) { int c; static struct option long_options[] = { { "help", no_argument, NULL, 'h' }, { "version", no_argument, NULL, 'v' }, { "update", no_argument, NULL, 'U' }, { "iface", required_argument, NULL, 'i' }, { "lifaces", no_argument, NULL, 'I' }, { "netmask", required_argument, NULL, 'n' }, { "address", required_argument, NULL, 'A' }, { "write", required_argument, NULL, 'w' }, { "read", required_argument, NULL, 'r' }, { "pcapfilter", required_argument, NULL, 'f' }, { "reversed", no_argument, NULL, 'R' }, { "proto", required_argument, NULL, 't' }, { "plugin", required_argument, NULL, 'P' }, { "filter", required_argument, NULL, 'F' }, { "superquiet", no_argument, NULL, 'Q' }, { "quiet", no_argument, NULL, 'q' }, { "script", required_argument, NULL, 's' }, { "silent", no_argument, NULL, 'z' }, { "unoffensive", no_argument, NULL, 'u' }, { "nosslmitm", no_argument, NULL, 'S' }, { "load-hosts", required_argument, NULL, 'j' }, { "save-hosts", required_argument, NULL, 'k' }, { "wep-key", required_argument, NULL, 'W' }, { "config", required_argument, NULL, 'a' }, { "dns", no_argument, NULL, 'd' }, { "regex", required_argument, NULL, 'e' }, { "visual", required_argument, NULL, 'V' }, { "ext-headers", no_argument, NULL, 'E' }, { "log", required_argument, NULL, 'L' }, { "log-info", required_argument, NULL, 'l' }, { "log-msg", required_argument, NULL, 'm' }, { "compress", no_argument, NULL, 'c' }, { "text", no_argument, NULL, 'T' }, { "curses", no_argument, NULL, 'C' }, { "daemon", no_argument, NULL, 'D' }, { "gtk", no_argument, NULL, 'G' }, { "mitm", required_argument, NULL, 'M' }, { "only-mitm", no_argument, NULL, 'o' }, { "bridge", required_argument, NULL, 'B' }, { "broadcast", required_argument, NULL, 'b' }, { "promisc", no_argument, NULL, 'p' }, { "gateway", required_argument, NULL, 'Y' }, { "certificate", required_argument, NULL, 0 }, { "private-key", required_argument, NULL, 0 }, { 0 , 0 , 0 , 0} }; for (c = 0; c < argc; c++) DEBUG_MSG("parse_options -- [%d] [%s]", c, argv[c]); /* OPTIONS INITIALIZATION */ GBL_PCAP->promisc = 1; GBL_FORMAT = &ascii_format; GBL_OPTIONS->ssl_mitm = 1; GBL_OPTIONS->broadcast = 0; GBL_OPTIONS->ssl_cert = NULL; GBL_OPTIONS->ssl_pkey = NULL; /* OPTIONS INITIALIZED */ optind = 0; int option_index = 0; while ((c = getopt_long (argc, argv, "A:a:bB:CchDdEe:F:f:GhIi:j:k:L:l:M:m:n:oP:pQqiRr:s:STt:UuV:vW:w:Y:z", long_options, &option_index)) != EOF) { /* used for parsing arguments */ char *opt_end = optarg; while (opt_end && *opt_end) opt_end++; /* enable a loaded filter script? */ uint8_t f_enabled = 1; switch (c) { case 'M': GBL_OPTIONS->mitm = 1; if (mitm_set(optarg) != ESUCCESS) FATAL_ERROR("MITM method '%s' not supported...\n", optarg); break; case 'o': GBL_OPTIONS->only_mitm = 1; //select_text_interface(); break; case 'b': GBL_OPTIONS->broadcast = 1; break; case 'B': GBL_OPTIONS->iface_bridge = strdup(optarg); set_bridge_sniff(); break; case 'p': GBL_PCAP->promisc = 0; break; case 'T': select_text_interface(); break; case 'C': select_curses_interface(); break; case 'G': select_gtk_interface(); break; case 'D': select_daemon_interface(); break; case 'R': GBL_OPTIONS->reversed = 1; break; case 't': GBL_OPTIONS->proto = strdup(optarg); break; case 'P': /* user has requested the list */ if (!strcasecmp(optarg, "list")) { plugin_list(); clean_exit(0); } /* else set the plugin */ GBL_OPTIONS->plugin = strdup(optarg); break; case 'i': GBL_OPTIONS->iface = strdup(optarg); break; case 'I': /* this option is only useful in the text interface */ select_text_interface(); GBL_OPTIONS->lifaces = 1; break; case 'Y': GBL_OPTIONS->secondary = parse_iflist(optarg); break; case 'n': GBL_OPTIONS->netmask = strdup(optarg); break; case 'A': GBL_OPTIONS->address = strdup(optarg); break; case 'r': /* we don't want to scan the lan while reading from file */ GBL_OPTIONS->silent = 1; GBL_OPTIONS->read = 1; GBL_OPTIONS->pcapfile_in = strdup(optarg); break; case 'w': GBL_OPTIONS->write = 1; GBL_OPTIONS->pcapfile_out = strdup(optarg); break; case 'f': GBL_PCAP->filter = strdup(optarg); break; case 'F': /* is there a :0 or :1 appended to the filename? */ if ( (opt_end-optarg >=2) && *(opt_end-2) == ':' ) { *(opt_end-2) = '\0'; f_enabled = !( *(opt_end-1) == '0' ); } if (filter_load_file(optarg, GBL_FILTERS, f_enabled) != ESUCCESS) FATAL_ERROR("Cannot load filter file \"%s\"", optarg); break; case 'L': if (set_loglevel(LOG_PACKET, optarg) == -EFATAL) clean_exit(-EFATAL); break; case 'l': if (set_loglevel(LOG_INFO, optarg) == -EFATAL) clean_exit(-EFATAL); break; case 'm': if (set_msg_loglevel(LOG_TRUE, optarg) == -EFATAL) clean_exit(-EFATAL); break; case 'c': GBL_OPTIONS->compress = 1; break; case 'e': if (set_regex(optarg) == -EFATAL) clean_exit(-EFATAL); break; case 'Q': GBL_OPTIONS->superquiet = 1; /* no break, quiet must be enabled */ case 'q': GBL_OPTIONS->quiet = 1; break; case 's': GBL_OPTIONS->script = strdup(optarg); break; case 'z': GBL_OPTIONS->silent = 1; break; case 'u': GBL_OPTIONS->unoffensive = 1; break; case 'S': GBL_OPTIONS->ssl_mitm = 0; break; case 'd': GBL_OPTIONS->resolve = 1; break; case 'j': GBL_OPTIONS->silent = 1; GBL_OPTIONS->load_hosts = 1; GBL_OPTIONS->hostsfile = strdup(optarg); break; case 'k': GBL_OPTIONS->save_hosts = 1; GBL_OPTIONS->hostsfile = strdup(optarg); break; case 'V': if (set_format(optarg) != ESUCCESS) clean_exit(-EFATAL); break; case 'E': GBL_OPTIONS->ext_headers = 1; break; case 'W': set_wep_key(optarg); break; case 'a': GBL_CONF->file = strdup(optarg); break; case 'U': /* load the conf for the connect timeout value */ load_conf(); global_update(); /* NOT REACHED */ break; case 'h': ec_usage(); break; case 'v': printf("%s %s\n", GBL_PROGRAM, GBL_VERSION); clean_exit(0); break; /* Certificate and private key options */ case 0: if (!strcmp(long_options[option_index].name, "certificate")) { GBL_OPTIONS->ssl_cert = strdup(optarg); } else if (!strcmp(long_options[option_index].name, "private-key")) { GBL_OPTIONS->ssl_pkey = strdup(optarg); } else { fprintf(stdout, "\nTry `%s --help' for more options.\n\n", GBL_PROGRAM); clean_exit(-1); } break; case ':': // missing parameter fprintf(stdout, "\nTry `%s --help' for more options.\n\n", GBL_PROGRAM); clean_exit(-1); break; case '?': // unknown option fprintf(stdout, "\nTry `%s --help' for more options.\n\n", GBL_PROGRAM); clean_exit(-1); break; } } DEBUG_MSG("parse_options: options parsed"); /* TARGET1 and TARGET2 parsing */ if (argv[optind]) { GBL_OPTIONS->target1 = strdup(argv[optind]); DEBUG_MSG("TARGET1: %s", GBL_OPTIONS->target1); if (argv[optind+1]) { GBL_OPTIONS->target2 = strdup(argv[optind+1]); DEBUG_MSG("TARGET2: %s", GBL_OPTIONS->target2); } } /* create the list form the TARGET format (MAC/IPrange/PORTrange) */ compile_display_filter(); DEBUG_MSG("parse_options: targets parsed"); /* check for other options */ if (GBL_SNIFF->start == NULL) set_unified_sniff(); if (GBL_OPTIONS->read && GBL_PCAP->filter) FATAL_ERROR("Cannot read from file and set a filter on interface"); if (GBL_OPTIONS->read && GBL_SNIFF->type != SM_UNIFIED ) FATAL_ERROR("You can read from a file ONLY in unified sniffing mode !"); if (GBL_OPTIONS->mitm && GBL_SNIFF->type != SM_UNIFIED ) FATAL_ERROR("You can't do mitm attacks in bridged sniffing mode !"); if (GBL_SNIFF->type == SM_BRIDGED && GBL_PCAP->promisc == 0) FATAL_ERROR("During bridged sniffing the iface must be in promisc mode !"); if (GBL_OPTIONS->quiet && GBL_UI->type != UI_TEXT) FATAL_ERROR("The quiet option is useful only with text only UI"); if (GBL_OPTIONS->load_hosts && GBL_OPTIONS->save_hosts) FATAL_ERROR("Cannot load and save at the same time the hosts list..."); if (GBL_OPTIONS->unoffensive && GBL_OPTIONS->mitm) FATAL_ERROR("Cannot use mitm attacks in unoffensive mode"); if (GBL_OPTIONS->read && GBL_OPTIONS->mitm) FATAL_ERROR("Cannot use mitm attacks while reading from file"); if (GBL_UI->init == NULL) FATAL_ERROR("Please select an User Interface"); /* force text interface for only mitm attack */ /* Do not select text interface for only MiTM mode if (GBL_OPTIONS->only_mitm) { if (GBL_OPTIONS->mitm) select_text_interface(); else FATAL_ERROR("Only mitm requires at least one mitm method"); } */ DEBUG_MSG("parse_options: options combination looks good"); return; }