Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include <sys/types.h>
00038 #include <unistd.h>
00039 using namespace std;
00040
00041
00042 #include <gtkmm/main.h>
00043
00044 #include "main_window.hh"
00045 #include "bridge.hh"
00046 #include "misc.h"
00047 #include "BoundedHash.h"
00048 #include <glibmm/keyfile.h>
00049 #include <signal.h>
00050 #include <pcap_layer.h>
00051
00052 char iface[16];
00053 char sniff_iface[16];
00054
00055 void sig_hand(int n) {
00056 Gtk::Main::quit();
00057 }
00058
00059 int main(int argc, char **argv) {
00060
00061 char * param = NULL;
00062 if (argc > 2) {
00063 fprintf(
00064 stderr,
00065 "wmpSniffer v0.1\nUsage: %s [sniff iface]\nSet recording parameters in %s.conf\n",
00066 argv[0], argv[0]);
00067 exit(0);
00068 } else if (argc == 2) {
00069 param = argv[1];
00070 }
00071
00072 if (argc==1){
00073 pcap_init(strdup("lo"), 3);
00074 }else{
00075 pcap_init(strdup(argv[1]), 3);
00076
00077 }
00078 pid_t pID = vfork();
00079 if (pID == 0) {
00080
00081 setresuid(getuid(), getuid(), getuid());
00082 setresgid(getgid(), getgid(), getgid());
00083
00084 g_thread_init(NULL);
00085 gdk_threads_init();
00086
00087 Gtk::Main m(&argc, &argv);
00088 main_window *main_window = new class main_window(param);
00089 Gtk::Main::signal_quit().connect(
00090 sigc::mem_fun(main_window, &main_window::on_exit));
00091 signal(SIGINT, sig_hand);
00092
00093 gdk_threads_enter();
00094 try {
00095 m.run(*main_window);
00096 } catch (...) {
00097
00098 }
00099 gdk_threads_leave();
00100
00101 delete main_window;
00102 _exit(0);
00103 } else{
00104 return 0;
00105 }
00106 }