資源簡介
自己寫的openssl加密通信的代碼模板
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
//openssl頭文件
#include?
#include?
int?main(int?argc?char?*argv[])
{
int?sock_fd=-1; ? /*?TCP套接字????*/
SSL_CTX?*ctx=NULL;???? /*?SSL會話環境?*/
SSL?*ssl=NULL;????????? /*?SSL安全套接字?*/
struct?sockaddr_in?ser_addr; /*?服務器地址?*/
bzero(&ser_addr?sizeof(ser_addr));
if(?argc!=4?)?
{
printf(“argcment?wrong:ip?port?content\n“);
exit(0);
}
do
{
/*?申請SSL會話環境?*/
if(?NULL==(ctx=SSL_CTX_new(TLS_client_method()))?)????//使用SSL_CTX_new()創建會話環境,建立連接時要使用協議由TLS_client_method()來定,服務器由對應的TLS_server_method()來定。如果這一步出錯,需要查看錯誤棧來查看原因
{
ERR_print_errors_fp(stdout);
break;
}
/*?TCP連接?*/
if(?-1==(sock_fd=socket(AF_INET?SOCK_STREAM?0))?)
{
printf(“creat?socket?wrong\n“);
break;
}
ser_addr.sin_family?=?AF_INET;
ser_addr.sin_port?=?htons(atoi(argv[2]));
ser_addr.sin_addr.s_addr?=?inet_addr(argv[1]);
if(?-1==(connect(sock_fd?(struct?sockaddr?*)&ser_addr?sizeof(ser_addr)))?)
{
printf(“connect?wrong\n“);
break;
}
/*?SSL連接?*/
ssl=SSL_new(ctx);?????????/*?由會話環境申請一個SSL套接字?*/
SSL_set_fd(ssl?sock_fd);?/*?綁定SSL安全套接字和已連接TCP套接字?*/
if(?0>=SSL_connect(ssl)?)?/*?安全套接層握手?*/????//返回值為1,成功建立連接;小于等于零失敗,使用SSL_get_error()找出錯誤原因
{
ERR_print_errors_fp(stderr);
break;
}
/*?發送數據?*/
SSL_write(ssl?argv[3]?strlen(argv[3]));?//返回值大于零,發送成功,此時返回值等于第3個參數;小于等于零,發送失敗,可能原因是連接斷開或者出現錯誤,使用SSL_get_error()獲取錯誤原因
}while(0);
/*?關閉SSL連接,釋放SSL安全套接字資源?*/
if(?NULL!=ssl?)
{
SSL_shutdown(ssl);??//關閉一個活的TLS/SSL連接,會向對端發送“close?notify“,告訴對方
SSL_free(ssl);??????//減少ssl的引用次數,如果引用次數為零,就移除ssl指向的對象、釋放分配的內存;如果ssl是NULL,什么都不做
ssl=NULL;
}
/*?關閉TCP連接?*/
if(?-1!=sock_fd)
{
close(sock_fd);??????
sock_fd=-1;
}
/*?釋放SSL會話環境?*/
if(?NULL!=ctx?)
{
SSL_CTX_free(ctx);//減少ctx的引用次數,如果引用次數為零,就移除ctx指向的對象、釋放分配的內存;如果ctx是NULL,什么都不做
ctx=NULL;
}
return?0;
}
- 上一篇:原始pcap文件
- 下一篇:仿微信對話列表滑動刪除功能
評論
共有 條評論