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

📄 s_client.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
📖 第 1 页 / 共 3 页
字号:
/* apps/s_client.c *//* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. *  * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to.  The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code.  The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). *  * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *    "This product includes cryptographic software written by *     Eric Young (eay@cryptsoft.com)" *    The word 'cryptographic' can be left out if the rouines from the library *    being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from  *    the apps directory (application code) you must include an acknowledgement: *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" *  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *  * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed.  i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] *//* ==================================================================== * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer.  * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. All advertising materials mentioning features or use of this *    software must display the following acknowledgment: *    "This product includes software developed by the OpenSSL Project *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to *    endorse or promote products derived from this software without *    prior written permission. For written permission, please contact *    openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" *    nor may "OpenSSL" appear in their names without prior written *    permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following *    acknowledgment: *    "This product includes software developed by the OpenSSL Project *    for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com).  This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */#include <assert.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <openssl/e_os2.h>#ifdef OPENSSL_NO_STDIO#define APPS_WIN16#endif/* With IPv6, it looks like Digital has mixed up the proper order of   recursive header file inclusion, resulting in the compiler complaining   that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which   is needed to have fileno() declared correctly...  So let's define u_int */#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__U_INT)#define __U_INTtypedef unsigned int u_int;#endif#define USE_SOCKETS#include "apps.h"#include <openssl/x509.h>#include <openssl/ssl.h>#include <openssl/err.h>#include <openssl/pem.h>#include <openssl/rand.h>#include "s_apps.h"#include "timeouts.h"#ifdef OPENSSL_SYS_WINCE/* Windows CE incorrectly defines fileno as returning void*, so to avoid problems below... */#ifdef fileno#undef fileno#endif#define fileno(a) (int)_fileno(a)#endif#if (defined(OPENSSL_SYS_VMS) && __VMS_VER < 70000000)/* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */#undef FIONBIO#endif#undef PROG#define PROG	s_client_main/*#define SSL_HOST_NAME	"www.netscape.com" *//*#define SSL_HOST_NAME	"193.118.187.102" */#define SSL_HOST_NAME	"localhost"/*#define TEST_CERT "client.pem" */ /* no default cert. */#undef BUFSIZZ#define BUFSIZZ 1024*8extern int verify_depth;extern int verify_error;#ifdef FIONBIOstatic int c_nbio=0;#endifstatic int c_Pause=0;static int c_debug=0;static int c_msg=0;static int c_showcerts=0;static void sc_usage(void);static void print_stuff(BIO *berr,SSL *con,int full);static BIO *bio_c_out=NULL;static int c_quiet=0;static int c_ign_eof=0;static void sc_usage(void)	{	BIO_printf(bio_err,"usage: s_client args\n");	BIO_printf(bio_err,"\n");	BIO_printf(bio_err," -host host     - use -connect instead\n");	BIO_printf(bio_err," -port port     - use -connect instead\n");	BIO_printf(bio_err," -connect host:port - who to connect to (default is %s:%s)\n",SSL_HOST_NAME,PORT_STR);	BIO_printf(bio_err," -verify arg   - turn on peer certificate verification\n");	BIO_printf(bio_err," -cert arg     - certificate file to use, PEM format assumed\n");	BIO_printf(bio_err," -certform arg - certificate format (PEM or DER) PEM default\n");	BIO_printf(bio_err," -key arg      - Private key file to use, in cert file if\n");	BIO_printf(bio_err,"                 not specified but cert file is.\n");	BIO_printf(bio_err," -keyform arg  - key format (PEM or DER) PEM default\n");	BIO_printf(bio_err," -pass arg     - private key file pass phrase source\n");	BIO_printf(bio_err," -CApath arg   - PEM format directory of CA's\n");	BIO_printf(bio_err," -CAfile arg   - PEM format file of CA's\n");	BIO_printf(bio_err," -reconnect    - Drop and re-make the connection with the same Session-ID\n");	BIO_printf(bio_err," -pause        - sleep(1) after each read(2) and write(2) system call\n");	BIO_printf(bio_err," -showcerts    - show all certificates in the chain\n");	BIO_printf(bio_err," -debug        - extra output\n");#ifdef WATT32	BIO_printf(bio_err," -wdebug       - WATT-32 tcp debugging\n");#endif	BIO_printf(bio_err," -msg          - Show protocol messages\n");	BIO_printf(bio_err," -nbio_test    - more ssl protocol testing\n");	BIO_printf(bio_err," -state        - print the 'ssl' states\n");#ifdef FIONBIO	BIO_printf(bio_err," -nbio         - Run with non-blocking IO\n");#endif	BIO_printf(bio_err," -crlf         - convert LF from terminal into CRLF\n");	BIO_printf(bio_err," -quiet        - no s_client output\n");	BIO_printf(bio_err," -ign_eof      - ignore input eof (default when -quiet)\n");	BIO_printf(bio_err," -ssl2         - just use SSLv2\n");	BIO_printf(bio_err," -ssl3         - just use SSLv3\n");	BIO_printf(bio_err," -tls1         - just use TLSv1\n");	BIO_printf(bio_err," -dtls1        - just use DTLSv1\n");    	BIO_printf(bio_err," -mtu          - set the MTU\n");	BIO_printf(bio_err," -no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol\n");	BIO_printf(bio_err," -bugs         - Switch on all SSL implementation bug workarounds\n");	BIO_printf(bio_err," -serverpref   - Use server's cipher preferences (only SSLv2)\n");	BIO_printf(bio_err," -cipher       - preferred cipher to use, use the 'openssl ciphers'\n");	BIO_printf(bio_err,"                 command to see what is available\n");	BIO_printf(bio_err," -starttls prot - use the STARTTLS command before starting TLS\n");	BIO_printf(bio_err,"                 for those protocols that support it, where\n");	BIO_printf(bio_err,"                 'prot' defines which one to assume.  Currently,\n");	BIO_printf(bio_err,"                 only \"smtp\" and \"pop3\" are supported.\n");#ifndef OPENSSL_NO_ENGINE	BIO_printf(bio_err," -engine id    - Initialise and use the specified engine\n");#endif	BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);	}int MAIN(int, char **);int MAIN(int argc, char **argv)	{	int off=0;	SSL *con=NULL,*con2=NULL;	X509_STORE *store = NULL;	int s,k,width,state=0;	char *cbuf=NULL,*sbuf=NULL,*mbuf=NULL;	int cbuf_len,cbuf_off;	int sbuf_len,sbuf_off;	fd_set readfds,writefds;	short port=PORT;	int full_log=1;	char *host=SSL_HOST_NAME;	char *cert_file=NULL,*key_file=NULL;	int cert_format = FORMAT_PEM, key_format = FORMAT_PEM;	char *passarg = NULL, *pass = NULL;	X509 *cert = NULL;	EVP_PKEY *key = NULL;	char *CApath=NULL,*CAfile=NULL,*cipher=NULL;	int reconnect=0,badop=0,verify=SSL_VERIFY_NONE,bugs=0;	int crlf=0;	int write_tty,read_tty,write_ssl,read_ssl,tty_on,ssl_pending;	SSL_CTX *ctx=NULL;	int ret=1,in_init=1,i,nbio_test=0;	int starttls_proto = 0;	int prexit = 0, vflags = 0;	SSL_METHOD *meth=NULL;#ifdef sock_type#undef sock_type#endif	int sock_type=SOCK_STREAM;	BIO *sbio;	char *inrand=NULL;#ifndef OPENSSL_NO_ENGINE	char *engine_id=NULL;	ENGINE *e=NULL;#endif#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_NETWARE)	struct timeval tv;#endif	struct sockaddr peer;	int peerlen = sizeof(peer);	int enable_timeouts = 0 ;	long mtu = 0;#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)	meth=SSLv23_client_method();#elif !defined(OPENSSL_NO_SSL3)	meth=SSLv3_client_method();#elif !defined(OPENSSL_NO_SSL2)	meth=SSLv2_client_method();#endif	apps_startup();	c_Pause=0;	c_quiet=0;	c_ign_eof=0;	c_debug=0;	c_msg=0;	c_showcerts=0;	if (bio_err == NULL)		bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);	if (!load_config(bio_err, NULL))		goto end;	if (	((cbuf=OPENSSL_malloc(BUFSIZZ)) == NULL) ||		((sbuf=OPENSSL_malloc(BUFSIZZ)) == NULL) ||		((mbuf=OPENSSL_malloc(BUFSIZZ)) == NULL))		{		BIO_printf(bio_err,"out of memory\n");		goto end;		}	verify_depth=0;	verify_error=X509_V_OK;#ifdef FIONBIO	c_nbio=0;#endif	argc--;	argv++;	while (argc >= 1)		{		if	(strcmp(*argv,"-host") == 0)			{			if (--argc < 1) goto bad;			host= *(++argv);			}		else if	(strcmp(*argv,"-port") == 0)			{			if (--argc < 1) goto bad;			port=atoi(*(++argv));			if (port == 0) goto bad;			}		else if (strcmp(*argv,"-connect") == 0)			{			if (--argc < 1) goto bad;			if (!extract_host_port(*(++argv),&host,NULL,&port))				goto bad;			}		else if	(strcmp(*argv,"-verify") == 0)			{			verify=SSL_VERIFY_PEER;			if (--argc < 1) goto bad;			verify_depth=atoi(*(++argv));			BIO_printf(bio_err,"verify depth is %d\n",verify_depth);			}		else if	(strcmp(*argv,"-cert") == 0)			{			if (--argc < 1) goto bad;			cert_file= *(++argv);			}		else if	(strcmp(*argv,"-certform") == 0)			{			if (--argc < 1) goto bad;			cert_format = str2fmt(*(++argv));			}		else if	(strcmp(*argv,"-crl_check") == 0)			vflags |= X509_V_FLAG_CRL_CHECK;		else if	(strcmp(*argv,"-crl_check_all") == 0)			vflags |= X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL;		else if	(strcmp(*argv,"-prexit") == 0)			prexit=1;		else if	(strcmp(*argv,"-crlf") == 0)			crlf=1;		else if	(strcmp(*argv,"-quiet") == 0)			{			c_quiet=1;			c_ign_eof=1;			}		else if	(strcmp(*argv,"-ign_eof") == 0)			c_ign_eof=1;		else if	(strcmp(*argv,"-pause") == 0)			c_Pause=1;		else if	(strcmp(*argv,"-debug") == 0)			c_debug=1;#ifdef WATT32		else if (strcmp(*argv,"-wdebug") == 0)			dbug_init();#endif		else if	(strcmp(*argv,"-msg") == 0)			c_msg=1;		else if	(strcmp(*argv,"-showcerts") == 0)			c_showcerts=1;		else if	(strcmp(*argv,"-nbio_test") == 0)			nbio_test=1;		else if	(strcmp(*argv,"-state") == 0)			state=1;#ifndef OPENSSL_NO_SSL2		else if	(strcmp(*argv,"-ssl2") == 0)			meth=SSLv2_client_method();#endif#ifndef OPENSSL_NO_SSL3		else if	(strcmp(*argv,"-ssl3") == 0)			meth=SSLv3_client_method();#endif#ifndef OPENSSL_NO_TLS1		else if	(strcmp(*argv,"-tls1") == 0)			meth=TLSv1_client_method();#endif#ifndef OPENSSL_NO_DTLS1		else if	(strcmp(*argv,"-dtls1") == 0)			{			meth=DTLSv1_client_method();			sock_type=SOCK_DGRAM;			}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -