home *** CD-ROM | disk | FTP | other *** search
/ Steganos Hacker Tools / SHT151.iso / programme / scanner / nmapNTsp1 / Win_2000.exe / nmapNT-src / nmapfe / nmapfe.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-08  |  38.1 KB  |  875 lines

  1. /* Author: Zach
  2.  * Mail: key@aye.net
  3.  * IRC: EFNet as zach` or key in #bastards or #neatoelito
  4.  * AIM (Aol): GoldMatrix
  5.  *
  6.  * Change the source as you wish, but leave these comments..
  7.  *
  8.  * Long live Aol and pr: Phreak. <grins>
  9.  */
  10. #if MISSING_GTK
  11. #error "Your system does not appear to have GTK (www.gtk.org) installed.  Thus the Nmap X Front End will not compile.  You should still be able to use Nmap the normal way (via text console).  GUIs are for wimps anyway :)"
  12. #else
  13.  
  14. #include <gtk/gtk.h>
  15. #include <gdk/gdkkeysyms.h>
  16. #include <unistd.h>
  17. #include <stdio.h>
  18.  
  19. #include "nmapfe.h"
  20. #include "nmapfe_sig.h"
  21.  
  22.  
  23. /* Keep this global */
  24. int our_uid;
  25.  
  26. struct MyWidgets *MW;
  27. int view_type = 1;
  28. GtkWidget*
  29. get_widget                             (GtkWidget       *widget,
  30.                                         gchar           *widget_name)
  31. {
  32.   GtkWidget *found_widget;
  33.  
  34.   if (widget->parent)
  35.     widget = gtk_widget_get_toplevel (widget);
  36.   found_widget = (GtkWidget*) gtk_object_get_data (GTK_OBJECT (widget),
  37.                                                    widget_name);
  38.   if (!found_widget)
  39.     g_warning ("Widget not found: %s", widget_name);
  40.   return found_widget;
  41. }
  42.  
  43. /* This is an internally used function to set notebook tab widgets. */
  44. void
  45. set_notebook_tab                       (GtkWidget       *notebook,
  46.                                         gint             page_num,
  47.                                         GtkWidget       *widget)
  48. {
  49.   GtkNotebookPage *page;
  50.   GtkWidget *notebook_page;
  51.  
  52.   page = (GtkNotebookPage*) g_list_nth (GTK_NOTEBOOK (notebook)->children, page_num)->data;
  53.   notebook_page = page->child;
  54.   gtk_widget_ref (notebook_page);
  55.   gtk_notebook_remove_page (GTK_NOTEBOOK (notebook), page_num);
  56.   gtk_notebook_insert_page (GTK_NOTEBOOK (notebook), notebook_page,
  57.                             widget, page_num);
  58.   gtk_widget_unref (notebook_page);
  59. }
  60.  
  61. GtkWidget*
  62. create_main_win ()
  63. {
  64.   GtkWidget *main_win;
  65.   GtkWidget *fixed1;
  66.   GSList *fixed1_group = NULL;
  67.   GSList *ping_group = NULL;
  68.   GtkWidget *vscroll;
  69.   GtkWidget *exit_me;
  70.   GtkWidget *hseparator2;
  71.   GtkWidget *label2;
  72.   GtkWidget *menubar1;
  73.   GtkWidget *File;
  74.   GtkWidget *menu5;
  75. /*New for 1.0*/
  76.   GtkWidget *view_m;
  77.   GtkWidget *View_Main;
  78.   GtkWidget *Trad;
  79.   GtkWidget *CTrad;
  80.   /*GtkWidget *Tree;*/
  81.   GtkWidget *machine;
  82.   GtkWidget *extra;
  83.   GtkWidget *extra_menu;
  84. /*End new*/
  85.   GtkWidget *Save_Log;
  86.   GtkWidget *Open_Log;
  87.   GtkWidget *separator1;
  88.   GtkWidget *Close;
  89.   GtkWidget *Help_Main;
  90.   GtkWidget *menu6;
  91.   GtkWidget *menu7;
  92.   GtkWidget *hbox1;
  93.   GtkWidget *Help;
  94.   GtkWidget *Other;
  95.   GtkWidget *Get_Nmap_Version;
  96.   GtkWidget *separator2;
  97.   GtkWidget *About;
  98.   GtkWidget *vseparator1;
  99.   GtkWidget *hseparator1;
  100.   GtkWidget *label3;
  101.   GtkWidget *vbox2;
  102.   GtkWidget *label1;
  103.   char title[256];
  104.  
  105.   our_uid = getuid();
  106.  
  107.   main_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  108.   gtk_object_set_data (GTK_OBJECT (main_win), "main_win", main_win);
  109.   /* Need to integrate with nmapfe so I can use snprintf() */
  110.   sprintf(title, "Nmap Front End v%s", VERSION);
  111.   gtk_window_set_title (GTK_WINDOW (main_win), title);
  112.   gtk_window_position (GTK_WINDOW (main_win), GTK_WIN_POS_CENTER);
  113.   
  114.   vbox2 = gtk_vbox_new (FALSE, 0);
  115.   gtk_object_set_data (GTK_OBJECT (main_win), "vbox2", vbox2);
  116.   gtk_widget_show (vbox2);
  117.   gtk_container_add (GTK_CONTAINER (main_win), vbox2);
  118.   
  119.   fixed1 = gtk_fixed_new ();
  120.   gtk_object_set_data (GTK_OBJECT (main_win), "fixed1", fixed1);
  121.   gtk_widget_show (fixed1);
  122.   gtk_box_pack_start (GTK_BOX (vbox2), fixed1, FALSE, TRUE, 0);
  123.   gtk_widget_set_usize (fixed1, -2, 233);
  124.  
  125.   hbox1 = gtk_hbox_new (FALSE, 0);
  126.   gtk_object_set_data (GTK_OBJECT (main_win), "hbox1", hbox1);
  127.   gtk_widget_show (hbox1);
  128.   gtk_box_pack_start (GTK_BOX (vbox2), hbox1, TRUE, TRUE, 0);
  129.  
  130.   MW->output = gtk_text_new (NULL, NULL);
  131.   gtk_object_set_data (GTK_OBJECT (main_win), "output", MW->output);
  132.   gtk_widget_show (MW->output);
  133.   gtk_box_pack_start (GTK_BOX (hbox1), MW->output, TRUE, TRUE, 0);
  134.   gtk_text_set_word_wrap(GTK_TEXT(MW->output), 1);
  135.   gtk_widget_set_usize (MW->output, 464, 248);
  136.   gtk_widget_realize (MW->output);
  137.   
  138.   vscroll = gtk_vscrollbar_new (GTK_TEXT (MW->output)->vadj);
  139.   gtk_object_set_data (GTK_OBJECT (main_win), "vscroll", vscroll);
  140.   gtk_widget_show (vscroll);
  141.   gtk_box_pack_end (GTK_BOX (hbox1), vscroll, FALSE, FALSE, 0);
  142.   
  143.   MW->host_text = gtk_entry_new ();
  144.   gtk_object_set_data (GTK_OBJECT (main_win), "host_text", MW->host_text);
  145.   gtk_widget_show (MW->host_text);
  146.   gtk_fixed_put (GTK_FIXED (fixed1), MW->host_text, 56, 32);
  147.   gtk_widget_set_usize (MW->host_text, 272, 22);
  148.   GTK_WIDGET_SET_FLAGS (MW->host_text, GTK_CAN_DEFAULT);
  149.   gtk_widget_grab_focus (MW->host_text);
  150.   gtk_widget_grab_default (MW->host_text);
  151.   gtk_entry_set_text (GTK_ENTRY (MW->host_text), "127.0.0.1");
  152.   gtk_signal_connect(GTK_OBJECT(MW->host_text), "changed",
  153.             GTK_SIGNAL_FUNC(display_nmap_command_callback), NULL);
  154.  
  155.   MW->connect_scan = gtk_radio_button_new_with_label (fixed1_group, "connect()");
  156.   fixed1_group = gtk_radio_button_group (GTK_RADIO_BUTTON (MW->connect_scan));
  157.   gtk_object_set_data (GTK_OBJECT (main_win), "connect", MW->connect_scan);
  158.   gtk_widget_show (MW->connect_scan);
  159.   gtk_fixed_put (GTK_FIXED (fixed1), MW->connect_scan, 8, 84);
  160.   gtk_signal_connect(GTK_OBJECT(MW->connect_scan), "released",
  161.             GTK_SIGNAL_FUNC(validate_option_change), NULL);
  162.   gtk_widget_set_usize (MW->connect_scan, 104, 19);
  163.  
  164. if(our_uid == 0) {
  165.   MW->syn_scan = gtk_radio_button_new_with_label (fixed1_group, "SYN Stealth");
  166.   fixed1_group = gtk_radio_button_group (GTK_RADIO_BUTTON (MW->syn_scan));
  167.   gtk_object_set_data (GTK_OBJECT (main_win), "syn", MW->syn_scan);
  168.   gtk_widget_show (MW->syn_scan);
  169.   gtk_fixed_put (GTK_FIXED (fixed1), MW->syn_scan, 8, 101);
  170.   gtk_signal_connect(GTK_OBJECT(MW->syn_scan), "released",
  171.             GTK_SIGNAL_FUNC(validate_option_change), NULL);
  172.   gtk_widget_set_usize (MW->syn_scan, 104, 19);
  173.   gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (MW->syn_scan), TRUE);
  174. } /* end uid check */
  175.  
  176.   MW->ping_scan = gtk_radio_button_new_with_label (fixed1_group, "Ping Sweep");
  177.   fixed1_group = gtk_radio_button_group (GTK_RADIO_BUTTON (MW->ping_scan));
  178.   gtk_object_set_data (GTK_OBJECT (main_win), "ping", MW->ping_scan);
  179.   gtk_widget_show (MW->ping_scan);
  180.   gtk_fixed_put (GTK_FIXED (fixed1), MW->ping_scan, 8, 118);
  181.   gtk_signal_connect(GTK_OBJECT(MW->ping_scan), "released",
  182.             GTK_SIGNAL_FUNC(validate_option_change), NULL);
  183.   gtk_widget_set_usize (MW->ping_scan, 104, 19);
  184.  
  185. if (our_uid == 0){
  186.   MW->udp_scan = gtk_radio_button_new_with_label (fixed1_group, "UDP Port Scan");
  187.   fixed1_group = gtk_radio_button_group (GTK_RADIO_BUTTON (MW->udp_scan));
  188.   gtk_object_set_data (GTK_OBJECT (main_win), "udp", MW->udp_scan);
  189.   gtk_widget_show (MW->udp_scan);
  190.   gtk_fixed_put (GTK_FIXED (fixed1), MW->udp_scan, 8, 136);
  191.   gtk_signal_connect(GTK_OBJECT(MW->udp_scan), "released",
  192.             GTK_SIGNAL_FUNC(validate_option_change), NULL);
  193.   gtk_widget_set_usize (MW->udp_scan, 104, 17);
  194.  
  195.   MW->fin_scan = gtk_radio_button_new_with_label (fixed1_group, "FIN Stealth");
  196.   fixed1_group = gtk_radio_button_group (GTK_RADIO_BUTTON (MW->fin_scan));
  197.   gtk_object_set_data (GTK_OBJECT (main_win), "fin", MW->fin_scan);
  198.   gtk_widget_show (MW->fin_scan);
  199.   gtk_fixed_put (GTK_FIXED (fixed1), MW->fin_scan, 8, 152);
  200.   gtk_signal_connect(GTK_OBJECT(MW->fin_scan), "released",
  201.             GTK_SIGNAL_FUNC(validate_option_change), NULL);
  202.   gtk_widget_set_usize (MW->fin_scan, 104, 19);
  203. } /*end uid check*/
  204.  
  205.   MW->resolve_check = gtk_check_button_new_with_label ("Don't Resolve");
  206.   gtk_object_set_data (GTK_OBJECT (main_win), "resolve_check", MW->resolve_check);
  207.   gtk_widget_show (MW->resolve_check);
  208.   gtk_fixed_put (GTK_FIXED (fixed1), MW->resolve_check, 136, 80);
  209.   gtk_widget_set_usize (MW->resolve_check, 104, 24);
  210.   gtk_signal_connect(GTK_OBJECT(MW->resolve_check), "released",
  211.             GTK_SIGNAL_FUNC(display_nmap_command_callback), NULL);
  212.  
  213.   MW->fast_check = gtk_check_button_new_with_label ("Fast Scan");
  214.   gtk_object_set_data (GTK_OBJECT (main_win), "fast_check", MW->fast_check);
  215.   gtk_widget_show (MW->fast_check);
  216.   gtk_fixed_put (GTK_FIXED (fixed1), MW->fast_check, 136, 104);
  217.   gtk_widget_set_usize (MW->fast_check, 104, 24);
  218.   gtk_signal_connect(GTK_OBJECT(MW->fast_check), "released",
  219.             GTK_SIGNAL_FUNC(validate_option_change), NULL);
  220.  
  221.  
  222.   MW->range_check = gtk_check_button_new_with_label ("Range of Ports:");
  223.   gtk_object_set_data (GTK_OBJECT (main_win), "range_check", MW->range_check);
  224.   gtk_widget_show (MW->range_check);
  225.   gtk_fixed_put (GTK_FIXED (fixed1), MW->range_check, 136, 128);
  226.   gtk_widget_set_usize (MW->range_check, 104, 24);
  227.   gtk_signal_connect(GTK_OBJECT(MW->range_check), "released",
  228.             GTK_SIGNAL_FUNC(validate_option_change), NULL);
  229.  
  230.  
  231.   MW->range_text = gtk_entry_new ();
  232.   gtk_object_set_data (GTK_OBJECT (main_win), "range_text", MW->range_text);
  233.   gtk_widget_show (MW->range_text);
  234.   gtk_fixed_put (GTK_FIXED (fixed1), MW->range_text, 136, 152);
  235.   gtk_widget_set_usize (MW->range_text, 104, 21);
  236.   gtk_signal_connect (GTK_OBJECT(MW->range_text), "changed",
  237.               GTK_SIGNAL_FUNC(entry_toggle_checkbox), MW->range_check);
  238.  
  239.  
  240.   MW->decoy_check = gtk_check_button_new_with_label ("Use Decoy(s):");
  241.   gtk_object_set_data (GTK_OBJECT (main_win), "decoy_check", MW->decoy_check);
  242.   if (our_uid == 0)
  243.     gtk_widget_show (MW->decoy_check);
  244.   gtk_fixed_put (GTK_FIXED (fixed1), MW->decoy_check, 136, 175);
  245.   gtk_widget_set_usize (MW->decoy_check, 104, 16);
  246.   gtk_signal_connect(GTK_OBJECT(MW->decoy_check), "released",
  247.              GTK_SIGNAL_FUNC(validate_option_change), NULL);
  248.  
  249.   MW->decoy_text = gtk_entry_new ();
  250.   gtk_object_set_data (GTK_OBJECT (main_win), "decoy_text", MW->decoy_text);
  251.   if (our_uid == 0)
  252.     gtk_widget_show (MW->decoy_text);
  253.   gtk_fixed_put (GTK_FIXED (fixed1), MW->decoy_text, 136, 192);  
  254.   gtk_widget_set_usize (MW->decoy_text, 104, 21);
  255.   gtk_signal_connect (GTK_OBJECT(MW->decoy_text), "changed",
  256.               GTK_SIGNAL_FUNC(entry_toggle_checkbox), MW->decoy_check);
  257.  
  258.  
  259.   MW->tcp_check = gtk_radio_button_new_with_label (ping_group, "TCP Ping");
  260.   ping_group = gtk_radio_button_group (GTK_RADIO_BUTTON (MW->tcp_check));
  261.   gtk_object_set_data (GTK_OBJECT (main_win), "tcp_check", MW->tcp_check);
  262.   gtk_widget_show (MW->tcp_check);
  263.   gtk_fixed_put (GTK_FIXED (fixed1), MW->tcp_check, 248, 80);
  264.   gtk_widget_set_usize (MW->tcp_check, 99, 24);
  265.   gtk_signal_connect(GTK_OBJECT(MW->tcp_check), "released",
  266.             GTK_SIGNAL_FUNC(display_nmap_command_callback), NULL);
  267.  
  268.   MW->icmp_check = gtk_radio_button_new_with_label (ping_group, "ICMP Ping");
  269.   ping_group = gtk_radio_button_group (GTK_RADIO_BUTTON (MW->icmp_check));
  270.   gtk_object_set_data (GTK_OBJECT (main_win), "icmp_check", MW->icmp_check);
  271.     if(our_uid == 0)
  272.       gtk_widget_show (MW->icmp_check);
  273.   gtk_fixed_put (GTK_FIXED (fixed1), MW->icmp_check, 248, 128);
  274.   gtk_widget_set_usize (MW->icmp_check, 99, 24);
  275.   gtk_signal_connect(GTK_OBJECT(MW->icmp_check), "released",
  276.             GTK_SIGNAL_FUNC(display_nmap_command_callback), NULL);
  277.  
  278.  
  279.   MW->tcpicmp_check = gtk_radio_button_new_with_label (ping_group, "TCP&ICMP");
  280.   ping_group = gtk_radio_button_group (GTK_RADIO_BUTTON (MW->tcpicmp_check));
  281.   gtk_object_set_data (GTK_OBJECT (main_win), "tcpicmp_check", MW->tcpicmp_check);
  282.     if(our_uid == 0){
  283.       gtk_widget_show (MW->tcpicmp_check);
  284.       /*      gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(MW->tcpicmp_check), 1);*/
  285.       gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(MW->tcpicmp_check), TRUE);
  286.       }
  287.   gtk_fixed_put (GTK_FIXED (fixed1), MW->tcpicmp_check, 248, 104);
  288.   gtk_widget_set_usize (MW->tcpicmp_check, 99, 24);
  289.   gtk_signal_connect(GTK_OBJECT(MW->tcpicmp_check), "released",
  290.             GTK_SIGNAL_FUNC(display_nmap_command_callback), NULL);
  291.  
  292.  
  293.   MW->ping_check = gtk_radio_button_new_with_label (ping_group, "Don't Ping");
  294.   ping_group = gtk_radio_button_group (GTK_RADIO_BUTTON (MW->ping_check));
  295.   gtk_object_set_data (GTK_OBJECT (main_win), "ping_check", MW->ping_check);
  296.   gtk_widget_show (MW->ping_check);
  297.   gtk_fixed_put (GTK_FIXED (fixed1), MW->ping_check, 248, 150);
  298.   gtk_widget_set_usize (MW->ping_check, 99, 24);
  299.   gtk_signal_connect(GTK_OBJECT(MW->ping_check), "released",
  300.             GTK_SIGNAL_FUNC(display_nmap_command_callback), NULL);
  301.  
  302.  
  303.   MW->input_check = gtk_check_button_new_with_label ("Input File:");
  304.   gtk_object_set_data (GTK_OBJECT (main_win), "input_check", MW->input_check);
  305.   gtk_widget_show (MW->input_check);
  306.   gtk_fixed_put (GTK_FIXED (fixed1), MW->input_check, 248, 175);
  307.   gtk_widget_set_usize (MW->input_check, 99, 16);
  308.   gtk_signal_connect(GTK_OBJECT(MW->input_check), "released",
  309.              GTK_SIGNAL_FUNC(validate_option_change), NULL);
  310.  
  311.  
  312.   MW->input_text = gtk_entry_new ();
  313.   gtk_object_set_data (GTK_OBJECT (main_win), "input_text", MW->input_text);
  314.   gtk_widget_show (MW->input_text);
  315.   gtk_fixed_put (GTK_FIXED (fixed1), MW->input_text, 248, 192);
  316.   gtk_widget_set_usize (MW->input_text, 96, 21);
  317.   gtk_signal_connect (GTK_OBJECT(MW->input_text), "changed",
  318.               GTK_SIGNAL_FUNC(entry_toggle_checkbox), MW->input_check);
  319.  
  320.   MW->fragment_check = gtk_check_button_new_with_label ("Fragmentation");
  321.   gtk_object_set_data (GTK_OBJECT (main_win), "fragment_check", MW->fragment_check);
  322.     if(our_uid == 0)
  323.       gtk_widget_show (MW->fragment_check);
  324.   gtk_fixed_put (GTK_FIXED (fixed1), MW->fragment_check, 352, 80);
  325.   gtk_widget_set_usize (MW->fragment_check, 112, 24);
  326.   gtk_signal_connect(GTK_OBJECT(MW->fragment_check), "released",
  327.             GTK_SIGNAL_FUNC(validate_option_change), NULL);
  328.  
  329.  
  330.   MW->identd_check = gtk_check_button_new_with_label ("Get Identd Info");
  331.   gtk_object_set_data (GTK_OBJECT (main_win), "identd_check", MW->identd_check);
  332.   gtk_widget_show (MW->identd_check);
  333.   gtk_fixed_put (GTK_FIXED (fixed1), MW->identd_check, 352, 104);
  334.   gtk_widget_set_usize (MW->identd_check, 112, 24);
  335.   gtk_signal_connect(GTK_OBJECT(MW->identd_check), "released",
  336.             GTK_SIGNAL_FUNC(validate_option_change), NULL);
  337.  
  338.  
  339.   MW->resolveall_check = gtk_check_button_new_with_label ("Resolve All");
  340.   gtk_object_set_data (GTK_OBJECT (main_win), "resolveall_check", MW->resolveall_check);
  341.   gtk_widget_show (MW->resolveall_check);
  342.   gtk_fixed_put (GTK_FIXED (fixed1), MW->resolveall_check, 352, 128);
  343.   gtk_widget_set_usize (MW->resolveall_check, 112, 24);
  344.   gtk_signal_connect(GTK_OBJECT(MW->resolveall_check), "released",
  345.              GTK_SIGNAL_FUNC(display_nmap_command_callback), NULL);
  346.  
  347.  
  348.   MW->fingerprinting_check = gtk_check_button_new_with_label ("OS Detection");
  349.   gtk_object_set_data (GTK_OBJECT (main_win), "fingerprinting_check",    MW->fingerprinting_check);
  350.     if(our_uid == 0){
  351.       gtk_widget_show (MW->fingerprinting_check);
  352.       /*      gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(MW->fingerprinting_check), 1);*/
  353.       gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(MW->fingerprinting_check), TRUE);
  354.     }
  355.   gtk_fixed_put (GTK_FIXED (fixed1), MW->fingerprinting_check, 352, 150);
  356.   gtk_widget_set_usize (MW->fingerprinting_check, 112, 24);
  357.   gtk_signal_connect(GTK_OBJECT(MW->fingerprinting_check), "released",
  358.              GTK_SIGNAL_FUNC(display_nmap_command_callback), NULL);
  359.  
  360.  
  361.   MW->device_check = gtk_check_button_new_with_label ("Send on Device:");
  362.   gtk_object_set_data (GTK_OBJECT (main_win), "device_check", MW->device_check);
  363.   if (our_uid == 0)
  364.     gtk_widget_show (MW->device_check);
  365.   gtk_fixed_put (GTK_FIXED (fixed1), MW->device_check, 352, 175);
  366.   gtk_widget_set_usize (MW->device_check, 112, 17);
  367.   gtk_signal_connect(GTK_OBJECT(MW->device_check), "released",
  368.             GTK_SIGNAL_FUNC(validate_option_change), NULL);
  369.  
  370.  
  371.   MW->device_text = gtk_entry_new ();
  372.   gtk_object_set_data (GTK_OBJECT (main_win), "device_text", MW->device_text);
  373.   if (our_uid == 0)
  374.     gtk_widget_show (MW->device_text);
  375.   gtk_fixed_put (GTK_FIXED (fixed1), MW->device_text, 352, 192);
  376.   gtk_widget_set_usize (MW->device_text, 112, 21);
  377.   gtk_signal_connect (GTK_OBJECT(MW->device_text), "changed",
  378.               GTK_SIGNAL_FUNC(entry_toggle_checkbox), MW->device_check);
  379.  
  380.  
  381.   MW->start_scan = gtk_toggle_button_new_with_label("Scan.");
  382.   gtk_object_set_data (GTK_OBJECT (main_win), "start_scan", MW->start_scan);
  383.   gtk_widget_show (MW->start_scan);
  384.   gtk_fixed_put (GTK_FIXED (fixed1), MW->start_scan, 344, 32);
  385.   gtk_widget_set_usize (MW->start_scan, 72, 24);
  386.   gtk_signal_connect (GTK_OBJECT (MW->start_scan), "toggled",
  387.                       GTK_SIGNAL_FUNC (on_start_scan_clicked),
  388.                       MW->host_text);
  389.  
  390.   exit_me = gtk_button_new_with_label ("Exit");
  391.   gtk_object_set_data (GTK_OBJECT (main_win), "exit", exit_me);
  392.   gtk_widget_show (exit_me);
  393.   gtk_fixed_put (GTK_FIXED (fixed1), exit_me, 424, 32);
  394.   gtk_widget_set_usize (exit_me, 48, 24);
  395.   gtk_signal_connect (GTK_OBJECT (exit_me), "clicked",
  396.                       GTK_SIGNAL_FUNC (on_exit_me_clicked),
  397.                       NULL);
  398.  
  399.   MW->bounce_check = gtk_check_button_new_with_label ("Bounce Scan:");
  400.   gtk_object_set_data (GTK_OBJECT (main_win), "bounce_check", MW->bounce_check);
  401.   gtk_widget_show (MW->bounce_check);
  402.   gtk_fixed_put (GTK_FIXED (fixed1), MW->bounce_check, 8, 175);
  403.   gtk_widget_set_usize (MW->bounce_check, 104, 17);
  404.   gtk_signal_connect(GTK_OBJECT(MW->bounce_check), "released",
  405.             GTK_SIGNAL_FUNC(validate_option_change), NULL);
  406.  
  407.   MW->bounce_text = gtk_entry_new ();
  408.   gtk_object_set_data (GTK_OBJECT (main_win), "bounce_text", MW->bounce_text);
  409.   gtk_widget_show (MW->bounce_text);
  410.   gtk_fixed_put (GTK_FIXED (fixed1), MW->bounce_text, 8, 192);
  411.   gtk_widget_set_usize (MW->bounce_text, 104, 21);
  412.   gtk_signal_connect (GTK_OBJECT(MW->bounce_text), "changed",
  413.               GTK_SIGNAL_FUNC(entry_toggle_checkbox), MW->bounce_check);
  414.  
  415.  
  416.   hseparator2 = gtk_hseparator_new ();
  417.   gtk_object_set_data (GTK_OBJECT (main_win), "hseparator2", hseparator2);
  418.   gtk_widget_show (hseparator2);
  419.   gtk_fixed_put (GTK_FIXED (fixed1), hseparator2, 8, 64);
  420.   gtk_widget_set_usize (hseparator2, 114, 16);
  421.  
  422.   label2 = gtk_label_new ("Scan Options:");
  423.   gtk_object_set_data (GTK_OBJECT (main_win), "label2", label2);
  424.   gtk_widget_show (label2);
  425.   gtk_fixed_put (GTK_FIXED (fixed1), label2, 8, 56);
  426.   gtk_widget_set_usize (label2, 104, 16);
  427.  
  428.   menubar1 = gtk_menu_bar_new ();
  429.   gtk_object_set_data (GTK_OBJECT (main_win), "menubar1", menubar1);
  430.   gtk_widget_show (menubar1);
  431.   gtk_fixed_put (GTK_FIXED (fixed1), menubar1, 1, 1);
  432.   gtk_widget_set_usize (menubar1, 479, 27);
  433.  
  434.   File = gtk_menu_item_new_with_label ("File");
  435.   gtk_object_set_data (GTK_OBJECT (main_win), "File", File);
  436.   gtk_widget_show (File);
  437.   gtk_container_add (GTK_CONTAINER (menubar1), File);
  438.  
  439.   menu5 = gtk_menu_new ();
  440.   gtk_object_set_data (GTK_OBJECT (main_win), "menu5", menu5);
  441.   gtk_menu_item_set_submenu (GTK_MENU_ITEM (File), menu5);
  442.  
  443.   Save_Log = gtk_menu_item_new_with_label ("Save Log");
  444.   gtk_object_set_data (GTK_OBJECT (main_win), "Save_Log", Save_Log);
  445.   gtk_widget_show (Save_Log);
  446.   gtk_container_add (GTK_CONTAINER (menu5), Save_Log);
  447.   gtk_signal_connect (GTK_OBJECT (Save_Log), "activate",
  448.                       GTK_SIGNAL_FUNC (on_Save_Log_activate),
  449.                       NULL);
  450.  
  451.   Open_Log = gtk_menu_item_new_with_label ("Open Log");
  452.   gtk_object_set_data (GTK_OBJECT (main_win), "Open_Log", Open_Log);
  453.   gtk_widget_show (Open_Log);
  454.   gtk_container_add (GTK_CONTAINER (menu5), Open_Log);
  455.   gtk_signal_connect (GTK_OBJECT (Open_Log), "activate",
  456.                       GTK_SIGNAL_FUNC (on_Open_Log_activate),
  457.                       NULL);
  458.  
  459.   separator1 = gtk_menu_item_new ();
  460.   gtk_object_set_data (GTK_OBJECT (main_win), "separator1", separator1);
  461.   gtk_widget_show (separator1);
  462.   gtk_container_add (GTK_CONTAINER (menu5), separator1);
  463.  
  464.   Close = gtk_menu_item_new_with_label ("Close");
  465.   gtk_object_set_data (GTK_OBJECT (main_win), "Close", Close);
  466.   gtk_widget_show (Close);
  467.   gtk_container_add (GTK_CONTAINER (menu5), Close);
  468.   gtk_signal_connect (GTK_OBJECT (Close), "activate",
  469.                       GTK_SIGNAL_FUNC (on_Close_activate),
  470.                       NULL);
  471.  
  472.   Other = gtk_menu_item_new_with_label ("Output");
  473.   gtk_object_set_data (GTK_OBJECT (main_win), "Other", Other);
  474.   gtk_widget_show (Other);
  475.   gtk_container_add (GTK_CONTAINER (menubar1), Other);
  476.   gtk_signal_connect (GTK_OBJECT (Other), "activate", NULL, NULL);
  477.  
  478.   menu7 = gtk_menu_new ();
  479.   gtk_object_set_data (GTK_OBJECT (main_win), "menu7", menu7);
  480.   gtk_menu_item_set_submenu (GTK_MENU_ITEM (Other), menu7);
  481.  
  482.   MW->Verbose = gtk_check_menu_item_new_with_label("Verbose Output");
  483.   gtk_object_set_data (GTK_OBJECT (main_win), "Verbose", MW->Verbose);
  484.   gtk_widget_show (MW->Verbose);
  485.   gtk_container_add (GTK_CONTAINER (menu7), MW->Verbose);
  486.   gtk_signal_connect (GTK_OBJECT (MW->Verbose), "activate",
  487.                       GTK_SIGNAL_FUNC (on_verb_activate),
  488.                       NULL);
  489.  
  490.   MW->Append = gtk_check_menu_item_new_with_label("Append Output");
  491.   gtk_object_set_data (GTK_OBJECT (main_win), "Append", MW->Append);
  492.   gtk_widget_show (MW->Append);
  493.   gtk_container_add (GTK_CONTAINER (menu7), MW->Append);
  494.   gtk_signal_connect (GTK_OBJECT (MW->Append), "activate",
  495.                       GTK_SIGNAL_FUNC (on_Append_activate),
  496.                       NULL);
  497.                       
  498.   machine = gtk_menu_item_new_with_label("Machine Parsable Log");
  499.   gtk_object_set_data (GTK_OBJECT (main_win), "Machine", machine);
  500.   gtk_widget_show (machine);
  501.   gtk_container_add (GTK_CONTAINER (menu7), machine);
  502.   gtk_signal_connect (GTK_OBJECT (machine), "activate",
  503.                       GTK_SIGNAL_FUNC (on_machine_activate),
  504.                       NULL);                   
  505.                       
  506.     /** NEW CODE FOR V1.0 ***************************************************/
  507.     View_Main = gtk_menu_item_new_with_label ("View");
  508.       gtk_object_set_data (GTK_OBJECT (main_win), "View_Main", View_Main);
  509.       gtk_widget_show (View_Main);
  510.       gtk_container_add (GTK_CONTAINER (menubar1), View_Main);
  511.       gtk_signal_connect (GTK_OBJECT (View_Main), "activate",
  512.                       GTK_SIGNAL_FUNC (on_View_Main_activate),
  513.                       NULL);
  514.     
  515.     view_m = gtk_menu_new();
  516.     gtk_object_set_data(GTK_OBJECT(main_win), "view_m", view_m);
  517.     gtk_menu_item_set_submenu (GTK_MENU_ITEM (View_Main), view_m);
  518.  
  519.     Trad = gtk_menu_item_new_with_label ("Traditional");
  520.       gtk_object_set_data (GTK_OBJECT (main_win), "Trad",Trad);
  521.       gtk_widget_show (Trad);
  522.       gtk_container_add (GTK_CONTAINER (view_m), Trad);
  523.       gtk_signal_connect (GTK_OBJECT (Trad), "activate", GTK_SIGNAL_FUNC (on_Trad_activate), NULL);
  524.  
  525.     CTrad = gtk_menu_item_new_with_label ("Colored Traditional");
  526.       gtk_object_set_data (GTK_OBJECT (main_win), "CTrad",CTrad);
  527.       gtk_widget_show (CTrad);
  528.       gtk_container_add (GTK_CONTAINER (view_m), CTrad);
  529.       gtk_signal_connect (GTK_OBJECT (CTrad), "activate", GTK_SIGNAL_FUNC (on_CTrad_activate), NULL);
  530.  
  531.     /**** This doesn't work yet, that's why it's commented out ***          
  532.     *    Tree = gtk_menu_item_new_with_label ("Tree");
  533.      *     gtk_object_set_data (GTK_OBJECT (main_win), "Tree",Tree);
  534.      *    gtk_widget_show (Tree);
  535.      *     gtk_container_add (GTK_CONTAINER (view_m), Tree);
  536.      *     gtk_signal_connect (GTK_OBJECT (Tree), "activate", GTK_SIGNAL_FUNC (on_Tree_activate), NULL);
  537.      **************************************************************/
  538.  
  539.       extra = gtk_menu_item_new_with_label ("BETA Options");
  540.       gtk_object_set_data (GTK_OBJECT (main_win), "EXTRA", extra);
  541.       gtk_widget_show (extra);
  542.       gtk_container_add (GTK_CONTAINER (menubar1), extra);
  543.  
  544.       extra_menu = gtk_menu_new ();
  545.       gtk_object_set_data (GTK_OBJECT (main_win), "extra_menu", extra_menu);
  546.       gtk_menu_item_set_submenu (GTK_MENU_ITEM (extra), extra_menu);
  547.  
  548.       MW->rpc = gtk_check_menu_item_new_with_label("RPC Scan (only 2.3BETA4!)");
  549.       gtk_object_set_data (GTK_OBJECT (main_win), "RPC", MW->rpc);
  550.       gtk_widget_show (MW->rpc);
  551.       gtk_container_add (GTK_CONTAINER (extra_menu), MW->rpc);
  552.       gtk_signal_connect (GTK_OBJECT (MW->rpc), "activate",
  553.                           GTK_SIGNAL_FUNC (on_rpc_activate),
  554.                           NULL);
  555.  
  556.     /********END NEW CODE **********************************************/
  557.   Help_Main = gtk_menu_item_new_with_label ("Help");
  558.   gtk_object_set_data (GTK_OBJECT (main_win), "Help_Main", Help_Main);
  559.   gtk_widget_show (Help_Main);
  560.   gtk_container_add (GTK_CONTAINER (menubar1), Help_Main);
  561.   gtk_signal_connect (GTK_OBJECT (Help_Main), "activate",
  562.                       GTK_SIGNAL_FUNC (on_Help_Main_activate),
  563.                       NULL);
  564.   gtk_menu_item_right_justify (GTK_MENU_ITEM (Help_Main));
  565.  
  566.   menu6 = gtk_menu_new ();
  567.   gtk_object_set_data (GTK_OBJECT (main_win), "menu6", menu6);
  568.   gtk_menu_item_set_submenu (GTK_MENU_ITEM (Help_Main), menu6);
  569.  
  570.   Help = gtk_menu_item_new_with_label ("Help");
  571.   gtk_object_set_data (GTK_OBJECT (main_win), "Help", Help);
  572.   gtk_widget_show (Help);
  573.   gtk_container_add (GTK_CONTAINER (menu6), Help);
  574.   gtk_signal_connect (GTK_OBJECT (Help), "activate",
  575.                       GTK_SIGNAL_FUNC (on_Help_activate),
  576.                       NULL);
  577.  
  578.   Get_Nmap_Version = gtk_menu_item_new_with_label ("Get Nmap Version");
  579.   gtk_object_set_data (GTK_OBJECT (main_win), "Get_Nmap_Version", Get_Nmap_Version);
  580.   gtk_widget_show (Get_Nmap_Version);
  581.   gtk_container_add (GTK_CONTAINER (menu6), Get_Nmap_Version);
  582.   gtk_signal_connect (GTK_OBJECT (Get_Nmap_Version), "activate",
  583.                       GTK_SIGNAL_FUNC (on_Get_Nmap_Version_activate),
  584.                       NULL);
  585.  
  586.   separator2 = gtk_menu_item_new ();
  587.   gtk_object_set_data (GTK_OBJECT (main_win), "separator2", separator2);
  588.   gtk_widget_show (separator2);
  589.   gtk_container_add (GTK_CONTAINER (menu6), separator2);
  590.  
  591.   About = gtk_menu_item_new_with_label ("About");
  592.   gtk_object_set_data (GTK_OBJECT (main_win), "About", About);
  593.   gtk_widget_show (About);
  594.   gtk_container_add (GTK_CONTAINER (menu6), About);
  595.   gtk_signal_connect (GTK_OBJECT (About), "activate",
  596.                       GTK_SIGNAL_FUNC (on_About_activate),
  597.                       About);
  598.  
  599.   vseparator1 = gtk_vseparator_new ();
  600.   gtk_object_set_data (GTK_OBJECT (main_win), "vseparator1", vseparator1);
  601.   gtk_widget_show (vseparator1);
  602.   gtk_fixed_put (GTK_FIXED (fixed1), vseparator1, 116, 72);
  603.   gtk_widget_set_usize (vseparator1, 16, 144);
  604.  
  605.   hseparator1 = gtk_hseparator_new ();
  606.   gtk_object_set_data (GTK_OBJECT (main_win), "hseparator1", hseparator1);
  607.   gtk_widget_show (hseparator1);
  608.   gtk_fixed_put (GTK_FIXED (fixed1), hseparator1, 127, 64);
  609.   gtk_widget_set_usize (hseparator1, 336, 16);
  610.  
  611.   label3 = gtk_label_new ("General Options:");
  612.   gtk_object_set_data (GTK_OBJECT (main_win), "label3", label3);
  613.   gtk_widget_show (label3);
  614.   gtk_fixed_put (GTK_FIXED (fixed1), label3, 128, 56);
  615.   gtk_widget_set_usize (label3, 344, 16);
  616.  
  617.   label1 = gtk_label_new ("Host(s):");
  618.   gtk_object_set_data (GTK_OBJECT (main_win), "label1", label1);
  619.   gtk_widget_show (label1);
  620.   gtk_fixed_put (GTK_FIXED (fixed1), label1, 0, 32);
  621.   gtk_widget_set_usize (label1, 64, 17);
  622.  
  623.   MW->output_label = gtk_label_new ("Output from Nmap:");
  624.   gtk_object_set_data (GTK_OBJECT (main_win), "Output Label", MW->output_label);
  625.   gtk_label_set_justify( GTK_LABEL(MW->output_label), GTK_JUSTIFY_LEFT );
  626.   gtk_widget_show (MW->output_label);
  627.   gtk_fixed_put (GTK_FIXED (fixed1), MW->output_label, 0, 216);
  628.   gtk_widget_set_usize (MW->output_label, 480, 16);
  629.   display_nmap_command();
  630.  
  631.   return main_win;
  632. }
  633.  
  634. GtkWidget*
  635. create_about_window ()
  636. {
  637.   GtkWidget *about_window;
  638.   GtkWidget *vbox1;
  639.   GtkWidget *notebook1;
  640.   GtkWidget *text1;
  641.   GtkWidget *text2;
  642.   GtkWidget *label1;
  643.   GtkWidget *label2;
  644.   GtkWidget *hbox1;
  645.   GtkWidget *about_ok;
  646.  
  647.   about_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  648.   gtk_object_set_data (GTK_OBJECT (about_window), "about_window", about_window);
  649.   gtk_widget_set_usize (about_window, 200, 200);
  650.   gtk_window_set_title (GTK_WINDOW (about_window), "About NmapFE and Nmap");
  651.   gtk_window_set_policy (GTK_WINDOW (about_window), FALSE, FALSE, FALSE);
  652.   gtk_window_position (GTK_WINDOW (about_window), GTK_WIN_POS_CENTER);
  653.  
  654.   vbox1 = gtk_vbox_new (FALSE, 0);
  655.   gtk_object_set_data (GTK_OBJECT (about_window), "vbox1", vbox1);
  656.   gtk_widget_show (vbox1);
  657.   gtk_container_add (GTK_CONTAINER (about_window), vbox1);
  658.  
  659.   notebook1 = gtk_notebook_new ();
  660.   gtk_object_set_data (GTK_OBJECT (about_window), "notebook1", notebook1);
  661.   gtk_widget_show (notebook1);
  662.   gtk_box_pack_start (GTK_BOX (vbox1), notebook1, TRUE, TRUE, 0);
  663.  
  664.   text1 = gtk_text_new (NULL, NULL);
  665.   gtk_object_set_data (GTK_OBJECT (about_window), "text1", text1);
  666.   gtk_widget_show (text1);
  667.   gtk_container_add (GTK_CONTAINER (notebook1), text1);
  668.   gtk_widget_realize (text1);
  669.   gtk_text_insert (GTK_TEXT (text1), NULL, NULL, NULL,
  670.                    "\nAuthor: Zach Smith\nE-mail: key@aye.net\nHTTP: a.linuxbox.com\nWritten in: C/GTK\nGUI was built with Glade:\nhttp://glade.pn.org", 124);
  671.  
  672.   text2 = gtk_text_new (NULL, NULL);
  673.   gtk_object_set_data (GTK_OBJECT (about_window), "text2", text2);
  674.   gtk_widget_show (text2);
  675.   gtk_container_add (GTK_CONTAINER (notebook1), text2);
  676.   gtk_widget_realize (text2);
  677.   gtk_text_insert (GTK_TEXT (text2), NULL, NULL, NULL,
  678.                    "\n\nAuthor: Fyodor\nEmail: fyodor@insecure.org\nhttp://www.insecure.org/nmap\nWritten in: C", 77);
  679.  
  680.   label1 = gtk_label_new ("About NmapFE");
  681.   gtk_object_set_data (GTK_OBJECT (about_window), "label1", label1);
  682.   gtk_widget_show (label1);
  683.   set_notebook_tab (notebook1, 0, label1);
  684.  
  685.   label2 = gtk_label_new ("About Nmap");
  686.   gtk_object_set_data (GTK_OBJECT (about_window), "label2", label2);
  687.   gtk_widget_show (label2);
  688.   set_notebook_tab (notebook1, 1, label2);
  689.  
  690.   hbox1 = gtk_hbox_new (FALSE, 0);
  691.   gtk_object_set_data (GTK_OBJECT (about_window), "hbox1", hbox1);
  692.   gtk_widget_show (hbox1);
  693.   gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
  694.  
  695.   about_ok = gtk_button_new_with_label ("Ok");
  696.   gtk_object_set_data (GTK_OBJECT (about_window), "about_ok", about_ok);
  697.   gtk_widget_show (about_ok);
  698.   gtk_box_pack_start (GTK_BOX (hbox1), about_ok, TRUE, TRUE, 0);
  699.   gtk_signal_connect (GTK_OBJECT (about_ok), "clicked",
  700.                       GTK_SIGNAL_FUNC (on_about_ok_clicked),
  701.                       about_window);
  702.  
  703.   return about_window;
  704. }
  705.  
  706. GtkWidget*
  707. create_fileselection1 ()
  708. {
  709.   GtkWidget *fileselection1;
  710.   GtkWidget *ok_button1;
  711.   GtkWidget *cancel_button1;
  712.  
  713.   fileselection1 = gtk_file_selection_new ("Select File");
  714.   gtk_object_set_data (GTK_OBJECT (fileselection1), "fileselection1", fileselection1);
  715.   gtk_container_border_width (GTK_CONTAINER (fileselection1), 10);
  716.   GTK_WINDOW (fileselection1)->type = GTK_WINDOW_DIALOG;
  717.   gtk_window_set_policy (GTK_WINDOW (fileselection1), TRUE, TRUE, FALSE);
  718.  
  719.   ok_button1 = GTK_FILE_SELECTION (fileselection1)->ok_button;
  720.   gtk_object_set_data (GTK_OBJECT (fileselection1), "ok_button1", ok_button1);
  721.   gtk_widget_show (ok_button1);
  722.   GTK_WIDGET_SET_FLAGS (ok_button1, GTK_CAN_DEFAULT);
  723.   gtk_signal_connect (GTK_OBJECT (ok_button1), "clicked",
  724.                       GTK_SIGNAL_FUNC (on_ok_button1_clicked),
  725.                       fileselection1);
  726.  
  727.   cancel_button1 = GTK_FILE_SELECTION (fileselection1)->cancel_button;
  728.   gtk_object_set_data (GTK_OBJECT (fileselection1), "cancel_button1", cancel_button1);
  729.   gtk_widget_show (cancel_button1);
  730.   GTK_WIDGET_SET_FLAGS (cancel_button1, GTK_CAN_DEFAULT);
  731.   gtk_signal_connect (GTK_OBJECT (cancel_button1), "clicked",
  732.                       GTK_SIGNAL_FUNC (on_cancel_button1_clicked),
  733.                       fileselection1);
  734.  
  735.   return fileselection1;
  736. }
  737.  
  738. GtkWidget*
  739. create_help_window ()
  740. {
  741.   GtkWidget *help_window;
  742.   GtkWidget *vbox1;
  743.   GtkWidget *notebook1;
  744.   GtkWidget *text1;
  745.   GtkWidget *text2;
  746.   GtkWidget *text3;
  747.   GtkWidget *label1;
  748.   GtkWidget *label2;
  749.   GtkWidget *label3;
  750.   GtkWidget *hbox1;
  751.   GtkWidget *help_ok;
  752.  
  753.   help_window = gtk_window_new (GTK_WINDOW_DIALOG);
  754.   gtk_object_set_data (GTK_OBJECT (help_window), "help_window", help_window);
  755.   gtk_widget_set_usize (help_window, 400, 300);
  756.   gtk_window_set_title (GTK_WINDOW (help_window), "Help With NmapFE");
  757.   gtk_window_set_policy (GTK_WINDOW (help_window), FALSE, FALSE, FALSE);
  758.   gtk_window_position (GTK_WINDOW (help_window), GTK_WIN_POS_CENTER);
  759.  
  760.   vbox1 = gtk_vbox_new (FALSE, 0);
  761.   gtk_object_set_data (GTK_OBJECT (help_window), "vbox1", vbox1);
  762.   gtk_widget_show (vbox1);
  763.   gtk_container_add (GTK_CONTAINER (help_window), vbox1);
  764.  
  765.   notebook1 = gtk_notebook_new ();
  766.   gtk_object_set_data (GTK_OBJECT (help_window), "notebook1", notebook1);
  767.   gtk_widget_show (notebook1);
  768.   gtk_box_pack_start (GTK_BOX (vbox1), notebook1, TRUE, TRUE, 0);
  769.  
  770.   text1 = gtk_text_new (NULL, NULL);
  771.   gtk_object_set_data (GTK_OBJECT (help_window), "text1", text1);
  772.   gtk_widget_show (text1);
  773.   gtk_container_add (GTK_CONTAINER (notebook1), text1);
  774.   gtk_widget_realize (text1);
  775.   gtk_text_insert (GTK_TEXT (text1), NULL, NULL, NULL,
  776.                    "Starting a scan:\n1) Put the host(s) name(s) of which to scan in the \"Host\" text box.\n2) Pick the scan options you would like\n3) Pick the view you want from the \"View\" menu option.\n4) Click \"Start Scan\"\n\nStopping a Scan:\nAfter clicking \"Start Scan\", the button will remain depressed. \nIf you would like to stop the scan, simply click that button again.\nThe button will pop up, and the scan will be stopped.\n", 406);
  777.  
  778.   text2 = gtk_text_new (NULL, NULL);
  779.   gtk_object_set_data (GTK_OBJECT (help_window), "text2", text2);
  780.   gtk_widget_show (text2);
  781.   gtk_container_add (GTK_CONTAINER (notebook1), text2);
  782.   gtk_widget_realize (text2);
  783.   gtk_text_insert (GTK_TEXT (text2), NULL, NULL, NULL,
  784.                    "To log a scan in human-readable form:\n1) After finishing a scan, click 'Save Log' from the 'File' menu.\n\nTo re-open a human-readable log:\n1) Click 'Open Log' from the 'File' menu.\n2) If you have color coding enabled, the log will be opened in \ncolor. If not, it will be opened in plain text.\n\nTo log a machine parsable scan:\n1) After finishing a scan, click 'Machine Parsable Log' from the \n'Output' menu.", 405);
  785.  
  786.   text3 = gtk_text_new (NULL, NULL);
  787.   gtk_object_set_data (GTK_OBJECT (help_window), "text3", text3);
  788.   gtk_widget_show (text3);
  789.   gtk_container_add (GTK_CONTAINER (notebook1), text3);
  790.   gtk_widget_realize (text3);
  791.   gtk_text_insert (GTK_TEXT (text3), NULL, NULL, NULL,
  792.                    "Bold Red - Services that would allow execution of commands \nand/or logging directly into the system. Telnet, FTP, rsh, ssh, \netc... are covered by this. Not *every* single service is covered,\nthe code base would be huge if they were.\n\nBold Blue - Mail services. IMAP, SMTP, POP3, etc... \nOnce again, not all are covered, just the common ones.\n\nBold Black - Services users could get information from.\nfinger, http, X11, etc...\n\nRegular Black - Services I had nothing better to do with :)\n\nIf you have ideas on how to color code more, please let me know:\nkey@aye.net", 564);
  793.  
  794.   label1 = gtk_label_new ("Scanning");
  795.   gtk_object_set_data (GTK_OBJECT (help_window), "label1", label1);
  796.   gtk_widget_show (label1);
  797.   set_notebook_tab (notebook1, 0, label1);
  798.  
  799.   label2 = gtk_label_new ("Logging");
  800.   gtk_object_set_data (GTK_OBJECT (help_window), "label2", label2);
  801.   gtk_widget_show (label2);
  802.   set_notebook_tab (notebook1, 1, label2);
  803.  
  804.   label3 = gtk_label_new ("Colors");
  805.   gtk_object_set_data (GTK_OBJECT (help_window), "label3", label3);
  806.   gtk_widget_show (label3);
  807.   set_notebook_tab (notebook1, 2, label3);
  808.  
  809.   hbox1 = gtk_hbox_new (FALSE, 0);
  810.   gtk_object_set_data (GTK_OBJECT (help_window), "hbox1", hbox1);
  811.   gtk_widget_show (hbox1);
  812.   gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
  813.  
  814.   help_ok = gtk_button_new_with_label ("Ok.");
  815.   gtk_object_set_data (GTK_OBJECT (help_window), "help_ok", help_ok);
  816.   gtk_widget_show (help_ok);
  817.   gtk_box_pack_start (GTK_BOX (hbox1), help_ok, TRUE, TRUE, 0);
  818.   gtk_signal_connect (GTK_OBJECT (help_ok), "clicked",
  819.                       GTK_SIGNAL_FUNC (on_help_ok_clicked),
  820.                       help_window);
  821.  
  822.   return help_window;
  823. }
  824.  
  825. GtkWidget*
  826. create_machine_parse_selection ()
  827. {
  828.   GtkWidget *machine_parse_selection;
  829.   GtkWidget *hbox1;
  830.   GtkWidget *label1;
  831.  
  832.   machine_parse_selection = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  833.   gtk_object_set_data (GTK_OBJECT (machine_parse_selection), "machine_parse_selection", machine_parse_selection);
  834.   gtk_window_set_title (GTK_WINDOW (machine_parse_selection), "Machine Parsable Log Selection");
  835.   gtk_window_set_policy (GTK_WINDOW (machine_parse_selection), FALSE, FALSE, FALSE);
  836.   gtk_window_position (GTK_WINDOW (machine_parse_selection), GTK_WIN_POS_CENTER);
  837.  
  838.   hbox1 = gtk_hbox_new (FALSE, 0);
  839.   gtk_object_set_data (GTK_OBJECT (machine_parse_selection), "hbox1", hbox1);
  840.   gtk_widget_show (hbox1);
  841.   gtk_container_add (GTK_CONTAINER (machine_parse_selection), hbox1);
  842.  
  843.   label1 = gtk_label_new ("File:");
  844.   gtk_object_set_data (GTK_OBJECT (machine_parse_selection), "label1", label1);
  845.   gtk_widget_show (label1);
  846.   gtk_box_pack_start (GTK_BOX (hbox1), label1, TRUE, TRUE, 0);
  847.  
  848.   MW->file_entry = gtk_entry_new ();
  849.   gtk_object_set_data (GTK_OBJECT (machine_parse_selection), "file_entry", MW->file_entry);
  850.   gtk_entry_set_text(GTK_ENTRY(MW->file_entry), "parsable.log");
  851.   gtk_widget_show (MW->file_entry);
  852.   gtk_box_pack_start (GTK_BOX (hbox1), MW->file_entry, TRUE, TRUE, 0);
  853.                       
  854.   MW->done = gtk_button_new_with_label ("Done");
  855.   gtk_object_set_data (GTK_OBJECT (machine_parse_selection), "button3", MW->done);
  856.   gtk_widget_show (MW->done);
  857.   gtk_box_pack_start (GTK_BOX (hbox1), MW->done, TRUE, TRUE, 0);
  858.   gtk_container_border_width (GTK_CONTAINER (MW->done), 10);
  859.   gtk_signal_connect (GTK_OBJECT (MW->done), "clicked",
  860.                       GTK_SIGNAL_FUNC (on_done_clicked),
  861.                       machine_parse_selection);
  862.                       
  863.   MW->cancel = gtk_button_new_with_label ("Cancel");
  864.   gtk_object_set_data (GTK_OBJECT (machine_parse_selection), "button3", MW->cancel);
  865.   gtk_widget_show (MW->cancel);
  866.   gtk_box_pack_start (GTK_BOX (hbox1), MW->cancel, TRUE, TRUE, 0);
  867.   gtk_container_border_width (GTK_CONTAINER (MW->cancel), 10);
  868.   gtk_signal_connect (GTK_OBJECT (MW->cancel), "clicked",
  869.                       GTK_SIGNAL_FUNC (on_cancel_clicked),
  870.                       machine_parse_selection); 
  871.   return machine_parse_selection;
  872. }
  873.  
  874. #endif /* MISSING_GTK */
  875.