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

网络截获/分析

开发平台:

C/C++

  1. /*
  2.     ettercap -- dissector TELNET
  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 "include/ec_main.h"
  17. #include <string.h>
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <errno.h>
  21. #ifdef HAVE_CTYPE_H
  22.    #include <ctype.h>
  23. #endif
  24. #include "include/ec_dissector.h"
  25. #include "include/ec_inet_structures.h"
  26. #include "include/ec_error.h"
  27. #ifdef DEBUG
  28. #include "include/ec_debug.h"
  29. #endif
  30. // protos
  31. #ifndef HAVE_CTYPE_H
  32.    int isprint(int c);
  33. #endif
  34. FUNC_DISSECTOR(Dissector_telnet);
  35. // --------------------
  36. #ifndef HAVE_CTYPE_H
  37.    int isprint(int c)
  38.    {
  39.       return ( (c>31 && c<127) ? 1 : 0 );
  40.    }
  41. #endif
  42. FUNC_DISSECTOR(Dissector_telnet)
  43. {
  44.    TCP_header *tcp;
  45.    u_char *payload;
  46.    char collector[30];
  47.    int datalen;
  48.    
  49.    ONLY_CONNECTION;
  50.    
  51.    tcp = (TCP_header *) data;
  52.    if (ntohs(tcp->source) == 23) return 0;            // skip server messages...
  53.    if (data_to_ettercap->datalen == 0) return 0; // no data...
  54.    
  55.    payload = (char *)((int)tcp + tcp->doff * 4);
  56.    memset(collector, 0, 30);
  57.    datalen = (data_to_ettercap->datalen > 30) ? 30 : data_to_ettercap->datalen;
  58.    strncpy(collector, payload, datalen);
  59.    if (strcmp(collector, ""))
  60.    {
  61.       int i, end=0;
  62.       for (i=0; i<strlen(collector); i++)
  63.       {
  64.          if (collector[i] == 'n' || collector[i] == 'r')
  65.             end = 1;
  66.          if (!isprint(collector[i]))
  67.             collector[i] = 0;
  68.       }
  69.       if (strcmp(collector, ""))                      // again on modified collector
  70.       {
  71.          if (end) strcat(collector, "n");            // this is the terminator char for the data collection (ec_decodata.c)
  72.          strncpy(data_to_ettercap->user, collector, 29);
  73.          strncpy(data_to_ettercap->pass, collector, 29);
  74.       }
  75.       else if (end)
  76.       {
  77.          strcpy(data_to_ettercap->user, "n");
  78.          strcpy(data_to_ettercap->pass, "n");
  79.       }
  80.    }
  81.    return 0;
  82. }
  83. /* EOF */