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

📄 ssl_test.c

📁 it is know of https implement source code
💻 C
📖 第 1 页 / 共 2 页
字号:
            {                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 + -