📄 265.htm
字号:
close( rsock ); <br>
return 0; <br>
} <br>
rhost.sin_family = AF_INET; <br>
memcpy( &rhost.sin_addr, hp->h_addr, hp->h_length ); <br>
rhost.sin_port = htons( rport ); <br>
printf( "connect to port: #%d\n", rport ); <br>
if ( connect(rsock, (struct sockaddr *) &rhost, sizeof(rhost) ) < 0 ) <br>
{ <br>
printf( "***connect failure.\n" ); <br>
write( ms, cnmsg, strlen( cnmsg ) ); <br>
close( rsock ); <br>
return 0; <br>
} <br>
printf( "connected successfully.\n" ); <br>
len = read( rsock, rbuf, 1024 ); rbuf[len] = '\0'; <br>
printf( rbuf ); <br>
while( strstr( rbuf, "220 ") == NULL ) <br>
{ <br>
len = read( rsock, rbuf, 1024 ); rbuf[len] = '\0'; <br>
printf( rbuf ); <br>
} <br>
write( rsock, "USER ftp\n", 9 ); <br>
printf( "USER ftp sent.\n" ); <br>
len = read( rsock, rbuf, sizeof( rbuf ) ); rbuf[len] = '\0'; <br>
printf( rbuf ); <br>
if ( memcmp( rbuf, "331 ", 4 ) == 0 ) <br>
{ <br>
{ <br>
write( rsock, "PASS guest@\n", 12 ); <br>
len = read( rsock, rbuf, sizeof( rbuf ) );rbuf[len] = '\0'; <br>
} <br>
tok = "230 "; <br>
ca = strstr( buffer, " HTTP/1.0" ); <br>
len = ca - buffer - 10 - strlen( tmp ) ; <br>
ca = buffer + 10 + strlen( tmp ); <br>
memcpy( tmp, ca, len ); <br>
tmp[len]='\0'; <br>
if ( len > 0 ) <br>
{ <br>
while( memcmp( rbuf, "230 ", 4 ) != 0 && strstr(rbuf,"\n230 ") == NU <br>
LL ) <br>
{ <br>
len =read( rsock, rbuf, sizeof( rbuf )); <br>
rbuf[len] = '\0'; <br>
} <br>
tok = "250 "; <br>
sprintf( buffer, "CWD %s\n", tmp ); <br>
printf( buffer ); <br>
write( rsock, buffer, strlen( buffer ) ); <br>
len = read( rsock, rbuf, sizeof( rbuf ) ); rbuf[len] = '\0'; <br>
} <br>
if ( memcmp( rbuf, "550 ", 4 ) == 0 ) <br>
{ <br>
int data1; <br>
char temp[40]; <br>
/* get file */ <br>
ca = strrchr( tmp, '/' ); <br>
strcpy( temp, ca+1 ); <br>
*(ca +1) = '\0'; <br>
sprintf( buffer, "CWD %s\n", tmp ); <br>
printf( buffer ); <br>
write( rsock, buffer, strlen( buffer )); <br>
len = read( rsock, rbuf, sizeof( rbuf ));rbuf[len]='\0'; <br>
printf( rbuf ); <br>
while( strstr( rbuf, "250 " ) == NULL) <br>
{ <br>
len = read( rsock, rbuf, sizeof( rbuf)); <br>
rbuf[len] = '\0'; <br>
} <br>
write( rsock, "TYPE I\n", 7 ); <br>
read( rsock, rbuf, sizeof( rbuf) ); <br>
initconn( rsock ); <br>
sprintf( buffer, "RETR %s\n", temp ); <br>
printf( buffer ); <br>
write( rsock, buffer, strlen( buffer) ); <br>
read( rsock, rbuf, sizeof( rbuf ) ); <br>
printf( rbuf ); <br>
if ( memcmp( rbuf, "550 ", 4 ) != 0 ) <br>
{ <br>
data1 = accept( data, (struct sockaddr *)NULL, (int * )NULL ); <br>
l = 0; <br>
do <br>
{ <br>
memset( rbuf, 0, sizeof( rbuf) ); <br>
if (( len = read( data1, rbuf, sizeof( rbuf) )) < 0) <br>
puts( "Error in read stream message." ); <br>
else if ( len == 0 ) <br>
puts( "\n[ftp : end of connection.]\n" ); <br>
else <br>
{ <br>
write( ms, rbuf, len ); <br>
l += len; <br>
printf( "%d - Received bytes : %ld\n", count, l ); <br>
} <br>
} <br>
} while( len != 0 ); <br>
close( data1 ); <br>
} <br>
close( data ); <br>
} <br>
else <br>
{ <br>
/* list directory */ <br>
int data1; <br>
char temp[40]; <br>
if ( tmp[0] == '\0' ) strcpy( tmp, "/" ); <br>
sprintf( temp, "<TITLE>FTP Catalog of %s</TITLE>\n", tmp ); <br>
write( ms, temp, strlen( temp )); <br>
sprintf( temp, "<H2>Directory of %s</H2><PRE><HR>", <br>
tmp ); <br>
write( ms, temp, strlen( temp ) ); <br>
if ( memcmp( rbuf, tok, 4) != 0 ) <br>
{ <br>
len = strlen( rbuf ); rbuf[len] = '\0'; <br>
sprintf( tmp, "\n%s", tok ); <br>
while( memcmp( rbuf, tok, 4) != 0 && strstr(rbuf,tmp) == NULL) <br>
{ <br>
{ <br>
write( ms, rbuf, len ); <br>
len = read( rsock, rbuf, sizeof( rbuf ) );rbuf[len] = '\0'; <br>
} <br>
write( ms, rbuf, len ); <br>
write( ms, "<HR>\n", 5 ); <br>
} <br>
write( rsock, "TYPE A\n", 7 ); <br>
len = read( rsock, rbuf, sizeof( rbuf) ); rbuf[len] = '\0'; <br>
printf( rbuf ); <br>
initconn( rsock ); <br>
write( rsock, "LIST\n", 5 ); <br>
len = read( rsock, rbuf, sizeof( rbuf) ); rbuf[len] = '\0'; <br>
printf( rbuf ); <br>
if ( memcmp( rbuf, "550 ", 4 ) != 0 ) <br>
{ <br>
data1 = accept( data, (struct sockaddr *)NULL, (int * )NULL ); <br>
do <br>
{ <br>
memset( rbuf, 0, sizeof( rbuf) ); <br>
if (( len = read( data1, rbuf, sizeof( rbuf) )) < 0) <br>
puts( "Error in read stream message." ); <br>
else if ( len == 0 ) <br>
puts( "\n[ftp : end of connection.]\n" ); <br>
else <br>
{ <br>
printf( rbuf ); <br>
write( ms, rbuf, len ); <br>
} <br>
} while( len != 0 ); <br>
write( ms, "</PRE>", 6 ); <br>
close( data1 ); <br>
} <br>
close( data ); <br>
} <br>
write( rsock, "QUIT\n", 5 ); <br>
len=read( rsock, rbuf, sizeof( rbuf )); rbuf[len] = '\0'; <br>
printf( rbuf ); <br>
close( rsock ); <br>
return 0; <br>
} <br>
int processsock( int ms, char * buffer ) <br>
{ <br>
if ( memcmp( buffer, "GET http://", 11 ) == 0 && <br>
strstr( buffer, "Proxy-Connection: ") != NULL ) <br>
{ <br>
return http_proxy( ms, buffer ); <br>
} <br>
else if ( memcmp( buffer, "POST http://", 12 ) == 0 && <br>
strstr( buffer, "Proxy-Connection: ") != NULL ) <br>
{ <br>
return http_proxy( ms, buffer ); <br>
} <br>
else if ( memcmp( buffer, "GET ftp://", 10 ) == 0 && <br>
strstr( buffer, "Proxy-Connection: ") != NULL ) <br>
{ <br>
return ftp_proxy( ms, buffer ); <br>
} <br>
else /* unknown service, just echo */ <br>
{ <br>
printf( "%s", buffer ); <br>
write( ms, buffer, strlen( buffer ) ); <br>
} <br>
return 1; <br>
} <br>
int main( int argc, char * argv[] ) <br>
{ <br>
{ <br>
int sock, portnum, length; <br>
struct sockaddr_in server; <br>
struct sockaddr_in peername; <br>
int msgsock, rval ; <br>
printf( "Hu's MiniProxy ver 1.15 (c)Copyright 1996 Hu Qiwei, Tsinghua Un <br>
iv.\ <br>
n" ); <br>
if ( argc > 1 ) <br>
{ <br>
portnum = atoi( argv[1] ); <br>
if (portnum < 80) portnum = 80; <br>
} <br>
else <br>
{ <br>
printf( "USAGE : proxy [portnum]\n" ); <br>
/* exit( 2 ); <br>
*/ <br>
portnum=8787; <br>
} <br>
signal( SIGCLD, SIG_IGN ); <br>
sock = socket( AF_INET, SOCK_STREAM, 0 ); <br>
if ( sock < 0 ) <br>
{ <br>
puts( "Error in create socket!" ); <br>
exit( 1 ); <br>
} <br>
server.sin_family = AF_INET; <br>
server.sin_addr.s_addr = INADDR_ANY; <br>
server.sin_port = htons(portnum); <br>
if ( bind( sock, (struct sockaddr *)&server, sizeof( server ) ) < 0 ) <br>
{ <br>
puts( "Error in bind stream." ); <br>
exit( 1 ); <br>
} <br>
length = sizeof( server ); <br>
if ( getsockname( sock, (struct sockaddr * )&server, &length ) < 0 ) <br>
{ <br>
puts( "Error in get sock name!" ); <br>
exit( 1 ); <br>
} <br>
printf( "The socket port number has been assigned to #%d\n\n", <br>
ntohs( server.sin_port ) ); <br>
listen( sock, 20 ); <br>
while( 1 ) <br>
while( 1 ) <br>
{ <br>
msgsock = accept( sock, (struct sockaddr *)NULL, (int * )NULL ); <br>
if ( msgsock == -1 ) <br>
{ <br>
puts( "Error in accept!" ); <br>
exit( 1 ); <br>
} <br>
else <br>
if ( fork() == 0 ) <br>
{ <br>
length = sizeof ( peername ); <br>
getpeername(msgsock, (struct sockaddr *)&peername, &length ); <br>
printf( "##[%d - Connected to client: %s]\n\n", count, <br>
inet_ntoa( peername.sin_addr ) ); <br>
do <br>
{ <br>
memset( buf, 0, 1024 ); <br>
if (( rval = read( msgsock, buf, 1024 )) < 0) <br>
puts( "Error in read stream message." ); <br>
else if ( rval == 0 ) <br>
puts( "\n[End of connection.]\n" ); <br>
else <br>
{ <br>
rval = processsock( msgsock, buf ); <br>
} <br>
} while( rval != 0 ); <br>
printf( "##[%d - Shutdown connection to client: %s]\n\n", count, <br>
<br>
inet_ntoa(peername.sin_addr) ); <br>
shutdown( msgsock, 2 ); <br>
_exit( 0 ); <br>
} <br>
printf( "Service #%d resolved.\n", count++ ); <br>
close( msgsock ); <br>
}; <br>
exit( 0 ); <br>
} <br>
-- <br>
※ 修改:·zinger 於 Nov 13 20:53:33 修改本文·[FROM: 210.34.11.167] <br>
</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="192.htm">上一层</a>][<a href="266.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 + -