ec_signal.c
上传用户:nilegod
上传日期:2007-01-08
资源大小:220k
文件大小:4k
源码类别:

网络截获/分析

开发平台:

C/C++

  1. /*
  2.     ettercap -- signal handler
  3.     Copyright (C) 2001  ALoR <alor@users.sourceforge.net>, NaGA <crwm@freemail.it>
  4.     This program is free software; you can redistribute it and/or modify
  5.     it under the terms of the GNU General Public License as published by
  6.     the Free Software Foundation; either version 2 of the License, or
  7.     (at your option) any later version.
  8.     This program is distributed in the hope that it will be useful,
  9.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11.     GNU General Public License for more details.
  12.     You should have received a copy of the GNU General Public License
  13.     along with this program; if not, write to the Free Software
  14.     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  15. */
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #include <signal.h>
  20. #include "include/ec_main.h"
  21. #ifdef HAVE_NCURSES
  22.    #include <ncurses.h>
  23.    #include "include/ec_interface.h"
  24.    #include "include/ec_interface_sniff_data.h"
  25.    #include "include/ec_interface_plugins.h"
  26.    extern WINDOW *data_source_win;
  27.    extern WINDOW *plugin_window;
  28. #endif
  29. #ifdef DEBUG
  30.    #include "include/ec_debug.h"
  31. #endif
  32. // protos...
  33. void Signal_SEGV(int sig);
  34. void Signal_TERM(int sig);
  35. void Signal_WINCH(int sig);
  36. void Signal_USR1(int sig);
  37. void Signal_USR2(int sig);
  38. //-----------------------
  39. void Signal_SigBuster()
  40. {
  41. #ifdef DEBUG
  42.    Debug_msg("Signal_Buster");
  43. #endif
  44.    signal(SIGSEGV, Signal_SEGV);
  45.    signal(SIGTERM, Signal_TERM);
  46.    signal(SIGWINCH, Signal_WINCH);
  47.    signal(SIGCHLD, SIG_IGN);       // if I kill a forked process it doesn't became a zombie...
  48.    signal(SIGPIPE, Signal_TERM);   // if ettercap SIGSEGV, illithid receives this sig... (pipe_with_illithid)
  49.    signal(SIGUSR1, Signal_USR1);
  50.    signal(SIGUSR2, Signal_USR2);
  51. }
  52. void Signal_SEGV(int sig)
  53. {
  54. #ifdef DEBUG
  55.    Debug_msg("[%s] Segmentation Fault...", program_argv0 );
  56. #endif
  57. #ifdef HAVE_NCURSES
  58.    if (!Options.normal)
  59.       Interface_WExit("Segmentation Fault... (caught)");
  60.    else
  61. #endif
  62.    printf("nSegmentation Fault... (caught)nn");
  63.    exit(5);
  64. }
  65. void Signal_TERM(int sig)
  66. {
  67. #ifdef DEBUG
  68.    Debug_msg("[%s] Signal handler... (caught SIGNAL: %d) | %s", program_argv0, sig, sys_siglist[sig]);
  69. #endif
  70.    if (strcmp(program_argv0, PROGRAM)) exit(0);    // is not the main process...
  71. #ifdef HAVE_NCURSES
  72.    if (!Options.normal)
  73.    {
  74.       char Message[50];
  75.       sprintf(Message, " Signal handler... (caught SIGNAL: %d) | %s", sig, sys_siglist[sig]);
  76.       Interface_WExit(Message);
  77.    }
  78. #else
  79.    printf("n Signal handler... (caught SIGNAL: %d) | %snn", sig, sys_siglist[sig]);
  80. #endif
  81.    exit(1);
  82. }
  83. void Signal_WINCH(int sig)
  84. {
  85. #ifdef HAVE_NCURSES
  86.    if (data_source_win != NULL)
  87.    {
  88.       #ifdef DEBUG
  89.          Debug_msg("Winching sniff data windows...");
  90.       #endif
  91.       Interface_Sniff_Data_Winch();
  92.    }
  93. #ifdef PERMIT_PLUGINS
  94.    else if (plugin_window != NULL)
  95.    {
  96.       #ifdef DEBUG
  97.          Debug_msg("Winching plugin windows...");
  98.       #endif
  99.       Interface_Plugins_Winch();
  100.    }
  101. #endif
  102.    else
  103.    {
  104.       #ifdef DEBUG
  105.          Debug_msg("Winching windows...");
  106.       #endif
  107.       Interface_Winch();
  108.    }
  109. #endif
  110.    signal(SIGWINCH, Signal_WINCH);
  111. }
  112. void Signal_USR1(int sig)
  113. {
  114.    active_dissector = (active_dissector) ? 0 : 1;     // activate/deactivate active dissector (arp based)
  115.    #ifdef DEBUG
  116.       Debug_msg("tactive_dissector %d", active_dissector);
  117.    #endif
  118.    signal(SIGUSR1, Signal_USR1);
  119. }
  120. void Signal_USR2(int sig)
  121. {
  122.    Connection_Mode = (Connection_Mode) ? 0 : 1;
  123.    #ifdef DEBUG
  124.       Debug_msg("tConnection_Mode %d", Connection_Mode);
  125.    #endif
  126.    signal(SIGUSR2, Signal_USR2);
  127. }
  128. /* EOF */