📄 jiemian.c
字号:
#include <gtk/gtk.h>#include <gdk/gdk.h>#include <gdk/gdkx.h>#include <glib.h>#include <sys/types.h>#include <stdlib.h>#include <string.h>#include <stdio.h>#include <unistd.h>#include <gtk/gtkimcontext.h>#include <gtk/gtkimmodule.h>#include <gdk/gdkkeysyms.h>#include <fcntl.h>#include <gtk/gtkwidget.h>
#include <gtk/gtkhbox.h>
#include <gtk/gtkvbox.h>gint
main (gint argc, gchar *argv[])
{
//定义一些控件变量。 GtkWidget *window; gchar *large_kvt_xpm;
GtkWidget *mnu_1;
GtkWidget *mnu_2;
GtkWidget *mnu_3;
GtkWidget *text;
GtkWidget *vbox_text;
GtkWidget *text3;
GtkWidget *text4;
GtkWidget *text5;
GtkWidget *vpaned;
GtkWidget *vpaned1;
GtkWidget *menu;
GtkWidget *menu_bar;
GtkWidget *root_menu;
GtkWidget *separator1;
GtkWidget *menu_items;
GtkWidget *handlebox1;
GtkWidget *handlebox2;
GtkWidget *toolbar2;
GtkWidget *tmp_toolbar_icon;
GtkAccelGroup *accel_group;
GtkWidget *pixmapwid;
GdkPixmap *pixmap;
GdkBitmap *mask;
GtkStyle *style;
GtkWidget *button;
GtkWidget *box_xpm;
GtkWidget *vbox, *listvbox;
GtkWidget *hbox;
GtkWidget *buttons_hbox;
GtkWidget *vscrollbar;
GtkTooltips *tooltips;
GtkWidget *showcount_label;
GtkWidget *label;
GtkWidget *baojinlabel;
GtkWidget *separator;
GdkPixmap *icon_pixmap;
GdkBitmap *icon_mask;
GtkWidget *notebook;
GtkWidget *text_notebook;
GtkWidget *text_scrolledwindow;
GtkWidget *frame;
GtkWidget *scrolled_window;
GtkWidget *clist;
GtkWidget *clist1;
GtkWidget *clist2;
GtkWidget *clist3;
GtkWidget *clist4;
GtkWidget *clist5;
GtkWidget *clist6;
GtkWidget *clist_event;
GtkWidget *button_add, *button_clear, *button_hide_show;
gchar *titles_arp[11]={"number","Hardware type","Protocol","hln","plen","Operation","Source Hardware","Source Ip","Destination Hardware","Destination Ip","Information"};
gchar *titles_ip[12]={"number","version","header_length","tos","total_length","id","off","ttl","protocol","checksum","source_ip","destination_ip"};
gchar *titles_tcp[12]={"number","snort","dport","seq","ack","doff","flags","win","cksm","urp","tcp_options","information"};
gchar *titles_udp[5]={"number","sport","dport","len","cksum"};
g_thread_init(NULL);
gtk_init(&argc,&argv);
//gtk初始化
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize(GTK_WIDGET(window),790,580);
gtk_window_set_title(GTK_WINDOW(window),"Network Instrusion Detection System");
gtk_widget_realize(window);
icon_pixmap=gdk_pixmap_create_from_xpm_d(window->window,&icon_mask,&window->style->bg[GTK_STATE_NORMAL],large_kvt_xpm);
gdk_window_set_icon(window->window,NULL,icon_pixmap,icon_mask);
gdk_window_set_icon_name(window->window,"NIDS"); vbox=gtk_vbox_new(FALSE,0); //========================创建菜单条控件========================// menu_bar=gtk_menu_bar_new(); //=======================创建File Operation菜单================//
menu=gtk_menu_new(); root_menu=gtk_menu_item_new_with_label("File Operation"); gtk_widget_show(root_menu); menu_items=gtk_menu_item_new(); box_xpm=xpm_label_box(window,"./xpm/open.xpm","Open(.bpf)"); gtk_widget_show(box_xpm); gtk_container_add(GTK_CONTAINER(menu_items),box_xpm); gtk_signal_connect(GTK_OBJECT(menu_items),"activate",GTK_SIGNAL_FUNC(set_readfile_callback),NULL); //设置回调函数set_readfile_callback(),其功能是设置读取的默认文件
handlebox1=gtk_handle_box_new();
gtk_object_set_data(GTK_OBJECT(window),"handlebox1",handlebox1);
gtk_widget_show(handlebox1);
gtk_box_pack_start(GTK_BOX(vbox),handlebox1,FALSE,TRUE,0);
gtk_container_add(GTK_CONTAINER(handlebox1),menu_bar);
gtk_widget_show(menu_bar);
//=================创建工具栏控件toolbar==================//
accel_group=gtk_accel_group_new();
gtk_window_add_accel_group(GTK_WINDOW(window),accel_group);
handlebox2=gtk_handle_box_new();
gtk_object_set_data(GTK_OBJECT(window),"handlebox2",handlebox2);
gtk_widget_show(handlebox2);
gtk_box_pack_start(GTK_BOX(vbox),handlebox2,FALSE,TRUE,0);
toolbar2=gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL,GTK_TOOLBAR_BOTH);
gtk_object_set_data(GTK_OBJECT(window),"toolbar2",toolbar2);
gtk_widget_show(toolbar2);
gtk_container_add(GTK_CONTAINER(handlebox2),toolbar2);
tmp_toolbar_icon=create_pixmap(window,"allow.xpm");
if(tmp_toolbar_icon==NULL)
g_error("Couldn't create pixmap");
button=gtk_toolbar_append_element(GTK_TOOLBAR(toolbar2),GTK_TOOLBAR_CHILD_BUTTON,NULL,"Start","Allow any host",NULL,tmp_toolbar_icon,NULL,NULL);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(threads_click),NULL);
//设置回调函数threads_click(),其功能是开始系统运行,系统入口函数
gtk_widget_add_accelerator(button,"clicked",accel_group,GDK_D,GDK_CONTROL_MASK,GTK_ACCEL_VISIBLE);
tmp_toolbar_icon=create_pixmap(window,"refresh.xpm");
if(tmp_toolbar_icon==NULL)
g_error("Couldn't create pixmap");
button=gtk_toolbar_append_element(GTK_TOOLBAR(toolbar2),GTK_TOOLBAR_CHILD_BUTTON,NULL,"Refresh","Refresh allowed hosts",NULL,tmp_toolbar_icon,NULL,NULL);
gtk_widget_show(button);
gtk_widget_add_accelerator(button,"clicked",accel_group,GDK_R,GDK_CONTROL_MASK,GTK_ACCEL_VISIBLE);
tmp_toolbar_icon=create_pixmap(window,"clear.xpm");
if(tmp_toolbar_icon==NULL)
g_error("Couldn't create pixmap");
button=gtk_toolbar_append_element(GTK_TOOLBAR(toolbar2),GTK_TOOLBAR_CHILD_BUTTON,NULL,"Clear","Help",NULL,tmp_toolbar_icon,NULL,NULL);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(button_clear_clicked),NULL);
//设置回调函数button_clear_clicked(),其功能是清除页面内容
gtk_widget_add_accelerator(button,"clicked",accel_group,GDK_H,GDK_CONTROL_MASK,GTK_ACCEL_VISIBLE);
tmp_toolbar_icon=create_pixmap(window,"stop_alert.xpm");
if(tmp_toolbar_icon==NULL)
g_error("Couldn't create pixmap");
button=gtk_toolbar_append_element(GTK_TOOLBAR(toolbar2),GTK_TOOLBAR_CHILD_BUTTON,NULL,"Stop Alert","Stop the Alert",NULL,tmp_toolbar_icon,NULL,NULL);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(stop_alert),NULL);
//设置回调函数stop_alert(),其功能是停止事件响应方式
gtk_widget_add_accelerator(button,"clicked",accel_group,GDK_S,GDK_CONTROL_MASK,GTK_ACCEL_VISIBLE);
tmp_toolbar_icon=create_pixmap(window,"help.xpm");
if(tmp_toolbar_icon==NULL)
g_error("Couldn't create pixmap");
button=gtk_toolbar_append_element(GTK_TOOLBAR(toolbar2),GTK_TOOLBAR_CHILD_BUTTON,NULL,"Help","Help",NULL,tmp_toolbar_icon,NULL,NULL);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(on_help_about_menubar_activate),NULL);
//设置回调函数on_help_about_menubar_activate(),其功能是显示帮助对话窗口
gtk_widget_add_accelerator(button,"clicked",accel_group,GDK_H,GDK_CONTROL_MASK,GTK_ACCEL_VISIBLE);
tmp_toolbar_icon=create_pixmap(window,"exit.xpm");
if(tmp_toolbar_icon==NULL)
g_error("Couldn't create pixmap");
button=gtk_toolbar_append_element(GTK_TOOLBAR(toolbar2),GTK_TOOLBAR_CHILD_BUTTON,NULL,"Exit","Quit this program",NULL,tmp_toolbar_icon,NULL,NULL);
gtk_widget_show(button);
gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(destroy),NULL);
//设置回调函数destroy(),其功能是销毁窗口,退出程序
gtk_widget_add_accelerator(button,"clicked",accel_group,GDK_Q,GDK_CONTROL_MASK,GTK_ACCEL_VISIBLE);
gtk_widget_add_accelerator(button,"clicked",accel_group,GDK_X,GDK_MOD1_MASK,GTK_ACCEL_VISIBLE);
//=======================创建面板控件=============================// vpaned=gtk_vpaned_new(); gtk_box_pack_start(GTK_BOX(vbox),vpaned,TRUE,TRUE,0); gtk_paned_set_handle_size(GTK_PANED(vpaned),10); gtk_paned_set_gutter_size(GTK_PANED(vpaned),15); gtk_widget_show(vpaned); //=======================创建记事本控件notebook===================// notebook=gtk_notebook_new(); gtk_object_set_data(GTK_OBJECT(window),"notebook",notebook); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook),GTK_POS_BOTTOM); gtk_paned_add1(GTK_PANED(vpaned),notebook); gtk_widget_show(notebook); //=======================创建显示捕获信息的页面控件==================// listvbox=gtk_vbox_new(FALSE,0); label=gtk_label_new(" sniffer "); gtk_widget_show(label); gtk_notebook_append_page(GTK_NOTEBOOK(notebook),listvbox,label); gtk_widget_show(listvbox); scrolled_window=gtk_scrolled_window_new(NULL,NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),GTK_POLICY_AUTOMATIC,GTK_POLICY_ALWAYS); gtk_box_pack_start(GTK_BOX(listvbox),scrolled_window,TRUE,TRUE,0); gtk_widget_show(scrolled_window); clist=gtk_clist_new(9); gtk_object_set_data(GTK_OBJECT(window),"clist",clist); gtk_clist_set_column_title(GTK_CLIST(clist),0,"Packet Id"); gtk_clist_set_column_title(GTK_CLIST(clist),1,"Time"); gtk_clist_set_column_title(GTK_CLIST(clist),2,"Source Hardware"); gtk_clist_set_column_title(GTK_CLIST(clist),3,"Destination Hardware"); gtk_clist_set_column_title(GTK_CLIST(clist),4,"Source Ip"); gtk_clist_set_column_title(GTK_CLIST(clist),5,"Destination Ip"); gtk_clist_set_column_title(GTK_CLIST(clist),6,"Source Port"); gtk_clist_set_column_title(GTK_CLIST(clist),7,"Destination Port"); gtk_clist_set_column_title(GTK_CLIST(clist),8,"Ethernet Type"); gtk_clist_column_titles_show(GTK_CLIST(clist)); gtk_widget_ref(clist); gtk_object_set_data_full(GTK_OBJECT(window),"clist",clist,(GtkDestroyNotify)gtk_widget_unref); gtk_signal_connect(GTK_OBJECT(clist),"select_row",GTK_SIGNAL_FUNC(selection_made),NULL); //设置回调函数selection_made() gtk_clist_set_shadow_type(GTK_CLIST(clist),GTK_SHADOW_IN); gtk_clist_set_column_width(GTK_CLIST(clist),0,40); gtk_clist_set_column_width(GTK_CLIST(clist),1,130); gtk_clist_set_column_width(GTK_CLIST(clist),2,120); gtk_clist_set_column_width(GTK_CLIST(clist),3,120); gtk_clist_set_column_width(GTK_CLIST(clist),4,120); gtk_clist_set_column_width(GTK_CLIST(clist),5,120); gtk_clist_set_column_width(GTK_CLIST(clist),6,120); gtk_clist_set_column_width(GTK_CLIST(clist),7,120);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -