安全中国首页 > 文章中心 > 网管天地
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

Linux平台socks5代理

更新时间:2008-1-26 0:09:47
责任编辑:阿loosen
热 点:

 if( AuthPassword( sock ) == -1 )
 {
 //printf( "auth password error\n" );
 return -1;
 }
 
 int real_server_sock = ParseCommand( sock );
 if( real_server_sock == -1 )
 {
 //printf( "parse command error.\n" );
 return -1;
 }
 
 ForwardData( sock, real_server_sock );

 close( sock );
 close( real_server_sock );
 
 return 0;
}

int main( int argc, char *argv[] )
{
 if( argc != 2 )
 {
 printf( "Socks5 proxy for test,code by YunShu\n" );
 printf( "Usage: %s <proxy_port>\n", argv[0] );
 printf( "Options:\n" );
 printf( " <proxy_port> ---which port of this proxy server will listen.\n" );
 
 return 1;
 }

 struct sockaddr_in sin;

 memset( (void *)&sin, 0, sizeof( struct sockaddr_in) );
 sin.sin_family = AF_INET;
 sin.sin_port = htons( atoi(argv[1]) );
 sin.sin_addr.s_addr = htonl(INADDR_ANY);

 int listen_sock = socket( AF_INET, SOCK_STREAM, 0 );
 if( listen_sock < 0 )
 {
 perror( "Socket creation failed\n");
 return -1;
 }

 int opt = SO_REUSEADDR;
 setsockopt( listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt) );

 if( bind( listen_sock, (struct sockaddr*)&sin, sizeof(struct sockaddr_in) ) < 0 )
 {
 perror( "Bind error" );
 return -1;
 }

 if( listen( listen_sock, MAX_USER ) < 0 )
 {
 perror( "Listen error" );
 return -1;
 }

 struct sockaddr_in cin;
 int client_sock;
 int client_len = sizeof( struct sockaddr_in );

 while( client_sock = accept( listen_sock, (struct sockaddr *)&cin, (socklen_t *)&client_len ) )
 {
 printf( "Connected from %s, processing\n", inet_ntoa( cin.sin_addr ) );

 pthread_t work_thread;
 if( pthread_create( &work_thread, NULL, (void *)Socks5, (void *)&client_sock ) )
 {
 perror( "Create thread error" );
 close( client_sock );
 }
 else
 {
 pthread_detach( work_thread );
 }
 }
}

上一页 1 2 3 4 

 
相关文章
一日一文章
 
一日一软件
一日一动画