OpenSSL 中的 SSL 加密是通过 SSL/TLS 协议来实现的。SSL/TLS 是一种安全通信协议,可以保障通信双方之间的通信安全性和数据完整性。...(); // 载入所有SSL错误消息 SSL_load_error_strings(); // 以SSLV2和V3标准兼容方式产生一个SSL_CTX即SSLContentText ctx...{ return 0; } if (listen(sockfd, 10) == -1) { return 0; } while (1) { SSL...ssl, sockfd); // 建立 SSL 连接 if (SSL_connect(ssl) !...= -1) { printf("[+] SSL连接类型: %s \n", SSL_get_cipher(ssl)); ShowCerts(ssl); } //接收服务器来的消息
OpenSSL 中的 SSL 加密是通过 SSL/TLS 协议来实现的。SSL/TLS 是一种安全通信协议,可以保障通信双方之间的通信安全性和数据完整性。...// 载入所有SSL错误消息 SSL_load_error_strings(); // 以SSLV2和V3标准兼容方式产生一个SSL_CTX即SSLContentText ctx = SSL_CTX_new...{ return 0; } if (listen(sockfd, 10) == -1) { return 0; } while (1) { SSL* ssl; int...); // 建立 SSL 连接 if (SSL_connect(ssl) !...= -1) { printf("[+] SSL连接类型: %s \n", SSL_get_cipher(ssl)); ShowCerts(ssl); } //接收服务器来的消息 最多接收
面向连接的协议,数据传输前需要建立连接,通过“三次握手”机制确认连接状态。 传输效率 传输效率高,因为不需要建立连接和维持连接状态,开销小。...如果在创建套接字时发生错误,socket函数返回-1,并设置全局变量errno以指示错误原因。此时,可以调用errno变量或perror()函数来获取具体的错误信息。...返回值: 如果bind函数成功执行,它返回0。 如果出现错误,返回-1,并设置全局变量errno以指示错误原因。...如果没有可用数据或者连接已经关闭,返回0。 如果出现错误,返回-1,并设置errno错误号。此时可以通过perror()函数来打印出错误信息。...这可能是因为buf指向的空间长度为0,或者在使用UDP协议时,sendto函数成功地发送了0字节的数据。 如果返回值等于-1,表示发送过程中出现了错误。
原文地址:socket的五大误区 作者:青竹玉简 隐患 1.忽略返回状态 第一个隐患很明显,但它是开发新手最容易犯的一个错误。如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失。...反过来,这可能传播错误,使定位问题的源头变得困难。 捕获并检查每一个返回状态,而不是忽略它们。考虑清单 1 显示的例子,一个套接字 send 函数。 清单 1....这是新颖的抽象,意味着一整套的 API 可以用在广泛的设备类型上。 考虑 read API 函数,它从文件读取一定数量的字节。...read 函数返回读取的字节数(最高为您指定的最大值);或者 -1,表示错误;或者 0,如果已经到达文件末尾。...使用 netstat,可以查看当前活动的连接(按单个协议进行查看),查看特定状态的连接(比如处于监听状态的服务器套接字)和许多其他的信息。
,确保发送方的发送速率不超过接收方的接收能力 错误处理 如果数据报在传输过程中出错,则丢弃该数据报,由上层协议负责错误处理 通过确认和重传机制来处理错误,确保数据的正确传输 在现阶段,我们要关注的是:...四、返回值 成功时,listen函数返回0。 失败时,返回-1,并设置errno以指示错误原因。...如果连接成功,connect函数返回0;如果连接失败,则返回-1,并设置errno以指示错误原因。 四、使用场景 connect函数主要在客户端编程中使用,用于与服务器建立连接。...这意味着守护进程不会接收任何输入,其输出和错误也不会显示在终端或任何文件中。 三、返回值 成功时,daemon函数返回0。 失败时,返回-1,并设置errno以指示错误原因。...如果调用失败,则返回 -1,并设置 errno 以指示错误原因。
正确示例:sslscan --show-certificate google.com错误示例:sslscan google.com --show-certificate1.扫描支持的SSL/TLS版本、...如果此时已经满足需求,则无需加任何多余的参数:sslscan 2.检测OCSP的状态(--ocsp)1)CRL和OCSP在此之前,首先了解下什么是CRL。...基于上面两个历史原因,在RFC 2560又推出了OCSP(Online Certificate Status Protocol)在线证书状态协议,可以完美解决上面两个问题,首先支持实时检查证书状态的机制...1.client向Web服务器发起TLS握手请求;2.Web服务器响应TLS握手(返回证书);3.client向CA证书颁发机构的OCSP服务器发起OCSP查询;4.CA证书颁发机构的OCSP服务器向client...总的来说,使用sslscan可以大大提升网站和应用程序的安全性,保护用户的敏感信息和隐私不被泄露,比如弱密码套件、过时的协议版本、证书吊销等,提前确认安全隐患,防患于未然。
非阻塞模型下,select或者epoll会返回sockfd可读,应用层对其进行读取时, 收到RST的client端,如果调用read函数,读取,是返回RST错误的 解决方案2:可以 第二次 send 返回管道信号...根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时, 系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。...,正常的返回读取字节或者堵塞,RST的返回错误)read Return Value On success, the number of bytes read is returned (zero indicates...end of file) On error, -1 is returned, and errno is set appropriately EAGAIN or EWOULDBLOCK EINTR EBADF...1,客户端尝试与服务器未对外提供服务的端口建立TCP连接,服务器将会直接向客户端发送reset报文。
2、套接字描述符 其实就是一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。...失败时返回-1,并设置errno变量。 在网络程序中,当我们向套接字文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是全部的数据。2)返回的值小于0,此时出现了错误。...SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。...函数接收请求向客户端发送SYN K ,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K ,ACK J+1之后,这时connect返回,并对SYN K进行确认;服务器收到ACK...[.], ack 1, 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1) 客户端和服务器进入ESTABLISHED状态后,可以进行通信数据交互。
Currently only DECNet has these semantics on Linux.对于某些需要明确确认的协议,例如DECNet,accept()可以被认为仅仅是取消下一个连接请求,而不意味着确认...在新的文件描述符上的正常读取或写入可以暗示确认,关闭新的套接字可以暗示拒绝。目前在Linux上只有DECNet具有这些语义。...On error, -1 is returned, and errno is set appropriately成功时,这些系统调用返回一个非负整数,它是所接受套接字的描述符。...错误时返回-1,并适当设置 errno。...为了保证可靠运行,应用程序应该在accept()之后检测协议定义的网络错误,并通过重试将它们像EAGAIN一样处理。
失败时返回-1,并设置errno变量。 在网络程序中,当我们向套接字文件描述符写时有俩种可能。1)write的返回值大于0,表示写了部分或者是全部的数据。2)返回的值小于0,此时出现了错误。...大致流程如下: 客户端向服务器发送一个SYN J 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1 客户端再想服务器发一个确认ACK K+1 只有就完了三次握手,但是这个三次握手发生在...图1、socket中发送的TCP三次握手 从图中可以看出,当客户端调用connect时,触发了连接请求,向服务器发送了SYN J包,这时connect进入阻塞状态;服务器监听到连接请求,即收到SYN J...包,调用accept函数接收请求向客户端发送SYN K ,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K ,ACK J+1之后,这时connect返回,并对SYN K进行确认...) == -1 ){ printf("create socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0);
CURL错误列表 curl_exec($ch);//执行curl if (curl_errno($ch)) { echo 'Curl error: ' . curl_error($ch);//出错输出错误...} curl_close($ch);//关闭curl 同理,像正则,Json,数据库这些出错时基本都会有提供有帮助的错误信息 CURL状态码列表 状态码 状态原因 解释 0 正常访问 1 错误的协议...此版cURL 不支持这一协议。 2 初始化代码失败 初始化失败。 3 URL格式不正确 URL 格式错误。语法不正确。 4 请求协议错误 5 无法解析代理 无法解析代理。无法解析给定代理主机。...70 超出服务器磁盘空间 TFTP 服务器磁盘空间不足。 71 非法TFTP操作 非法的TFTP 操作。 72 未知TFTP传输的ID 未知TFTP 传输编号(ID)。...79 错误发生在SSH会话 SSH 会话期间发生一个未知错误。 80 无法关闭SSL连接 未能关闭SSL 连接。
,连接重置,client收到RST段后无法立刻通知应用层,只把这个状态保存在TCP协议层。..."readLen:%ld\n",readLen); } } 客户端向服务端写5000字节以后先休眠一秒是为了将数据发送出去,确认TCP协议层已收到服务端响应的RST...分节,然后再进行读操作,此时read返回-1.而不再是0; 先运行服务端,再运行客户端,客户端打印信息如下: 发送成功 totalSize = 5000 读取失败 errno = 54 #defineECONNRESET...:服务器主机进程终止或者崩溃后重启,客户端在不write的情况下不会知道,read会返回ECONNRESET错误或者超时; 解决方法用select: 1....如果对端TCP发送一个RST(对端主机崩溃并重新启动),那么该套接字变为可读,并且read返回-1,而errno中含有确切的错误码; 这个问题在select详解中讲述 情况三: 修改客户端程序如下,服务端不变
OSPF的五种分组类型: 问候分组,用来发现和维持邻站的可达性。 数据库描述分组,向邻站给出自己的链路状态数据库汇总的所有链路状态项目的摘要信息。...6.4 电子邮件 6.4.1 电子邮件系统的组成结构 电子邮件的三个最主要的组成构建:用户代理、邮件服务器和电子邮件使用的协议(SMTP、POP3)。 用户代理UA:用户与电子邮件系统的接口。...邮件发送协议和读取协议:邮件发送协议用于用户代理向邮件服务器发送邮件或在邮件服务器之间发送邮件,通常使用SMTP。邮件读取协议用于用户代理从邮件服务器读取邮件,如POP3....不至于发送了很长时间才发现是地址错误,浪费通信资源。 连接释放。邮件发送完毕后释放资源 POP3协议,邮局协议,是一个非常简单但功能有限的邮件读取协议。...在接收方计算机中的用户必须运行POP客户程序 下载并保留工作方式:用户从邮件服务器读取了邮件之后,邮件依旧会保存在邮件服务器上,下次可以再次从服务器上读取该邮件。
以访问百度为例,先通过三次握手建立连接,第一次握手:客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待服务器确认;第二次握手:服务器收到 syn 包,必须确认客户的 SYN...(ack=j+1),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包...ACK (ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。...三次握手建立连接: 第一次握手,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待服务器确认; 第二次握手,服务器收到 syn 包,必须确认客户的 SYN(ack=j+1...=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。
:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户器和客务器进入ESTABLISHED状态,完成三次握手。...SYN K ,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K ,ACK J+1之后,这时connect返回,并对SYN K进行确认;服务器收到ACK K+1时,accept返回...SYN+ACK包,向服务器发送确认包ACK(ack=k+1) 客户端和服务器进入ESTABLISHED状态后,可以进行通信数据交互。...但是,如果意外断开,客户端(3g的移动设备)并没有正常关闭socket。双方并未按照协议上的四次挥手去断开连接。...另外,如果出现EINTR即errno为4,错误描述Interrupted system call,操作也应该继续。如果recv的返回值为0,那表明连接已经断开,接收操作也应该结束。
否则返回-1并置相应的errno。...返回值 若成功则返回0,否则返回-1并置相应的errno。 connect函数 该函数用于客户端跟绑定了指定的ip和port并且处于LISTEN状态的服务端进行连接。...若发生错误则返回-1并置相应的errno。...返回值 在recv函数中: 若成功,则返回所读取到的字节数 否则返回-1,置errno 在send函数中: 若成功,则返回成功写入的字节数 事实上,当返回值与nbytes不等时,也可以认为其出错。...注意到服务器端在每接收到一个请求的时候都会将收到的内容在屏幕上打印出来。要知道这种与输出设备交互的IO是很慢的,于是这便是一个要优化掉的点。
内容结构由前面的协议族决定。 addrlen:地址的长度 返回值: 若成功,返回0,否则返回-1,错误信息存在errno中; d....,代表与返回客户的TCP连接,否则返回-1,错误信息存在errno中; f....返回值: 若成功,返回接收到的字节数,另一端已关闭则返回0,否则返回-1,错误信息存在errno中; g....返回值: 若成功,返回0,否则返回-1,错误信息存在errno中; d....返回值: 若成功,返回发送的字节数,否则返回-1,错误信息存在errno中 d.
客户端校验(服务器端当然也要执行):服务器端校验不能被替代,有两个优点:1)更好的用户体验,因为反馈迅速;2)阻止了后台的无用请求,从而提高有效性。...当然,服务器中也要保存key。当用于session存储机制时,Rails的cookie会和服务器的APP SECRET一起使用。...忘记密码和电子邮件确认的token:为忘记密码或电子邮件确认生成一个token时,请确保使用安全的伪随机数生成器(RPNG),否则可能被猜到。使用可以信任的库/语言API。...确认用户的电子邮箱或电话:在发送电子邮件或者通知之前要先确认这个邮箱或者电话是否属于该用户。值得推荐的做法是非阻塞法,即让用户可以在没有确认的情况下登录,但这也会影响线上用户的使用。...看看Facebook:你可以使用未经证实的账户1天。之后,你必须在登录之前确认邮件或电话。
假设我们正在传递的数据是 3D游戏中一个角色的状态更新, 这时我们等待的数据是用来描写叙述 T-1 时间点的状态。 而T时间点的数据包已经接收。那么T-1 秒的数据包就是不须要的了。...:before/connect initialization SSL_connect:SSLv2/v3 write client hello A SSL_connect:SSLv3 read server...:1 depth=0 /description=ABjQuqt3nPv7ebEG/C=US /CN=www.igvita.com/emailAddress=ilya@igvita.com verify...return:1 SSL_connect:SSLv3 read server certificate A SSL_connect:SSLv3 read server done A SSL_connect...finished A SSL_connect:SSLv3 flush data SSL_connect:SSLv3 read finished A --- Certificate chain 0 s:
TCP 四次挥手的过程如下: 具体过程: 客户端主动调用关闭连接的函数,于是就会发送 FIN 报文,这个 FIN 报文代表客户端不会再发送数据了,进入 FIN_WAIT_1 状态; 服务端收到了 FIN...报文,然后马上回复一个 ACK 确认报文,此时服务端进入 CLOSE_WAIT 状态。...FIN 包,并发送 ACK 确认包给服务端,此时客户端将进入 TIME_WAIT 状态; 服务端收到 ACK 确认包后,就进入了最后的 CLOSE 状态; 客户端经过 2MSL 时间之后,也进入 CLOSE...服务端的代码如下,做的事情很简单,就读取数据,然后当 read 返回 0 的时候,就马上调用 close 关闭连接。因为 TCP 延迟确认机制是默认开启的,所以不需要特殊设置。...读取客户端发送的数据 int n = read(clientfd, message, MAXLINE); if(n 0) { // 读取错误
领取专属 10元无门槛券
手把手带您无忧上云