白嫖CDN,打造封不尽IP的代理池
<div style="max-width:677px !important;"><p><br></p><p><strong style="font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;text-align: left;"><span style="font-size: 16px;">写在前面</span></strong><br></p><p><br></p><p><span style="font-size: 15px;">接上次 </span><a target="_blank" href="http://mp.weixin.qq.com/s?__biz=MzI0MDI5MTQ3OQ==&mid=2247484023&idx=1&sn=da25d44a61f18f74fc25ec40676c1da0&chksm=e91c598fde6bd099386a1bd8e6569e255e8e07edb746eca950fb5f3e256be76ac6cad71fc4e1&scene=21#wechat_redirect" textvalue="论如何防溯源连接WebShell" data-itemshowtype="11" tab="innerlink" style="font-size: 15px;" data-linktype="2"><span style="font-size: 15px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;">论如何防溯源</span></a><span style="font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;"><a target="_blank" href="http://mp.weixin.qq.com/s?__biz=MzI0MDI5MTQ3OQ==&mid=2247484023&idx=1&sn=da25d44a61f18f74fc25ec40676c1da0&chksm=e91c598fde6bd099386a1bd8e6569e255e8e07edb746eca950fb5f3e256be76ac6cad71fc4e1&scene=21#wechat_redirect" textvalue="论如何防溯源连接WebShell" data-itemshowtype="11" tab="innerlink" data-linktype="2">连接WebShell</a> 中提到的思路,我们来看看怎么借用云函数实现一个HTTP动态代理池。</span></p><blockquote class="js_blockquote_wrap" data-type="2" data-url="" data-author-name="" data-content-utf8-length="26" data-source-title=""><section class="js_blockquote_digest"><p>提前说明一下:实现代理池的方式有很多,不局限这一种</p></section></blockquote><p><br></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"><p><br></p><p style="text-align: center;"><span style="font-size: 17px;background-color: rgb(0, 82, 255);color: rgb(255, 255, 255);"><strong> 先看效果</strong></span><span style="font-size: 17px;background-color: rgb(0, 82, 255);color: rgb(255, 251, 0);"><strong> </strong></span></p><p><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/04eaed226e42ba2b669554fdd7571fa4.jpeg"></span></p><p><br></p><p style="text-align: left;"><span style="font-size: 15px;">挂上代理之后,</span><span style="font-size: 15px;color: rgb(217, 33, 66);"><strong>每次 HTTP 请求,都会以不同的 IP 发送出去</strong></span><span style="font-size: 15px;">,并且出口IP均为 IDC 机房 IP。随便挑选其中一个 IP 去 TI 上查询,可以看到 IP 很干净,<strong>专治各种买了威胁情报服务的目标</strong>。<span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/3f082c411dbf5d71b16198a869b062cb.png"></span></span></p><p><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/223bedd3768c5f2b18906da46ac630e9.jpeg"></span></p><p><br></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"><p><br></p><p style="text-align: center;"><span style="font-size: 17px;background-color: rgb(0, 82, 255);color: rgb(255, 255, 255);"><strong> 原理 </strong></span></p><p><br></p><p style="text-align: left;"><strong><span style="font-size: 15px;">总结下来就是一句话:利用云厂商提供的云函数(函数计算)功能,将客户端的HTTP请求进行转发,由于云函数多出口的特性,让我们也变相拥有了代理池。</span></strong></p><p><br></p><p><br></p><p style="text-align: center;"><span style="font-size: 16px;"><strong>云函数</strong></span></p><p><br></p><p style="text-align: left;"><span style="font-size: 15px;">有关云函数的详细介绍可以直接去看各云厂商的产品文档。我们只提几个重点:</span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><strong><span style="font-size: 15px;">1. 云函数不需要服务器,也就是说你不需要去买 VPS。</span></strong></p><p style="text-align: left;"><strong><span style="font-size: 15px;">2. 云函数只是云厂商用自己的服务器帮你运行你上传的代码片段, 执行某个单一的逻辑,可以简单理解为只帮你执行一个函数。</span></strong></p><p style="text-align: left;"><strong><span style="font-size: 15px;">3. 云函数无法长驻,调用的时候创建,执行完之后立即就销毁,所以无法直接保存状态。也正是这一点,让我们无法代理像 SSH 这种需要长连接的服务,只能代理 HTTP(s) 这种无状态的协议。</span></strong></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">以腾讯云云函数服务为例,工作原理里面提到了复用原始连接的情况,为代理 TCP 连接提供了可能,但是目前鉴于时间原因没有深入尝试。</span></p><p><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/d5ce216be19e26438e85b4bb448fefd0.jpeg"></span></p><p><br></p><p style="text-align: center;"><span style="font-size: 16px;"><strong>设计</strong></span></p><p><br></p><p style="text-align: left;"><span style="font-size: 15px;">云函数不能直接调用,同时还需要创建一个 「</span><strong><span style="font-size: 15px;color: rgb(217, 33, 66);">触发器</span></strong><span style="font-size: 15px;">」来触发云函数,为了方便我们选择使用 「</span><span style="font-size: 15px;color: rgb(217, 33, 66);"><strong>API 网关触发器</strong></span><span style="font-size: 15px;">」,好处是一个 HTTP 请求就可以触发,也不需要什么别的操作。</span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">我们整个代理池的架构如下:</span></p><p><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/155d2bc4b571e3609caa0bff333f0512.jpeg"></span></p><p><br></p><p><span style="color: rgb(217, 33, 66);"><strong>SCF-Main</strong></span></p><p><br></p><p style="text-align: left;"> <span style="font-size: 15px;">这个是我们云函数,我们需要布署到云上。负责解析结构化的数据,组装 HTTP 请求,发送之后把响应再组装好返回给 API 网关。</span></p><p><br></p><p><span style="color: rgb(217, 33, 66);"><strong>SCF-Client</strong></span></p><p><br></p><p> <span style="font-size: 15px;">这是客户端程序,主要做 3 件事:</span></p><ul class="list-paddingleft-2" style="list-style-type: circle;"><li><p><span style="font-size: 15px;">提供 HTTP/HTTPS 代理服务</span></p></li><li><p><span style="font-size: 15px;">把浏览器请求的数据包组装成我们自定义的格式,发送给 API 网关</span></p></li><li><p><span style="font-size: 15px;">把 API 网关返回的数据解析后,组装成 HTTP 代理的响应,返回给浏览器</span></p></li></ul><p><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/9f122008cd20704872c3731b9601229f.jpeg"></span></p><p><br></p><p style="text-align: center;"><strong>开发——云函数侧</strong></p><p><br></p><p style="text-align: left;"><span style="font-size: 15px;">云函数侧要做的事情很简单,只需要接到网关传过来的数据,解开之后自己拼出来一个 HTTP 请求,发送出去,然后把Response 信息再拼好,返回给 API 网关即可。</span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">我们定义两个结构,分别是HTTP请求和响应:</span></p><p><br></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="cpp"><code><span class="code-snippet_outer"><span class="code-snippet__comment">// DefineEvent 请求结构</span></span></code><code><span class="code-snippet_outer">type DefineEvent <span class="code-snippet__class"><span class="code-snippet__keyword">struct</span> {</span></span></code><code><span class="code-snippet_outer">URL <span class="code-snippet__built_in">string</span> `json:<span class="code-snippet__string">"url"</span>`<span class="code-snippet__comment">// 目标的 URL, eg: http://cip.cc/</span></span></code><code><span class="code-snippet_outer">Content <span class="code-snippet__built_in">string</span> `json:<span class="code-snippet__string">"content"</span>` <span class="code-snippet__comment">// 最原始的 HTTP 报文, base64</span></span></code><code><span class="code-snippet_outer">}</span></code><code><span class="code-snippet_outer"><span class="code-snippet__comment">// RespEvent 响应结构</span></span></code><code><span class="code-snippet_outer">type RespEvent <span class="code-snippet__class"><span class="code-snippet__keyword">struct</span> {</span></span></code><code><span class="code-snippet_outer">Status <span class="code-snippet__keyword">bool</span> `json:<span class="code-snippet__string">"status"</span>` <span class="code-snippet__comment">// 请求是否正常</span></span></code><code><span class="code-snippet_outer">Error<span class="code-snippet__built_in">string</span> `json:<span class="code-snippet__string">"error"</span>`<span class="code-snippet__comment">// 错误信息</span></span></code><code><span class="code-snippet_outer">Data <span class="code-snippet__built_in">string</span> `json:<span class="code-snippet__string">"data"</span>` <span class="code-snippet__comment">// HTTP 响应原始报文, base64</span></span></code><code><span class="code-snippet_outer">}</span></code></pre></section><p><br></p><p style="text-align: left;"><span style="font-size: 15px;">利用 <strong>http.ReadRequest</strong> 直接从<strong>原始报文</strong>创建 request 对象</span></p><p style="text-align: left;"><br></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="go"><code><span class="code-snippet_outer">req, err := http.ReadRequest(bufio.NewReader(strings.NewReader(string(rawreq))))</span></code></pre></section><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">接下来就是 dump 出 response 报文,组装成 API 网关返回的格式返回</span></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/62fb13ef90de2d14faa4a702368fa651.jpeg"></span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">至此云函数端就已经完成了</span></p><p style="text-align: left;"><br></p><p style="text-align: center;"><strong><span style="font-size: 15px;">开发——SCF-Client 侧</span></strong></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">首先按照一个正常的 http 代理服务去开发,处理浏览器和本地代理端口的数据包,这个没啥说的,大篇的文章可以找到,100行就能搞定。</span><br></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">常规的 HTTP 代理是把浏览器发过来的包直接就转发出去了,我们需要把这一块的逻辑重写一下。</span><br></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">把浏览器侧发过来的 HTTP 数据包,组装成 SCF-Main 请求格式,发送给 API 网关</span></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/81e67e13ee9d52f0f2298f6093412596.jpeg"></span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">拿到API网关响应包解析并处理后,转换成本地 HTTP 请求正确的响应包,返回给浏览器</span></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/0ad550fd10528268cf857e43d70f385b.jpeg"></span></p><p style="text-align: left;"><br></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"><p style="text-align: left;"><br></p><p style="text-align: center;"><span style="font-size: 17px;background-color: rgb(0, 82, 255);color: rgb(255, 255, 255);"><strong> 部署&使用步骤 </strong></span></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span style="font-size: 15px;"><strong>云函数部分</strong></span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">1. 打开 「</span><span style="font-size: 15px;color: rgb(217, 33, 66);"><strong>函数服务</strong></span><span style="font-size: 15px;"><strong>」</strong>(<span style="font-size: 15px;text-align: left;">https://www.ihonker.org/data/attachment/forum/202103/17/6d7beaef81326a52e6af1ccb9f1e24a4.jpeg" data-type="jpeg" data-w="757" style=""/></span></span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">2. 按照图中步骤填写,</span><strong><span style="font-size: 15px;color: rgb(217, 33, 66);">不要手欠直接点完成</span></strong></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;"> 基础配置</span></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/1539ecf014849cdeed4883d646124997.jpeg"></span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;"> 高级配置</span></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/fa40971e452070f051b81def2a25afd9.jpeg"></span></p><p style="text-align: left;"><span style="font-size: 15px;"></span><br></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;"> 触发器配置</span></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/b44b014c6ed856e6e8c20295d3cb2cad.jpeg"></span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">3. 点击完成后,自动上传 zip 包并布署,同时会创建 API 网关,直接点「立即访问」</span></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/15c12cccb1b06f04a24ae89b9e1fdaf5.jpeg"></span></p><p style="text-align: left;"><span style="font-size: 15px;"></span><br></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">4. 获取云函数的 API 访问路径</span></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/7b17f39052e4f6d3f16829e591130deb.jpeg"></span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span style="font-size: 15px;"><strong>Client 侧</strong></span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">scf-client 的参数如下:</span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><br></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang="sql"><code><span class="code-snippet_outer">➜ scf-client ./scf-client -h</span></code><code><span class="code-snippet_outer">Usage of ./scf-client:</span></code><code><span class="code-snippet_outer"> -api string // 必选项</span></code><code><span class="code-snippet_outer"> API Gateway url, eg: https://www.ihonker.org/data/attachment/forum/202103/17/6c75678c217ae097e9fe0b7b848ccd43.jpeg" data-type="jpeg" data-w="938" style=""/><p></p><p style="text-align: left;"><br></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span style="font-size: 15px;"><strong>Debug</strong></span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">开发过程中,难免少不了 Debug,你只需要在云函数侧用 Print 把需要的数据打印出来就行了,然后在云函数的日志里,就可以看到你 Print 的数据。</span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">我们把 response 的数据打印了出来,可以看到响应包的 base64 数据</span></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/f812a58cd2c4c00d198f709ae6b6626b.jpeg"></span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">base64 解开之后就是最终响应的内容了</span></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/a51697382c9c15febbfcf802b43094b8.jpeg"></span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span style="font-size: 15px;color: rgb(217, 33, 66);"><strong>有关 HTTPS 的实现</strong></span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><strong><span style="font-size: 15px;">我们知道 HTTPS 实际上第一个包是 CONNECT,打开 TCP 通道之后,先互传证书,之后再传 HTTP 报文。在云函数这个场景下,可以简单理解为一次 TCP 会话,TCP 握手之后, Client 只能向 Server 发一个 TCP 包,Server 也只能回一个包,之后就要断开连接。</span></strong></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">这个问题也困扰了我很久,最终放弃了透传证书的方式,直接改用中间人(类似 Burpsuite 的 HTTPS 代理形式)</span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;color: rgb(217, 33, 66);">我们采用中间人的方式,在 SCF-Client 里内置了一个根证书,和浏览器交换证书的过程都在本地实现,只把最核心的 HTTP 报文发给 API 网关。</span></p><p style="text-align: left;"><br></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"><p style="text-align: left;"><br></p><p style="text-align: center;"><span style="font-size: 17px;"><strong><span style="font-size: 17px;background-color: rgb(0, 82, 255);color: rgb(255, 255, 255);"> 测试 </span></strong></span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;">HTTP 代理和 HTTPS 代理均可以对 HTTPS 站点代理</span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 15px;"><strong>HTTP 代理</strong></span></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/ff35f57f5cf987287a4b02c4aa9ddbcf.jpeg"></span></p><p style="text-align: left;"><br><span style="font-size: 15px;"></span></p><p style="text-align: left;"><span style="font-size: 15px;"><strong>HTTPS 代理</strong></span></p><p style="text-align: left;"><br></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/015fe4d0e9da4f33593578df9b16ace5.jpeg"></span></p><p style="text-align: left;"><span style="font-size: 15px;"></span><br></p><hr style="border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);"><p style="text-align: left;"><br></p><p style="text-align: center;"><span style="font-size: 17px;background-color: rgb(0, 82, 255);color: rgb(255, 255, 255);"> 最后 </span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><span style="font-size: 16px;"><strong>优点</strong></span></p><p style="text-align: left;"><br></p><ul class="list-paddingleft-2" style="list-style-type: disc;"><li><p style="text-align: left;"><span style="font-size: 15px;">自动切换出口IP,对使用者完全透明,不需要软件去实现代理切换的功能</span></p></li><p style="text-align: left;"><span style="font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;color: rgb(136, 136, 136);">例如你挂 sqlmap 去注入,可以保证每一个数据包都走不同的IP出去,而命令行参数上只需要填写一个 proxy 地址</span></p><li><p style="text-align: left;"><span style="font-size: 15px;">IP 多如牛毛,封不完的IP,打不死的小强<span><img title="双击删除图片" class="onloadimg" style="max-width:100%;" src="https://www.ihonker.org/data/attachment/forum/202103/17/3f082c411dbf5d71b16198a869b062cb.png"></span></span></p></li><li><p style="text-align: left;"><span style="font-size: 15px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;">该方法的 IP 都是白 IP,不在微步在线等威胁情报平台的黑名单里</span></p></li><li><p style="text-align: left;"><span style="font-size: 15px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;">便宜</span><span style="font-size: 15px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;">,便宜,便宜, 每个账号每个月有免费额度,拉上你的同事朋友把多个账号凑一起,然后拿 nginx 做个负载均衡,能把白嫖嫖到底</span></p></li></ul><p style="text-align: left;"><span style="font-size: 15px;font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;"></span></p><p style="text-align: center;"><span><img title="双击删除图片" class="onloadimg" style="max-width: 100%; cursor: pointer; opacity: 1;" src="https://www.ihonker.org/data/attachment/forum/202103/17/f2822200c466616bcdd74320e69983c5.jpeg"></span></p><p style="text-align: left;"><br></p><p style="text-align: left;"><strong><span style="font-size: 16px;">缺点</span></strong></p><p style="text-align: left;"><br></p><ul class="list-paddingleft-2" style="list-style-type: square;"><li><p style="text-align: left;"><span style="font-size: 15px;">仅支持 HTTP 和 HTTPS,这种无状态的协议。不支持其它协议,如果后期改改,勉强能适配一下 redis 协议</span></p></li><li><p style="text-align: left;"><span style="font-size: 15px;">速度上来说,可能有时候会慢一些</span></p></li></ul><p><br></p><p><br></p><p><strong><span style="font-size: 16px;">工具</span></strong><br></p><p><br></p><p style="text-align: left;"><span style="font-size: 15px;color: rgb(217, 33, 66);">本文只谈思路,暂时不考虑提供现成工具,有兴趣的同学可以自己参照设计思路去实现,反正没几行代码。</span></p> </span></code></pre></section></div>
页:
[1]