?? ssl_test.c
字號:
{ printf( " ! ssl_write returned %d\n\n", ret ); break; } } if( opt->command & COMMAND_READ ) { if( bytes_to_read == 0 ) { bytes_to_read = rand() % opt->buffer_size; offset_to_read = 0; } ret = ssl_read( &ssl, read_buf + offset_to_read, bytes_to_read ); if( ret >= 0 ) { for( i = 0; i < ret; i++ ) { if( read_buf[offset_to_read + i] != (unsigned char) lcppm5( read_state ) ) { ret = 1; printf( " ! plaintext mismatch\n\n" ); goto exit; } } nb_read += ret; bytes_to_read -= ret; offset_to_read += ret; } if( ret == XYSSL_ERR_SSL_PEER_CLOSE_NOTIFY || ret == XYSSL_ERR_NET_CONN_RESET ) { ret = 0; goto exit; } if( ret < 0 && ret != XYSSL_ERR_NET_TRY_AGAIN ) { printf( " ! ssl_read returned %d\n\n", ret ); break; } } ret = 0; if( opt->max_bytes != 0 && ( opt->max_bytes <= nb_read || opt->max_bytes <= nb_written ) ) break; if( opt->conn_timeout != 0 && opt->conn_timeout <= (int) get_timer( &t, 0 ) ) break; }exit: fflush( stdout ); if( read_buf != NULL ) free( read_buf ); if( write_buf != NULL ) free( write_buf ); ssl_close_notify( &ssl ); x509_free( &srvcert ); rsa_free( &rsa ); ssl_free( &ssl ); net_close( client_fd ); return( ret );}#define USAGE \ "\n usage: ssl_test opmode=<> command=<>...\n" \ "\n acceptable parameters:\n" \ " opmode=client/server default: <none>\n" \ " iomode=block/nonblock default: block\n" \ " server_name=%%s default: localhost\n" \ " server_port=%%d default: 4433\n" \ " command=read/write/both default: read\n" \ " buffer_size=%%d (bytes) default: 1024\n" \ " max_bytes=%%d (bytes) default: 0 (no limit)\n" \ " debug_level=%%d default: 0 (disabled)\n" \ " conn_timeout=%%d (ms) default: 0 (no timeout)\n" \ " max_connections=%%d default: 0 (no limit)\n" \ " session_reuse=on/off default: on (enabled)\n" \ " session_lifetime=%%d (s) default: 86400\n" \ " force_cipher=<name> default: all enabled\n" \ " acceptable cipher names:\n" \ " SSL_RSA_RC4_128_MD5 SSL_RSA_RC4_128_SHA\n" \ " SSL_RSA_DES_168_SHA SSL_EDH_RSA_DES_168_SHA\n" \ " SSL_RSA_AES_128_SHA SSL_EDH_RSA_AES_256_SHA\n" \ " SSL_RSA_AES_256_SHA\n\n"int main( int argc, char *argv[] ){ int i, j, n; int ret = 1; int nb_conn; char *p, *q; struct options opt; if( argc == 1 ) { usage: printf( USAGE ); goto exit; } opt.opmode = DFL_OPMODE; opt.iomode = DFL_IOMODE; opt.server_name = DFL_SERVER_NAME; opt.server_port = DFL_SERVER_PORT; opt.command = DFL_COMMAND; opt.buffer_size = DFL_BUFFER_SIZE; opt.max_bytes = DFL_MAX_BYTES; opt.debug_level = DFL_DEBUG_LEVEL; opt.conn_timeout = DFL_CONN_TIMEOUT; opt.max_connections = DFL_MAX_CONNECTIONS; opt.session_reuse = DFL_SESSION_REUSE; opt.session_lifetime = DFL_SESSION_LIFETIME; opt.force_cipher[0] = DFL_FORCE_CIPHER; for( i = 1; i < argc; i++ ) { n = strlen( argv[i] ); for( j = 0; j < n; j++ ) { if( argv[i][j] >= 'A' && argv[i][j] <= 'Z' ) argv[i][j] |= 0x20; } p = argv[i]; if( ( q = strchr( p, '=' ) ) == NULL ) continue; *q++ = '\0'; if( strcmp( p, "opmode" ) == 0 ) { if( strcmp( q, "client" ) == 0 ) opt.opmode = OPMODE_CLIENT; else if( strcmp( q, "server" ) == 0 ) opt.opmode = OPMODE_SERVER; else goto usage; } if( strcmp( p, "iomode" ) == 0 ) { if( strcmp( q, "block" ) == 0 ) opt.iomode = IOMODE_BLOCK; else if( strcmp( q, "nonblock" ) == 0 ) opt.iomode = IOMODE_NONBLOCK; else goto usage; } if( strcmp( p, "server_name" ) == 0 ) opt.server_name = q; if( strcmp( p, "server_port" ) == 0 ) { opt.server_port = atoi( q ); if( opt.server_port < 1 || opt.server_port > 65535 ) goto usage; } if( strcmp( p, "command" ) == 0 ) { if( strcmp( q, "read" ) == 0 ) opt.command = COMMAND_READ; else if( strcmp( q, "write" ) == 0 ) opt.command = COMMAND_WRITE; else if( strcmp( q, "both" ) == 0 ) { opt.iomode = IOMODE_NONBLOCK; opt.command = COMMAND_BOTH; } else goto usage; } if( strcmp( p, "buffer_size" ) == 0 ) { opt.buffer_size = atoi( q ); if( opt.buffer_size < 1 || opt.buffer_size > 1048576 ) goto usage; } if( strcmp( p, "max_bytes" ) == 0 ) opt.max_bytes = atoi( q ); if( strcmp( p, "debug_level" ) == 0 ) opt.debug_level = atoi( q ); if( strcmp( p, "conn_timeout" ) == 0 ) opt.conn_timeout = atoi( q ); if( strcmp( p, "max_connections" ) == 0 ) opt.max_connections = atoi( q ); if( strcmp( p, "session_reuse" ) == 0 ) { if( strcmp( q, "on" ) == 0 ) opt.session_reuse = 1; else if( strcmp( q, "off" ) == 0 ) opt.session_reuse = 0; else goto usage; } if( strcmp( p, "session_lifetime" ) == 0 ) opt.session_lifetime = atoi( q ); if( strcmp( p, "force_cipher" ) == 0 ) { opt.force_cipher[0] = -1; if( strcmp( q, "ssl_rsa_rc4_128_md5" ) == 0 ) opt.force_cipher[0] = SSL_RSA_RC4_128_MD5; if( strcmp( q, "ssl_rsa_rc4_128_sha" ) == 0 ) opt.force_cipher[0] = SSL_RSA_RC4_128_SHA; if( strcmp( q, "ssl_rsa_des_168_sha" ) == 0 ) opt.force_cipher[0] = SSL_RSA_DES_168_SHA; if( strcmp( q, "ssl_edh_rsa_des_168_sha" ) == 0 ) opt.force_cipher[0] = SSL_EDH_RSA_DES_168_SHA; if( strcmp( q, "ssl_rsa_aes_128_sha" ) == 0 ) opt.force_cipher[0] = SSL_RSA_AES_128_SHA; if( strcmp( q, "ssl_rsa_aes_256_sha" ) == 0 ) opt.force_cipher[0] = SSL_RSA_AES_256_SHA; if( strcmp( q, "ssl_edh_rsa_aes_256_sha" ) == 0 ) opt.force_cipher[0] = SSL_EDH_RSA_AES_256_SHA; if( opt.force_cipher[0] < 0 ) goto usage; opt.force_cipher[1] = 0; } } switch( opt.opmode ) { case OPMODE_CLIENT: break; case OPMODE_SERVER: break; default: goto usage; } nb_conn = 0; do { nb_conn++; ret = ssl_test( &opt ); if( opt.max_connections != 0 && opt.max_connections <= nb_conn ) break; } while( ret == 0 );exit:#ifdef WIN32 printf( " Press Enter to exit this program.\n" ); fflush( stdout ); getchar();#endif return( ret );}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -