59 #include <sys/types.h> 63 #include "../misc/arglists.h" 64 #include "../misc/plugutils.h" 65 #include "../misc/popen.h" 66 #include "../misc/openvas_logging.h" 67 #include "../misc/prefs.h" 68 #include "../base/kb.h" 74 #define dbg(...) do { log_legacy_write (__VA_ARGS__); } while (0) 75 #define err(x) do { perror (x); } while (0) 90 #define MAX_TRACE_HOPS 64 95 #define NMAP_CMD "nmap" 103 #define PREF_TREAT_ALL_HOST_ONLINE "Treat all hosts as online" 108 #define PREF_TRACEROUTE "Trace hop path to each host" 114 #define PREF_NO_DNS "Disable DNS resolution" 119 #define PREF_TCP_SCANNING_TECHNIQUE "TCP scanning technique" 125 #define PREF_SERVICE_SCAN "Service scan" 130 #define PREF_RPC_PORT_SCAN "RPC port scan" 135 #define PREF_IDENTIFY_REMOTE_OS "Identify the remote OS" 141 #define PREF_AGGRESSIVE_OS_DETECT "Aggressive OS detection" 147 #define PREF_FRAGMENT_IP "Fragment IP packets (bypasses firewalls)" 152 #define PREF_SOURCE_PORT "Source port" 157 #define PREF_TIMING_POLICY "Timing policy" 163 #define PREF_HOST_TIMEOUT "Host Timeout (ms)" 169 #define PREF_MIN_RTT_TIMEOUT "Min RTT Timeout (ms)" 175 #define PREF_MAX_RTT_TIMEOUT "Max RTT Timeout (ms)" 181 #define PREF_INITIAL_RTT_TIMEOUT "Initial RTT timeout (ms)" 187 #define PREF_MIN_PARALLELISM "Ports scanned in parallel (min)" 193 #define PREF_MAX_PARALLELISM "Ports scanned in parallel (max)" 199 #define PREF_MIN_HOSTGROUP "Hosts scanned in parallel (min)" 205 #define PREF_MAX_HOSTGROUP "Hosts scanned in parallel (max)" 210 #define PREF_INTERPROBE_DELAY "Minimum wait between probes (ms)" 216 #define PREF_EXCLUDE_HOSTS "Exclude hosts" 221 #define PREF_IMPORT_XML_FILE "File containing XML results" 227 #define OPT_SET "yes" 232 #define OPT_UNSET "no" 350 static void nmap_destroy (
nmap_t * nmap);
356 static int build_cmd_line (
nmap_t * nmap);
357 static int add_arg (
nmap_t * nmap,
const gchar *
name,
const gchar * value);
358 static int add_nse_arguments (
nmap_t * nmap);
359 static gchar *get_script_list (
nmap_t * nmap);
360 static gchar *get_script_args (
nmap_t * nmap);
361 static int add_scantype_arguments (
nmap_t * nmap);
362 static int add_timing_arguments (
nmap_t * nmap);
363 static int add_portrange (
nmap_t * nmap);
364 static void setup_xml_parser (
nmap_t * nmap);
365 static void set_opentag_callbacks (GHashTable * open);
366 static void set_closetag_callbacks (GHashTable * close);
367 static int add_target (
nmap_t * nmap);
368 static void dbg_display_cmdline (
nmap_t * nmap);
374 static void sig_h ();
375 static void sig_c ();
376 static int nmap_run_and_parse (
nmap_t * nmap);
377 static void current_host_reset (
nmap_t * nmap);
378 static void port_destroy (gpointer data, gpointer udata);
379 static void nse_script_destroy (gpointer data, gpointer udata);
380 static void simple_item_destroy (gpointer data, gpointer udata);
381 static void tmphost_add_port (
nmap_t * nmap);
382 static void tmphost_add_nse_hostscript (
nmap_t * nmap, gchar *
name,
384 static void tmphost_add_nse_portscript (
nmap_t * nmap, gchar *
name,
392 xml_start_element (GMarkupParseContext * context,
const gchar * element_name,
393 const gchar ** attribute_names,
394 const gchar ** attribute_values, gpointer user_data,
397 xml_end_element (GMarkupParseContext * context,
const gchar * element_name,
398 gpointer user_data, GError ** error);
401 xml_read_text (GMarkupParseContext * context,
const gchar * text,
402 gsize text_len, gpointer user_data, GError ** error);
408 static void xmltag_open_host (
nmap_t * nmap,
const gchar ** attrnames,
409 const gchar ** attrval);
410 static void xmltag_open_status (
nmap_t * nmap,
const gchar ** attrnames,
411 const gchar ** attrval);
412 static void xmltag_open_address (
nmap_t * nmap,
const gchar ** attrnames,
413 const gchar ** attrval);
414 static void xmltag_open_ports (
nmap_t * nmap,
const gchar ** attrnames,
415 const gchar ** attrval);
416 static void xmltag_open_port (
nmap_t * nmap,
const gchar ** attrnames,
417 const gchar ** attrval);
418 static void xmltag_open_state (
nmap_t * nmap,
const gchar ** attrnames,
419 const gchar ** attrval);
420 static void xmltag_open_service (
nmap_t * nmap,
const gchar ** attrnames,
421 const gchar ** attrval);
422 static void xmltag_open_cpe (
nmap_t * nmap,
const gchar ** attrnames,
423 const gchar ** attrval);
424 static void xmltag_open_hostscript (
nmap_t * nmap,
const gchar ** attrnames,
425 const gchar ** attrval);
426 static void xmltag_open_osmatch (
nmap_t * nmap,
const gchar ** attrnames,
427 const gchar ** attrval);
428 static void xmltag_open_script (
nmap_t * nmap,
const gchar ** attrnames,
429 const gchar ** attrval);
430 static void xmltag_open_tcpsequence (
nmap_t * nmap,
const gchar ** attrnames,
431 const gchar ** attrval);
432 static void xmltag_open_ipidsequence (
nmap_t * nmap,
const gchar ** attrnames,
433 const gchar ** attrval);
434 static void xmltag_open_hop (
nmap_t * nmap,
const gchar ** attrnames,
435 const gchar ** attrval);
436 static void xmltag_open_distance (
nmap_t * nmap,
const gchar ** attrnames,
437 const gchar ** attrval);
443 static void xmltag_close_host (
nmap_t * nmap);
444 static void xmltag_close_ports (
nmap_t * nmap);
445 static void xmltag_close_port (
nmap_t * nmap);
446 static void xmltag_close_cpe (
nmap_t * nmap);
447 static void xmltag_close_hostscript (
nmap_t * nmap);
453 static gchar *get_attr_value (
const gchar *
name,
454 const gchar ** attribute_names,
455 const gchar ** attribute_values);
461 static void current_host_saveall (
nmap_t * nmap);
462 static void save_host_state (
nmap_t * nmap);
463 static void save_open_ports (
nmap_t * nmap);
465 static void save_detected_os (
nmap_t * nmap);
466 static void save_tcpseq_details (
nmap_t * nmap);
467 static void save_ipidseq_details (
nmap_t * nmap);
468 static void save_traceroute_details (
nmap_t * nmap);
469 static void save_portscripts (
nmap_t * nmap);
470 static void save_hostscripts (
nmap_t * nmap);
489 dbg (
"Starting Nmap builtin wrapper\n");
492 if ((nmap = nmap_create (lexic)) == NULL)
494 dbg (
"Unable to initialize Nmap\n");
499 nmap_run_and_parse (nmap);
528 if (!pref || !strlen (pref))
531 if (build_cmd_line (nmap) < 0)
538 dbg (
"Nmap initialized: ");
539 dbg_display_cmdline (nmap);
545 dbg (
"Reading nmap results from file: %s\n", nmap->
filename);
548 setup_xml_parser (nmap);
558 nmap_destroy (
nmap_t * nmap)
567 for (i = 0; i < nmap->
arg_idx; i++)
568 g_free (nmap->
args[i]);
590 build_cmd_line (
nmap_t * nmap)
633 add_arg (nmap,
"-oX",
"-");
635 for (i = 0; options[i].
optname; i++)
643 if (options[i].argument_required)
645 if (strlen (optval) > 0)
646 if (add_arg (nmap, options[i].flag, optval) < 0)
651 if (g_strcmp0 (optval,
OPT_SET) == 0)
652 if (add_arg (nmap, options[i].flag, NULL) < 0)
657 if (add_portrange (nmap) < 0)
661 if (add_arg (nmap,
"-sU", NULL) < 0)
665 if (add_scantype_arguments (nmap) < 0)
669 if (add_timing_arguments (nmap) < 0)
673 if (add_nse_arguments (nmap) < 0)
676 if (add_target (nmap) < 0)
692 add_arg (
nmap_t * nmap,
const gchar *
name,
const gchar * value)
700 nmap->
args = (gchar **) g_malloc (
sizeof (gchar **));
708 (nmap->
arg_idx + 2) * sizeof (gchar *));
715 (nmap->
arg_idx + 3) * sizeof (gchar *));
735 add_nse_arguments (
nmap_t * nmap)
737 gchar *pscript, *pargs;
739 pscript = get_script_list (nmap);
740 pargs = get_script_args (nmap);
741 if (strlen (pscript))
744 add_arg (nmap,
"--script", pscript);
747 add_arg (nmap,
"--script-args", pargs);
764 get_script_list (
nmap_t * nmap)
768 gchar **scriptv, *scriptstr;
774 top = res = kb_item_get_all (
kb,
"NmapNSE/scripts");
777 scriptv = (gchar **) g_realloc (scriptv, (i + 1) *
sizeof (gchar *));
778 scriptv[i++] = g_strdup (res->
v_str);
782 scriptv = (gchar **) g_realloc (scriptv, (i + 1) *
sizeof (gchar *));
787 scriptstr = g_strjoinv (
",", scriptv);
789 for (i = 0; scriptv[i]; i++)
806 get_script_args (
nmap_t * nmap)
810 gchar **argv, *argstr;
815 top = res = kb_item_get_all (
kb,
"NmapNSE/arguments");
818 argv = (gchar **) g_realloc (argv, (i + 1) *
sizeof (gchar *));
819 argv[i++] = g_strdup (res->
v_str);
823 argv = (gchar **) g_realloc (argv, (i + 1) *
sizeof (gchar *));
828 argstr = g_strjoinv (
",", argv);
830 for (i = 0; argv[i]; i++)
845 add_scantype_arguments (
nmap_t * nmap)
850 {
"connect()",
"-sT", FALSE},
851 {
"SYN",
"-sS", FALSE},
852 {
"ACK",
"-sA", FALSE},
853 {
"FIN",
"-sF", FALSE},
854 {
"Window",
"-sW", FALSE},
855 {
"Maimon",
"-sM", FALSE},
856 {
"Xmas tree",
"-sX", FALSE},
857 {
"Null",
"-sN", FALSE},
858 {
"SCTP Init",
"-sY", FALSE},
859 {
"SCTP COOKIE_ECHO",
"-sZ", FALSE},
867 for (i = 0; flagmap[i].
optname; i++)
868 if (g_strcmp0 (scantype, flagmap[i].optname) == 0)
869 return add_arg (nmap, flagmap[i].flag, NULL);
882 add_timing_arguments (
nmap_t * nmap)
887 {
"Paranoid",
"-T0", FALSE},
888 {
"Sneaky",
"-T1", FALSE},
889 {
"Polite",
"-T2", FALSE},
890 {
"Normal",
"-T3", FALSE},
891 {
"Aggressive",
"-T4", FALSE},
892 {
"Insane",
"-T5", FALSE},
900 for (i = 0; flagmap[i].
optname; i++)
901 if (g_strcmp0 (timing, flagmap[i].optname) == 0)
902 return add_arg (nmap, flagmap[i].flag, NULL);
915 add_portrange (
nmap_t * nmap)
917 const char *portrange =
prefs_get (
"port_range");
921 dbg (
"Invalid environment: unavailable \"port_range\"\n");
925 return add_arg (nmap,
"-p", portrange);
934 setup_xml_parser (
nmap_t * nmap)
943 nmap->
parser.
opentag = g_hash_table_new (g_str_hash, g_str_equal);
944 nmap->
parser.
closetag = g_hash_table_new (g_str_hash, g_str_equal);
956 set_opentag_callbacks (GHashTable * open)
961 void (*func) (
nmap_t *,
const gchar **,
const gchar **);
963 {
"hop", xmltag_open_hop},
964 {
"osmatch", xmltag_open_osmatch},
965 {
"port", xmltag_open_port},
966 {
"service", xmltag_open_service},
967 {
"cpe", xmltag_open_cpe},
968 {
"state", xmltag_open_state},
969 {
"status", xmltag_open_status},
970 {
"host", xmltag_open_host},
971 {
"address", xmltag_open_address},
972 {
"script", xmltag_open_script},
973 {
"ports", xmltag_open_ports},
974 {
"distance", xmltag_open_distance},
975 {
"hostscript", xmltag_open_hostscript},
976 {
"tcpsequence", xmltag_open_tcpsequence},
977 {
"ipidsequence", xmltag_open_ipidsequence},
982 for (i = 0; callbacks[i].tag; i++)
983 g_hash_table_insert (open, (
void *) callbacks[i].tag, callbacks[i].func);
992 set_closetag_callbacks (GHashTable * close)
999 {
"host", xmltag_close_host},
1000 {
"ports", xmltag_close_ports},
1001 {
"port", xmltag_close_port},
1002 {
"cpe", xmltag_close_cpe},
1003 {
"hostscript", xmltag_close_hostscript},
1008 for (i = 0; callbacks[i].tag; i++)
1009 g_hash_table_insert (close, (
void *) callbacks[i].tag, callbacks[i].func);
1020 add_target (
nmap_t * nmap)
1028 dbg (
"Invalid environment: unavailable \"globals\"\n");
1035 dbg (
"Invalid environment: unavailable \"network_targets\"\n");
1039 return add_arg (nmap, network, NULL);
1048 dbg_display_cmdline (
nmap_t * nmap)
1052 for (i = 0; nmap->
args[i]; i++)
1068 kill (pid, SIGKILL);
1078 waitpid (pid, NULL, WNOHANG);
1090 nmap_run_and_parse (
nmap_t * nmap)
1096 void (*old_sig_t) () = NULL;
1099 GMarkupParseContext *ctx;
1100 const GMarkupParser callbacks = {
1112 fproc = fopen (nmap->
filename,
"r");
1117 old_sig_t = signal (SIGTERM, sig_h);
1127 err (
"nmap_run_and_parse()");
1131 ctx = g_markup_parse_context_new (&callbacks, 0, nmap, NULL);
1133 while ((len = fread (chunk,
sizeof (gchar),
CHUNK_LEN, fproc)) > 0)
1137 if (!g_markup_parse_context_parse (ctx, chunk, len, &
err))
1141 dbg (
"g_markup_parse_context_parse() failed (%s)\n",
1147 dbg (
"Error occurred while parsing: %s\n", chunk);
1155 if (nmap->
filename && ferror (fproc))
1157 err (
"nmap_run_and_parse()");
1170 signal (SIGTERM, old_sig_t);
1174 g_markup_parse_context_free (ctx);
1179 #define list_free(list, dtor, udata) do { \ 1182 g_slist_foreach (list, (GFunc) dtor, udata); \ 1183 g_slist_free (list); \ 1194 current_host_reset (
nmap_t * nmap)
1228 port_destroy (gpointer data, gpointer udata)
1238 g_free (port->
proto);
1240 g_free (port->
state);
1259 nse_script_destroy (gpointer data, gpointer udata)
1266 g_free (script->
name);
1282 simple_item_destroy (gpointer data, gpointer udata)
1293 tmphost_add_port (
nmap_t * nmap)
1297 newport = g_malloc0 (
sizeof (
struct nmap_port));
1310 tmphost_add_nse_hostscript (
nmap_t * nmap, gchar *
name, gchar * output)
1350 xml_start_element (GMarkupParseContext * context,
const gchar * element_name,
1351 const gchar ** attribute_names,
1352 const gchar ** attribute_values, gpointer user_data,
1356 void (*callback) (
nmap_t *,
const gchar **,
const gchar **);
1358 callback = g_hash_table_lookup (nmap->
parser.
opentag, element_name);
1360 callback (nmap, attribute_names, attribute_values);
1373 xml_end_element (GMarkupParseContext * context,
const gchar * element_name,
1374 gpointer user_data, GError ** error)
1377 void (*callback) (
nmap_t *);
1379 callback = g_hash_table_lookup (nmap->
parser.
closetag, element_name);
1395 xml_read_text (GMarkupParseContext * context,
const gchar * text,
1396 gsize text_len, gpointer user_data, GError ** error)
1407 tmpbuff = g_strdup_printf (
"%s%s", nmap->
parser.
rbuff, text);
1425 xmltag_open_host (
nmap_t * nmap,
const gchar ** attrnames,
1426 const gchar ** attrval)
1439 xmltag_open_status (
nmap_t * nmap,
const gchar ** attrnames,
1440 const gchar ** attrval)
1443 dbg (
"Error: opening <status> tag out of host description\n");
1445 nmap->
tmphost.
state = get_attr_value (
"state", attrnames, attrval);
1456 xmltag_open_address (
nmap_t * nmap,
const gchar ** attrnames,
1457 const gchar ** attrval)
1460 dbg (
"Error: opening <address> tag out of host description\n");
1462 nmap->
tmphost.
addr = get_attr_value (
"addr", attrnames, attrval);
1473 xmltag_open_ports (
nmap_t * nmap,
const gchar ** attrnames,
1474 const gchar ** attrval)
1487 xmltag_open_port (
nmap_t * nmap,
const gchar ** attrnames,
1488 const gchar ** attrval)
1491 nmap->
tmpport.
proto = get_attr_value (
"protocol", attrnames, attrval);
1492 nmap->
tmpport.
portno = get_attr_value (
"portid", attrnames, attrval);
1503 xmltag_open_state (
nmap_t * nmap,
const gchar ** attrnames,
1504 const gchar ** attrval)
1507 dbg (
"Error: opening <state> tag out of port description\n");
1509 nmap->
tmpport.
state = get_attr_value (
"state", attrnames, attrval);
1520 xmltag_open_service (
nmap_t * nmap,
const gchar ** attrnames,
1521 const gchar ** attrval)
1524 dbg (
"Error: opening <service> tag out of port description\n");
1527 gchar *product, *version, *extrainfo;
1529 nmap->
tmpport.
service = get_attr_value (
"name", attrnames, attrval);
1532 product = get_attr_value (
"product", attrnames, attrval);
1533 version = get_attr_value (
"version", attrnames, attrval);
1534 extrainfo = get_attr_value (
"extrainfo", attrnames, attrval);
1536 if (product || version || extrainfo)
1537 #define PRINT_NOT_NULL(x) ((x) ? (x) : "") 1542 #undef PRINT_NOT_NULL 1559 xmltag_open_cpe (
nmap_t * nmap,
const gchar ** attrnames,
1560 const gchar ** attrval)
1579 xmltag_open_hostscript (
nmap_t * nmap,
const gchar ** attrnames,
1580 const gchar ** attrval)
1593 xmltag_open_osmatch (
nmap_t * nmap,
const gchar ** attrnames,
1594 const gchar ** attrval)
1598 confstr = get_attr_value (
"accuracy", attrnames, attrval);
1603 confidence = atoi (confstr);
1607 nmap->
tmphost.
best_os = get_attr_value (
"name", attrnames, attrval);
1623 xmltag_open_script (
nmap_t * nmap,
const gchar ** attrnames,
1624 const gchar ** attrval)
1631 name = get_attr_value (
"id", attrnames, attrval);
1632 output = get_attr_value (
"output", attrnames, attrval);
1635 tmphost_add_nse_portscript (nmap,
name,
output);
1637 tmphost_add_nse_hostscript (nmap,
name,
output);
1648 xmltag_open_tcpsequence (
nmap_t * nmap,
const gchar ** attrnames,
1649 const gchar ** attrval)
1656 get_attr_value (
"difficulty", attrnames, attrval);
1667 xmltag_open_ipidsequence (
nmap_t * nmap,
const gchar ** attrnames,
1668 const gchar ** attrval)
1673 nmap->
tmphost.
ipidseq = get_attr_value (
"class", attrnames, attrval);
1684 xmltag_open_distance (
nmap_t * nmap,
const gchar ** attrnames,
1685 const gchar ** attrval)
1692 diststr = get_attr_value (
"value", attrnames, attrval);
1708 xmltag_open_hop (
nmap_t * nmap,
const gchar ** attrnames,
1709 const gchar ** attrval)
1717 ttl_str = get_attr_value (
"ttl", attrnames, attrval);
1718 ttl = atoi (ttl_str) - 1;
1734 dbg (
"Inconsistent results: duplicate traceroute information!");
1746 xmltag_close_host (
nmap_t * nmap)
1749 current_host_saveall (nmap);
1750 current_host_reset (nmap);
1759 xmltag_close_ports (
nmap_t * nmap)
1770 xmltag_close_port (
nmap_t * nmap)
1773 tmphost_add_port (nmap);
1783 xmltag_close_cpe (
nmap_t * nmap)
1806 xmltag_close_hostscript (
nmap_t * nmap)
1822 get_attr_value (
const gchar *
name,
const gchar **
1823 attribute_names,
const gchar ** attribute_values)
1827 for (i = 0; attribute_names[i]; i++)
1828 if (g_strcmp0 (attribute_names[i],
name) == 0)
1829 return g_strdup (attribute_values[i]);
1839 current_host_saveall (
nmap_t * nmap)
1842 save_host_state (nmap);
1845 save_open_ports (nmap);
1848 save_detected_os (nmap);
1851 save_tcpseq_details (nmap);
1852 save_ipidseq_details (nmap);
1855 save_traceroute_details (nmap);
1858 save_hostscripts (nmap);
1859 save_portscripts (nmap);
1868 save_host_state (
nmap_t * nmap)
1875 g_snprintf (key,
sizeof (key),
"%s/Host/State", nmap->
tmphost.
addr);
1886 save_open_ports (
nmap_t * nmap)
1890 for (pport = nmap->
tmphost.
ports; pport; pport = g_slist_next (pport))
1895 if (strncmp (p->
state,
"open", 4) == 0)
1899 g_snprintf (key,
sizeof (key),
"%s/Ports/%s/%s", nmap->
tmphost.
addr,
1904 register_service (nmap, p);
1926 if (g_strcmp0 (p->
proto,
"tcp") == 0)
1927 g_snprintf (key,
sizeof (key),
"%s/Services/%s", nmap->
tmphost.
addr,
1930 g_snprintf (key,
sizeof (key),
"%s/Services/%s/%s", nmap->
tmphost.
addr,
1936 g_snprintf (key,
sizeof (key),
"%s/Known/%s/%s", nmap->
tmphost.
addr,
1943 g_snprintf (key,
sizeof (key),
"%s/Version/%s/%s", nmap->
tmphost.
addr,
1952 g_snprintf (key,
sizeof (key),
"%s/App/%s/%s", nmap->
tmphost.
addr,
1955 for (pcpe = p->
version_cpes; pcpe; pcpe = g_slist_next (pcpe))
1967 save_detected_os (
nmap_t * nmap)
1973 g_snprintf (key,
sizeof (key),
"%s/Host/OS", nmap->
tmphost.
addr);
1982 g_snprintf (key,
sizeof (key),
"%s/Host/CPE", nmap->
tmphost.
addr);
1984 for (pcpe = nmap->
tmphost.
os_cpes; pcpe; pcpe = g_slist_next (pcpe))
1996 save_tcpseq_details (
nmap_t * nmap)
2003 g_snprintf (key,
sizeof (key),
"%s/Host/tcp_seq_index", nmap->
tmphost.
addr);
2006 g_snprintf (key,
sizeof (key),
"%s/Host/tcp_seq_difficulty",
2017 save_ipidseq_details (
nmap_t * nmap)
2024 g_snprintf (key,
sizeof (key),
"%s/Host/ipidseq", nmap->
tmphost.
addr);
2035 save_traceroute_details (
nmap_t * nmap)
2043 g_snprintf (key,
sizeof (key),
"%s/Host/distance", nmap->
tmphost.
addr);
2049 g_snprintf (key,
sizeof (key),
"%s/Host/traceroute/hops/%d",
2053 g_snprintf (key,
sizeof (key),
"%s/Host/traceroute/hops/%d/rtt",
2057 g_snprintf (key,
sizeof (key),
"%s/Host/traceroute/hops/%d/host",
2069 save_portscripts (
nmap_t * nmap)
2073 for (pport = nmap->
tmphost.
ports; pport; pport = g_slist_next (pport))
2078 port = (
struct nmap_port *) pport->data;
2081 pscript = g_slist_next (pscript))
2084 gchar key[128], portspec[16];
2086 script = (
struct nse_script *) pscript->data;
2088 g_snprintf (key,
sizeof (key),
"%s/NmapNSE/results/%s",
2091 g_snprintf (portspec,
sizeof (portspec),
"%s/%s", port->
proto,
2095 g_strlcat (key,
"/",
sizeof (key));
2096 g_strlcat (key, portspec,
sizeof (key));
2108 save_hostscripts (
nmap_t * nmap)
2113 pscript = g_slist_next (pscript))
2118 script = (
struct nse_script *) pscript->data;
2119 g_snprintf (key,
sizeof (key),
"%s/NmapNSE/results/hostscripts/%s",
Handle states for XML parsing.
#define PREF_TREAT_ALL_HOST_ONLINE
Plugin parameter description: skip alive hosts discovery phase.
FILE * openvas_popen4(const char *cmd, char *const args[], pid_t *ppid, int inice)
#define PREF_MAX_RTT_TIMEOUT
Plugin parameter description: probe round trip time hint (maximal value).
#define NMAP_CMD
Nmap command to call.
void kb_item_free(struct kb_item *)
Release a KB item (or a list).
#define PREF_RPC_PORT_SCAN
Plugin parameter description: perform RPC port scan.
#define PREF_INTERPROBE_DELAY
Plugin parameter description: set idle interval between probes.
void plug_set_key(struct arglist *args, char *name, int type, const void *value)
struct traceroute_hop trace[MAX_TRACE_HOPS]
Knowledge base item (defined by name, type (int/char*) and value). Implemented as a singly linked lis...
#define PREF_EXCLUDE_HOSTS
Plugin parameter description: comma-separated list of hosts to exclude from the scan.
#define PREF_MIN_PARALLELISM
Plugin parameter description: force minimum number of parallel active probes.
#define PREF_AGGRESSIVE_OS_DETECT
Plugin parameter description: guess OS from closest match if necessary.
#define PREF_TIMING_POLICY
Plugin parameter description: select timing template.
#define PREF_TCP_SCANNING_TECHNIQUE
Plugin parameter description: TCP port scanning technique to use.
gboolean argument_required
gchar * tcpseq_difficulty
#define OPT_SET
Checkbox value (when set).
Describe a detected hop on the route.
#define PREF_TRACEROUTE
Plugin parameter description: perform traceroute.
#define PREF_HOST_TIMEOUT
Plugin parameter description: give up on host after this time elapsed.
#define PREF_MAX_HOSTGROUP
Plugin parameter description: force maximum number of hosts to scan in parallel.
#define PREF_SOURCE_PORT
Plugin parameter description: set source port.
Describe an nmap command line option.
const gchar * prefs_get(const gchar *key)
Get a string preference value via a key.
const char * get_plugin_preference_fname(struct arglist *desc, const char *filename)
Get the file name of a plugins preference that is of type "file".
#define PREF_MIN_RTT_TIMEOUT
Plugin parameter description: probe round trip time hint (minimal value)
kb_t plug_get_kb(struct arglist *args)
#define PRINT_NOT_NULL(x)
#define PREF_IDENTIFY_REMOTE_OS
Plugin parameter description: perform remote OS fingerprinting.
#define PREF_IMPORT_XML_FILE
Plugin parameter description: import XML file.
Top-level KB. This is to be inherited by KB implementations.
int openvas_pclose(FILE *fp, pid_t pid)
static void(*)(*) old_sig_i()
#define PREF_INITIAL_RTT_TIMEOUT
Plugin parameter description: probe round trip time hint (initial value).
tree_cell * plugin_run_nmap(lex_ctxt *lexic)
Run the nmap_net subsystem.
#define PREF_NO_DNS
Plugin parameter description: don't perform reverse resolution on discovered IP addresses.
#define list_free(list, dtor, udata)
#define CHUNK_LEN
Input chunks size for the XML parser.
#define PREF_SERVICE_SCAN
Plugin parameter description: perform service/version detection scan.
struct nmap_parser parser
#define PREF_MAX_PARALLELISM
Plugin parameter description: force maximum number of parallel active probes.
#define MAX_TRACE_HOPS
Maximum number of hops to the target.
static void(*)(*) old_sig_c
#define PREF_FRAGMENT_IP
Plugin parameter description: try to evade defense by fragmenting IP packets.
Handle the results of a NSE script.
struct arglist * script_infos
#define PREF_MIN_HOSTGROUP
Plugin parameter description: force minimum number of hosts to scan in parallel.
void * arg_get_value(struct arglist *args, const char *name)
Main nmap execution handler.
char * get_plugin_preference(const char *oid, const char *name)