【网络协议】HTTPS协议

微信协议mmtls的分析研究与总结 前言 mmtls是基于1.3的tls协议简化修改而来,根据某公司的描述,这种安全可行,用于短连接的安全模式,也给了其他的公司启发,一方面,使用https在越狱root环境下,也容易被窥探,所以开发一种通用而安全的短连接加密协议,确实有些必要,我们想看看到底是如何实现的,所以抓个包,hook下数据来看看。 (不太清楚在这样的氛围下,能不能讨论这个,所以我决定先写一部分,要是可以继续说,再写后半部分,大家参考这种实现,实现出自己的通用加密传输协议) 关于mmtls的介绍可以阅读这篇文章 协议源码????【 16 阅读详情

首先讲解一下这篇文字的背景。你看到的这篇文章其实已经写了很久了,不过在最近进行了一次大的改版。因为作者之前写这篇文字的时候并没有完全掌握https协议的精髓,只是记录下了https协议的一些知识点,虽然这期间作者也陆续增添了几次内容。直到作者前几天在听完某大佬分享了https协议,并产生了深深的自我怀疑——为什么有人可以随时把https建立连接的过程讲得那么清楚?这个过程明明很复杂啊!大佬当时给我的答案是:“那你就是没有真正理解!真正理解了是不会忘记的!”。于是,作者在大脑中深度思考了两天,并翻阅了所有能翻阅的资料后,终于把思路理顺了。。。

 

一、读完本文你将收获什么?

1、一张可以概括https建立连接过程的图,当别人询问你https相关知识时,你的脑海里只需要检索出这幅图就可以了。

2、区分几个看似很好理解,却很容易理解错,而要想掌握https协议又必须知道的密码学基础知识。比如,

(1)「密钥」、「密码」、「加密」这三者有什么关系?

(2)什么是「对称加密」和『非对称加密」?

(3)什么是「公钥」和「私钥」?

(4)什么是「数字签名」和「数字证书」?

3、「https协议建立连接」的过程和「建立TSL连接」的过程有什么关系?

4、https协议的精髓是什么?学会了什么,才算懂得https协议了?

 

接下来我们由浅入深逐步揭开https协议的神秘面纱。准备好跟作者一起探索https协议之旅了吗?let's go!!

 

二、HTTP协议有什么问题

  • 如果你通过http协议访问一个网站,其所有内容都是明文传输。这意味着你的私人信息(用户名、密码)可能被别人看到。举个栗子,当你连接到wifi上,你和服务端通过http协议传输的任何内容都可以被其他连接到该wifi的用户看到。
  • 如果你通过http协议访问一个网站,服务端返回的数据很可能被第三方篡改。举个栗子,当你看爱奇艺视频时,服务端本来发送给你的是“创造101”小姐姐的视频,可这视频可以被第三方截取,然后添加一段超级烂的广告再返回给你。
  • 如果你通过http协议访问一个网站,服务端返回的数据很可能被掉包。举个栗子,当你想在淘宝买件衣服时,第三方可以截取淘宝返回的商品详情,直接给你换成亚马逊的某件衣服。

总之你通过http协议访问一个网站时,很可能就像下面这幅图一样。

总结一下,https协议存在以下三个问题:「窃听风险」、「篡改风险」、「冒充风险」。

而https协议的产生就是为了解决这三个问题。

 

三、HTTPS握手的整个过程

你要连接到https://github.com/colinNaive这个网站时,你看到的一切就只是你能看到的,你看不到的还有复杂的https握手的整个过程。

下图可以概括https握手的整个过程。这里可以先暂停一下,花几分钟时间仔细研究一下这张图。

https握手具体的步骤如下:

  1. 服务端生成一个公钥和一个私钥,然后把公钥发给CA进行认证。那么CA怎么认证的呢?CA自己也有一个公钥和一个私钥,它把自己的公钥内置到各大主流浏览器中,然后用自己的私钥来加密服务端发来的公钥,并把加密好的公钥返还给服务端。(严格意义上说,这一步还不是https握手的具体步骤之一,这一步是准备步骤,准备好了这一步才可以进行https握手)。
  2. 客户端请请求服务器发送建立连接消息,消息中包含支持的加密算法,使用的协议等。
  3. 服务器收到客户端支持的加密算法后,和自己支持的加密算法进行比对,如果不符合,就断开连接。否则,服务端对客户端回应一个消息,消息中包含:符合的加密算法、数字证书和数字签名。
  4. 客户端收到消息后,对证书的真伪进行验证。
  5. 验证通过之后,客户端会生成一个随机字符串,然后用服务端发来的公钥进行加密,这里就保证了只有服务端能够看到这个随机字符串。同样,客户端生成一个数字签名。
  6. 服务器接收到到随机秘钥,然后开始进行数据交换。

 

可能你对上面的步骤仍然存在疑惑,下面我们来一一为你解惑。

 

四、HTTPS协议简介

最初在作者浅薄的认识里,https协议是这样的——“https协议是更安全的http协议,它比http协议多了一个加密连接”。这个理解的后半句其实是含糊其辞的,不准确的。「加密连接」是什么鬼?到底是加密,还是连接?https协议到底比http协议多了什么?其实准备的说法应该是这样的:

  • https协议比http协议多了加密传输(https协议中所有客户端与服务端之间通信的数据都是经过加密的)。
  • https协议比http协议多了TSL连接(TSL连接保证了客户端与服务端建立了安全的连接)。

1、HTTPS是什么?

聊了这么多,https到底是什么呢?我们首先来看一张图。

最底层是Network层,上面是IP层,再上面是传输层,再往上看,是TLS层,然后是HTTP层。这就是https协议的整个层次图。也就是说,相比http协议,https协议在传输层之上多了一个TLS层,弄懂TLS层做了什么,就掌握了https协议的精髓。

总结一下,HTTPS协议是工作在TLS层上的HTTP协议,通过在传输层和HTTP层之间加入TLS层(Transport Layer Security)来「加密、认证、数据完整性保护」。这三个词你现在可能不是很理解,不用担心,读完本文你就可以理解这三个词的含义了。

不过,这里总结出一个公式:

HTTPS = 加密 + 认证 + 数据完整性保护 + HTTP

 

2、TLS协议是什么?

很多人理解中的https中的s就是SSL,殊不知,SSL已经在技术升级换代中被替代,替代SSL的就是TSL。TSL是SSL的现实版应用。我们来看看TSL是如何替代SSL的:

  • 1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。
  • 1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。
  • 1996年,SSL 3.0版问世,得到大规模应用。
  • 1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。
  • 2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的修订版。

很明显TSL就是SSL的升级版。

 

为了能真正理解https协议,我们还必须弄懂以下几个概念

 

五、必须要弄懂的几个密码学基本概念

1、密钥、密码、加密

  • 密钥是一种参数,它是在「明文转换为密文」或「密文转换为明文」的算法中输入的参数。
  • 密码是一种特定的暗号或口令,常在个人取款或保密通信中用到。
  • 加密包含算法和密钥两个元素。算法将密钥和密钥数据结合产生一个不易理解的密文。

我们说要对https协议传输的数据进行加密,那是怎么加密的呢?我们知道是通过密钥和算法,那么密钥和算法是不是都是保密的呢?答案是“No!”。要想搞清楚https加密的算法其实不难,最常用的加密算法也就那么几种,而这其中RSA加密算法是最普遍的。那么什么是保密的呢?是传入加密算法中的参数——密钥。

 

2、对称加密&非对称加密

  • 对称加密,又称共享密钥。对称密钥在加密和解密的过程中使用的密钥是相同的,常见的对称加密算法有DES、3DES、AES、RC5、RC6。缺点是发送方和接收方需要协商共享同一把密钥,优点是计算速度快。

 

  • 非对称加密,又称公开密钥。服务端会生成一对密钥,一个私钥保存在服务端,仅自己知道;另一个是公钥,可以发布供任何人使用。客户端通过公钥加密的明文,需要服务端用私钥解密。之所以称为不对称加密,是因为其加密和解密需要不同的密钥。

 

这里我们重点讲一下非对称加密。首先请思考一下这几个问题。

  • 公钥加密,可以由公钥解密吗?
  • 私钥加密,可以由私钥解密吗?
  • 私钥是保存在客户端,还是保存在服务端?

公钥加密,只能由私钥解密;而私钥加密,只能由公钥解密。那如果公钥加密由公钥解密会解密出什么呢?答案是什么都解密不出来。我们可以简单的模拟一下,用AES算法加密,用DES算法解密。道理是相类似的。这里提供一个在线加解密测试网址:

http://tool.oschina.net/encrypt

在https协议中私钥是保存在服务端的,这一点比较容易搞错。因为离我们日常开发最近的能接触到公钥和私钥的是使用git时,配置git时私钥是保存在客户端,而公钥是保存在github上的,这和https协议是不同的。

 

3、数字签名

把服务端报文通过hash处理,得到摘要信息,然后再通过服务端私钥加密,就生成了一个数字签名。数字签名是用来验证传输的内容是不是真实服务器发送的数据,发送的数据有没有被篡改过。那么数字签名是怎么用来验证传输内容有没有被篡改过呢?下面我们来看一下验证过程:

  • 第一步:服务端把报文经过hash处理,生成摘要信息(digest1),把这个摘要信息用私钥加密,得到一个数字签名。
  • 第二步:当客户端接收到数据,把签名抽取出来,用公钥来解密。
  • 第三步:客户端将报文提取出来做同样的hash处理,得到digest2,与digest1比较,如果相等则确认没有被篡改过。

这里为什么要清楚数字签名的概念?因为TSL层握手过程中,就要验证数据的完整性,这里就用到了数字签名。

这里总结两个公式:

摘要 = 报文 + hash

摘要 -> 服务端私钥进行加密 = 数字签名

 

4、数字证书

刚讲完了数字签名,怎么又冒出来了一个数字证书?作者是不是弄错了?数字证书是不是就是数字签名?数字证书跟数字签名是完全不同的两个存在,这里请不要搞混了。

数字证书的作用是:

  • 证明“数据没有被掉包,确实是来自己客户端请求的服务器”。
  • 把服务端生成的公钥顺利发送给客户端。

公钥为什么要发送给客户端呢?因为在客户端验证了“数据完整性”、“数据没有被掉包”后,会生成了随机数,这个随机数会发送给服务端,在服务端接收到该随机数后,客户端和服务端就会用该随机数进行对称加密。那怎么保证这个随机数能安全的到达服务端呢?就需要用公钥加密,然后服务端收到随机数后再用私钥解密。

向CA提交的证书申请文件如下:

这里总结一个公式:

服务端公钥 + 服务端基本信息 -> CA私钥 = 数字证书

 

六、总结

本文讲解了https的握手的完整过程。在开始写这篇文章之前,作者对于https的握手过程的认知是混乱的,经过几天的深度思考后,作者写下了这篇文章。这篇文章包含了作者的全部思考过程。当你看到这里时,作者已经把自己认为需要讲解的知识点都讲解了,如果你还有疑问,可以随时评论,作者会第一时间回复。

 

七、参考

https://www.cnblogs.com/ehcoo/p/6368304.html

https://blog.youkuaiyun.com/xiaofei0859/article/details/70747034

https://www.jianshu.com/p/33d0f8631f90

https://www.jianshu.com/p/b0b6b88fe9fe

https://jingyan.baidu.com/article/a3a3f811cb3e0d8da3eb8a5e.html

 

微信MMTLS加密协议安全性分析 Alert协议用于通知对端发生错误;在AES-GCM的加密模式下,重复使用相同的(密钥,IV)元组是灾难性的,因为它允许从AES-GCM身份验证标签中恢复密钥,并且强大的对手可能会暴力破解特定的(密钥,IV)组合。例如,曾有不法分子伪装成微信官方客服,以“支付安全认证”“安全支付管理”等昵称向用户发送消息,要求点击发送的网络链接,进行“微信二次实名认证”,当用户点击链接后,会划扣账户资金。隐私设置选项:用户可以根据自己的需求,对朋友圈权限、添加好友方式等进行设置,控制个人信息的可见范围,保护自己的隐私。 阅读详情

相关推荐

对网络协议栈(HTTP/HTTPS/TCP)的理解

对网络协议栈(HTTP/HTTPS/TCP)的理解

T_iAn_T的博客 1423

安卓某信协议分析

部分算法截图 这里经过处理,不然应用层加密不是AES这种,而是ecdh, 那种我没分析 mmtls 主要用到了openssl 中的函数 mmtls 三种握手方式 mmtls 只是传数据的时候用下,和业务无关 handshake mode 1, ciphersuite TLS_ECDHE_ECDSA_WITH_AES_128_GCM_AEAD handshake mode 2, ciphersuite TLS_PSK_ECDSA_WITH_AES_128_GCM_AEAD (登录hook日志发现,主要是这种

平凡者的专栏 4900

运维的基本概念:基础的网络协议(TCP/IP, HTTP/HTTPS)

网络协议是实现数据传输和通信的基础,运维工程师需要掌握TCP/IP和HTTP/HTTPS协议的基本概念和工作原理,才能有效地管理和维护系统。希望本文能够帮助读者更好地理解网络协议的基本知识,并提供一些实用的运维示例。通过不断学习和实践,运维工程师可以提升自己的技能,为企业的IT系统保驾护航。

Echo_Wish 1786

微信MMTLS协议深度解析与安全通信实现

V1PrivKey, V1pubKey := Algorithm.GetECDH415Key() // P-256曲线。helloContent.Write([]byte(lib.RandSeq(32))) // 随机化ClientRandom。V2PrivKey, V2pubKey := Algorithm.GetECDH415Key() // 备份密钥。hkdfKey := sha256.Sum256(sharedKey) // HKDF扩展基础密钥。

weixin_65409651的博客 1521

微信小程序 深入探究

微信的请求方式(mmtls) 通过fiddler抓包可以看到,微信以mmtls方式发出http请求, 如:http://short.weixin.qq.com/mmtls/21a3ff59。 基于TLS1.3草案标准,设计实现安全通信协议mmtls。 下三篇文章大致了解这种请求的原理 SSL/TLS协议运行机制的概述 基于TLS1.3的微信安全通信协议mmtls介绍 聊聊HTTPS和SSL/TLS协议 微信开发者工具 小程序基于的浏览器内核 微信小程序运行在三端:iOS、Android 和 用于调试的开发者工具 在 iOS 上,小程序的 javascript 代码是运行在 JavaScript

QT银行叫号排队系统

这个项目是基于windows下开发的,与sqlite数据库的结合使用,实现模拟银行的叫号排队机

探秘MMTLS:打造安全高效的微服务通信框架

探秘MMTLS:打造安全高效的微服务通信框架 去发现同类优质开源项目:https://gitcode.com/ 是一个强大的微服务间安全通信框架,它基于TLS(Transport Layer Security)协议,旨在为分布式系统提供高效、可靠的加密传输层保护。本文将深入解析MMTLS的技术特性,应用场景,并阐述其独特优势,以期吸引更多开发者加入并使用。 项目简介 MMTLS 主要关注微服务间的...

gitblog_00005的博客 987

Windows平台c++工程base64与二进制文件相互转化

在前人的基础上增加了json解析封装得到base64或反转成文件。包括案例,源代码。 调用简单,不错的学习案例。 std::unique_ptrp(new const char*(readfile64("{\"filename\":\"D:\\\\job\\\\greatwall\\\\test\\\\1.jpg\"}"))); if (!*p.get()) return -1; int len = strlen(*p.get()); printf("%s\n",*p.get()); char* pcOut = new char[len + MAX_PATH]; memset(pcOut,0x00,sizeof(pcOut)); sprintf(pcOut,"{\"base64\":\"%s\",\"filename\":\"%s\"}",*p.get(),"D:\\\\job\\\\greatwall\\\\test\\\\out.jpg"); //const char* ret = _64tofile(pcOut); std::unique_ptrret(new const char*(_64tofile(pcOut))); printf("%s\n",*ret.get());

【JavaSE】【网络协议】HTTPS

HTTPS工作流程

yj20040627的博客 5278

局域网远程修改windows密码

本软件支持在局域网内远程修改操作系统用户帐户的密码,只有一个文件,绿色版,相当实用!

自制PLC IO接口图纸

自制PLC IO接口图纸,STM8S MCU

网络协议是怎么应用的——ip,http,https等协议是如何用到请求中的

摘要:网络协议的应用过程是分层协作的结果。浏览器生成HTTP请求后,操作系统通过TCP/IP协议栈自动封装数据包,由网络设备传输。应用层协议由应用程序实现,底层协议由系统和设备处理。HTTP/HTTPS因其简单性、跨平台支持和完整生态成为主流,开发者也可基于TCP/UDP自定义协议。整个过程展示了从用户输入到数据获取的分工协作机制,HTTP的普及源于其通用性和成熟生态。

Chuan_pu的博客 897

PRPD图谱分析从入门到精通:5种典型放电模式的识别手册

本文详细解析PRPD图谱分析技术,重点介绍电晕放电、悬浮放电等5种典型放电模式的识别方法。通过37组真实案例对比,提供关键识别区和诊断流程图模板,帮助工程师快速掌握变电站设备状态监测的核心技能,提升绝缘缺陷诊断准确率。

weixin_29214199的博客 473

终极网络协议指南:从TCP/IP到HTTPS的实用解析

YCBlogs是一个技术博客笔记大汇总项目,涵盖了Java基础、线程并发、数据结构、Android技术、设计模式、算法、网络协议以及Flutter等多方面内容,所有开源文件均为markdown格式,长期更新维护。本文将围绕网络协议展开,为你带来从TCP/IP到HTTPS的深度剖析。 ## 网络协议基础:构建互联网的基石 网络协议是计算机网络中进行数据交换而建立的规则、标准或约定的集合。没有网络

gitblog_01000的博客 726

相机标定原理与张氏标定法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

heeweii的博客 2280

病理组学分析系列教程1:使用Python-histolab进行病理图像预处理,tiles切片自动生成

病理图像tiles自动生成,WSI图像预处理

qq_43449643的博客 1741

【网络协议】了解一下HTTP 与 HTTPS 的区别

2.身份认证:服务器向客户端出示TLS证书,客户端验证证书的有效性和服务器身份,确保连接到的是正确的服务提供者。因为 HTTPS 都是基于 TCP 传输协议实现的,得先建立完可靠的 TCP 连接才能做 TLS 握手的事情。1.加密通信:HTTPS通过TLS证书实现对数据的加密处理,只有当拥有正确密钥的接收方才能解读数据内容。HTTPS 建立连接的过程,先进行 TCP 三次握手,再进行 TLS 四次握手。3.数据完整性:除了加密外,HTTPS还利用。明文传输:数据以明文的形式传输,不加密,容易被截获和窃听。

抓紧学习咯! 1328

稀疏数据分析:马蹄估计量及其理论性质

稀疏数据分析:马蹄估计量及其理论性质基本框架half-Cauchy分布为什么它叫马蹄估计量后验均值、shrinkage与κ\kappaκθ\thetaθ的边缘先验分布的阶马蹄估计的一致性收敛速率Clarke-Barron(1990)引理马蹄估计的最优收敛速率 这是对The horseshoe estimator for sparse signal这篇论文的回顾,这篇论文在Modern Bayesian statistics与Bayesian Machine Learning领域比较重要,它提出了一种新的先验

一个不愿透露姓名的博客 3802

TCP、UDP、HTTP、HTTPS区别:网络协议全景解析

本文深入解析TCP、UDP、HTTP和HTTPS四种网络协议的核心区别。TCP是面向连接的可靠传输协议,适用于网页浏览、文件传输等场景;UDP是无连接的高效协议,适合音视频流媒体、在线游戏等实时应用。HTTP作为应用层协议基于TCP,提供网页内容传输;HTTPS则通过SSL/TLS加密实现安全通信。四者协同工作构成完整通信链路,HTTP/3等新兴协议正推动网络通信向更高效安全的方向发展。选择协议需综合考虑可靠性、延迟、安全性和网络环境等因素。

阿登林的博客 1606

Python量化交易实战:如何用vnpy+Tushare获取股票历史数据(附完整代码)

本文详细介绍了如何利用vn.py框架与Tushare数据接口,构建一个健壮的Python量化交易数据获取引擎。通过封装Tushare API,实现股票历史数据的自动化获取与格式转换,并适配vn.py的BarData结构,为策略回测与实盘交易提供稳定、高效的数据基础。文中提供了完整的代码实现,涵盖环境配置、核心封装逻辑及高级功能扩展。

cola5的博客 1221

视图库对接系列(GA-T 1400)一、简单介绍

GA/T 1400《公安视频图像信息应用系统》 是我们需要参考看看的相关文档,里面有对应的标准和介绍,没有这个文档的话可以加群找我要。群的话 我放在最下面了。我们先简单想几个问题, 也就是这个协议主要干什么用的,为什么要有, 能做什么。

qq_37716298的博客 4288

网络协议的简单梳理--socket、http、https、tcp、ip

一、socket 1、socket套接字是通信的基石,是支持TCP/IP协议的基本操作单元,包含进行网络通信的五种信息        1> 链接使用的协议       2> 本地主机的IP地址       3> 本地进程的协议端口      4> 远地主机的IP地址      5> 远地进程的协议端口       多个TCP链接或者多个应用程序进程可能需...

ningn111的博客 1882

如何让 Mac mini 24小时不休眠运行 OpenClaw

如果 OpenClaw 每 5-10 分钟自动退出,launchd 连续 4 次快速重启后会判定为崩溃循环并卸载服务。:方案一(pmset)+ 方案三(launchd)组合使用,既防止系统休眠,又保证 OpenClaw 开机自启和崩溃自动恢复。:caffeinate 只在进程运行期间有效,终端关闭或进程结束后系统恢复正常睡眠策略。这条命令会自动创建 launchd plist 并启用服务,是最推荐的方式。替换为你的实际用户名路径,Node.js 路径也要改成你自己的。确保 plist 中有。

Maynor的博客 2216

网络协议http与https,tcp和udp,tcp/ip

HTTP和HTTPS是什么? 我们使用浏览器访问一个网站页面,在浏览器的地址栏中我们会看到一串URL,如图 网站的URL会分为两部分:通信协议和域名地址。 域名地址都很好理解,不同的域名地址表示网站中不同的页面,而通信协议,简单来说就是浏览器和服务器之间沟通的语言。网站中的通信协议一般就是HTTP协议和HTTPS协议。 HTTP协议 HTTP协议是一种使用明文数据传输的网络协议。一直以来HTTP协议都是最主流的网页协议,但是互联网发展到今天,HTTP协议的明文传输会让用户存在一个非常大的安全隐患。试想一下

weixin_45499040的博客 1401

Qt Creator 下载和安装

在线安装程序是一个小型的安装程序,它将在您的计算机上下载和安装 Qt Creator。离线安装程序是一个较大的安装包,您可以将其保存在本地,并在没有网络连接的情况下安装 Qt Creator。在 Qt 官方网站上,您可以找到 Qt Creator 的下载页面。Qt Creator 是一款跨平台的集成开发环境(IDE),用于开发基于 Qt 框架的应用程序。在这一步中,您可以选择是否安装 Qt Creator 的附加组件。一旦您完成了组件的选择,安装程序将开始将 Qt Creator 安装到您的计算机上。

HackLogic的博客 6823

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

网络协议TCP/IP、UDP、HTTP/HTTPS 完全指南

(Application Layer):HTTP、DNS、SMTP等。:客户端验证证书,生成预主密钥(Pre-Master Secret)。:A类(8位网络)、B类(16位网络)、C类(24位网络)。:服务器回复SYN-ACK(SEQ=y, ACK=x+1)。(Transport Layer):TCP和UDP。(Internet Layer):核心协议为IP。重复头部:每个请求携带相同头部(如Cookie)。:客户端发送ACK(ACK=y+1),连接建立。:主动方回复ACK(ACK=v+1),连接关闭。

qq_60219215的博客 1876

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: 【Android 网络协议 二】HTTP协议
下一篇: 【Android 网络协议 一】TCP/IP网络模型
Colin_Mindset
博客等级 码龄12年 159粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值