<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>代码与生活</title>
  
  <subtitle>随手笔记 一个没技术含量的博客</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="http://fredliu168.github.io/"/>
  <updated>2026-09-15T02:20:04.150Z</updated>
  <id>http://fredliu168.github.io/</id>
  
  <author>
    <name>marsland</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>Navicat 16 for MySQL 修改注册表 永久试用</title>
    <link href="http://fredliu168.github.io/2022/09/09/Navicat-16-for-MySQL-%E4%BF%AE%E6%94%B9%E6%B3%A8%E5%86%8C%E8%A1%A8-%E6%B0%B8%E4%B9%85%E8%AF%95%E7%94%A8/"/>
    <id>http://fredliu168.github.io/2022/09/09/Navicat-16-for-MySQL-%E4%BF%AE%E6%94%B9%E6%B3%A8%E5%86%8C%E8%A1%A8-%E6%B0%B8%E4%B9%85%E8%AF%95%E7%94%A8/</id>
    <published>2022-09-09T09:09:09.000Z</published>
    <updated>2026-09-15T02:20:04.150Z</updated>
    
    <content type="html"><![CDATA[<p>navicat for mysql 16 无限试用</p><ol><li>win+R打开运行,输入 regedit 打开注册表</li><li>HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Registration16XCS<br><strong>删除 Registration16XCS 中所有的内容, Registration16XCS不删除</strong></li><li>如果存在 HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Update<br>删除 Update</li><li>HKEY_CURRENT_USER\Software\Classes\CLSID{xxx-xxx-xxx-xxx-xxx}<br>找到一个包含Info的 , 删除 Info</li></ol><p>脚本如下:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">@echo off</span><br><span class="line"></span><br><span class="line">echo Delete HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium\Registration[version and language]</span><br><span class="line">for /f %%i in (&#x27;&quot;REG QUERY &quot;HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium&quot; /s | findstr /L Registration&quot;&#x27;) do (</span><br><span class="line">    reg delete %%i /va /f</span><br><span class="line">)</span><br><span class="line">echo.</span><br><span class="line"></span><br><span class="line">echo Delete Info folder under HKEY_CURRENT_USER\Software\Classes\CLSID</span><br><span class="line">for /f %%i in (&#x27;&quot;REG QUERY &quot;HKEY_CURRENT_USER\Software\Classes\CLSID&quot; /s | findstr /E Info&quot;&#x27;) do (</span><br><span class="line">    reg delete %%i /va /f</span><br><span class="line">)</span><br><span class="line">echo.</span><br><span class="line"></span><br><span class="line">echo Finish</span><br><span class="line"></span><br><span class="line">pause</span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;navicat for mysql 16 无限试用&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;win+R打开运行,输入 regedit 打开注册表&lt;/li&gt;
&lt;li&gt;HKEY_CURRENT_USER&#92;SOFTWARE&#92;PremiumSoft&#92;Navicat&#92;Registration16X
      
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>安卓去壳逆向</title>
    <link href="http://fredliu168.github.io/2022/04/14/%E5%AE%89%E5%8D%93%E5%8E%BB%E5%A3%B3%E9%80%86%E5%90%91/"/>
    <id>http://fredliu168.github.io/2022/04/14/%E5%AE%89%E5%8D%93%E5%8E%BB%E5%A3%B3%E9%80%86%E5%90%91/</id>
    <published>2022-04-14T02:29:00.000Z</published>
    <updated>2026-09-15T02:20:04.164Z</updated>
    
    <content type="html"><![CDATA[<p>(202005)网鼎杯青龙组 Reverse-bang</p><p><a href="%E5%AE%89%E5%8D%93%E5%8E%BB%E5%A3%B3%E9%80%86%E5%90%91/Reverse-bang.zip">附件下载:Reverse-bang.zip</a></p><p>用到的软件:</p><p>1.Frida</p><p>2.MuMu模拟器</p><p>3.frida-tools</p><p>4.frida-sever</p><p>5.ApkScan-PKID查壳工具</p><p>6.jadx-gui逆向工具</p><p>拿到手是一个APK文件，模拟器里打开看一下：</p><p><img src="/image/%E5%AE%89%E5%8D%93%E5%8E%BB%E5%A3%B3%E9%80%86%E5%90%91/1649904017478.png" alt="1649904017478.png"></p><p>接下来是查壳，apk查壳我们用PKID,本机路径(&#x2F;逆向&#x2F;apk逆向soft&#x2F;ApkScan-PKID查壳工具.jar)</p><p><img src="/image/%E5%AE%89%E5%8D%93%E5%8E%BB%E5%A3%B3%E9%80%86%E5%90%91/1649904268859.png" alt="1649904268859.png"></p><p>显示是梆梆加壳，接下来我们用<a href="https://github.com/hluwa/FRIDA-DEXDump">frida脚本</a>脱壳，使用该脚本前需要配置frida环境</p><ul><li>Frida是一款轻量级HOOK框架，适用于多平台上，例如android、windows、ios等。</li><li>frida的服务端运行在目标机上，通过注入进程的方式来实现劫持应用函数，另一部分运行在系统机器上。</li></ul><p>第一步，我们先pip安装frida模块。cmd输入</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install frida</span><br></pre></td></tr></table></figure><p>第二步，安装frida-tools模块，命令同上，</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install frida-tools 或者 python -m pip install frida-tools。</span><br></pre></td></tr></table></figure><p><strong>第三步</strong> ，下载运行在目标机上的frida-sever端（ &#x3D;一定要对应你的frida版本和目标机架构&#x3D; ），<a href="https://github.com/frida/frida/releases">官方下载地址</a>，下载时要选择对应的版本下载，先cmd输入“frida –version”看自己安装的frida版本</p><p><img src="/image/%E5%AE%89%E5%8D%93%E5%8E%BB%E5%A3%B3%E9%80%86%E5%90%91/1649904665727.png" alt="1649904665727.png"></p><p>再使自己的物理机连接上目标虚拟机，以我自己的（MuMu模拟器）为例：</p><p><img src="/image/%E5%AE%89%E5%8D%93%E5%8E%BB%E5%A3%B3%E9%80%86%E5%90%91/1649904712013.png" alt="1649904712013.png"></p><p>MAC版MuMu模拟器如何连接adb</p><p>adb kill-server &amp;&amp; adb server &amp;&amp; adb shell</p><p>再分别输入“adb shell”和“cat &#x2F;proc&#x2F;cpuinfo”即可查看自己的目标机架构版本，但有些可能不能显示出目标机架构版本，所以我直接到客户端看了一下版本，可以看出我的是X64模拟器。</p><p> 结合我们的frida版本和目标机版本我们可以就选择下载frida-sever了，我这里下载的是frida-server-14.2.14-android-x86_64（因为我的frida版本是14.2.14，目标机是X64架构）</p><p> <strong>第四步</strong> ，将之前下载好的文件解压，然后通过命令</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">adb push 你的电脑的存放位置 /data/local/tmp </span><br><span class="line"></span><br></pre></td></tr></table></figure><p>将文件传输到手机中</p><p>然后通过输入</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">adb shell</span><br><span class="line">su</span><br><span class="line">cd /data/local/tmp</span><br></pre></td></tr></table></figure><p>进入目标机的&#x2F;data&#x2F;local&#x2F;tmp目录下，输入</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">chmod 777 frida-server-14.2.14-android-x86_64</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>给文件赋权777，<br>再输入</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">./frida-server-14.2.14-android-x86_64</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>启动。</p><p><img src="/image/%E5%AE%89%E5%8D%93%E5%8E%BB%E5%A3%B3%E9%80%86%E5%90%91/1649905018379.png" alt="1649905018379.png"></p><p>第五步，新开一个命令行输入命令</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">frida-ps -U</span><br></pre></td></tr></table></figure><p>查看手机进程，如果出现以下结果，则frida安装成功。</p><p><img src="/image/%E5%AE%89%E5%8D%93%E5%8E%BB%E5%A3%B3%E9%80%86%E5%90%91/1649904985130.png" alt="1649904985130.png"></p><p>执行:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">frida-dexdump -FU -d  com.example.how_debug</span><br></pre></td></tr></table></figure><p>之后我们发现frida_dexdump新建了子文件夹com.example.how_debug，里面存放脱壳后的dex文件。</p><p>再用dex2jar工具反编译成.jar文件之后用<a href="https://github.com/skylot/jadx/releases/tag/v1.2.0">jadx-gui</a>分析，在com.example.how_debug.MainActivity类中我们可以找到flag</p><p><img src="/image/%E5%AE%89%E5%8D%93%E5%8E%BB%E5%A3%B3%E9%80%86%E5%90%91/1649905146212.png" alt="1649905146212.png"></p><p>参考文章:</p><p><a href="https://blog.csdn.net/m0_46296905/article/details/115727899">https://blog.csdn.net/m0_46296905/article/details/115727899</a></p><p><a href="https://blog.csdn.net/m0_46296905/article/details/115723160">https://blog.csdn.net/m0_46296905/article/details/115723160</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;(202005)网鼎杯青龙组 Reverse-bang&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;%E5%AE%89%E5%8D%93%E5%8E%BB%E5%A3%B3%E9%80%86%E5%90%91/Reverse-bang.zip&quot;&gt;附件下载:Reverse-bang.zi
      
    
    </summary>
    
    
    
      <category term="ctf" scheme="http://fredliu168.github.io/tags/ctf/"/>
    
  </entry>
  
  <entry>
    <title>mac修改文件权限为777</title>
    <link href="http://fredliu168.github.io/2022/03/24/mac%E4%BF%AE%E6%94%B9%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90%E4%B8%BA777/"/>
    <id>http://fredliu168.github.io/2022/03/24/mac%E4%BF%AE%E6%94%B9%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90%E4%B8%BA777/</id>
    <published>2022-03-24T13:57:02.000Z</published>
    <updated>2026-09-15T02:20:04.162Z</updated>
    
    <content type="html"><![CDATA[<ol><li><p>cd 你的文件夹路径的上一级目录。</p></li><li><p>sudo chmod -R 777 你的文件夹名。</p></li><li><p>输入密码。</p></li><li><p>成功</p></li></ol>]]></content>
    
    <summary type="html">
    
      
      
        &lt;ol&gt;
&lt;li&gt;&lt;p&gt;cd 你的文件夹路径的上一级目录。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;sudo chmod -R 777 你的文件夹名。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;输入密码。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;成功&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

      
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>ciphey的使用</title>
    <link href="http://fredliu168.github.io/2022/03/24/ciphey%E7%9A%84%E4%BD%BF%E7%94%A8/"/>
    <id>http://fredliu168.github.io/2022/03/24/ciphey%E7%9A%84%E4%BD%BF%E7%94%A8/</id>
    <published>2022-03-24T02:15:14.000Z</published>
    <updated>2026-09-15T02:20:04.153Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Misc-签到"><a href="#Misc-签到" class="headerlink" title="Misc-签到"></a>Misc-签到</h2><p>题目:EwzB3KQcFGnVmxPsPK8xBX9GMgR7RUFJcdXLtxKXM</p><p>使用base64解不出,使用ciphey一下子就出来了.ciphey在不知道密钥或密码的情况下自动解密加密、解码编码和破解哈希.</p><blockquote><p>介绍: <a href="https://github.com/Ciphey/Ciphey">https://github.com/Ciphey/Ciphey</a></p></blockquote><p>Mac安装ciphey</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">brew reinstall ciphey</span><br></pre></td></tr></table></figure><p>使用</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ciphey -t &quot;EwzB3KQcFGnVmxPsPK8xBX9GMgR7RUFJcdXLtxKXM&quot;</span><br></pre></td></tr></table></figure><p>返回:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">The plaintext is a Capture The Flag (CTF) Flag               │</span><br><span class="line">│ Formats used:                                                │</span><br><span class="line">│    atbash                                                    │</span><br><span class="line">│    reverse                                                   │</span><br><span class="line">│    atbash                                                    │</span><br><span class="line">│    base58_bitcoinPlaintext: &quot;flag&#123;Welc0me_to_p1ay_th3_g4me&#125;&quot;</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2 id=&quot;Misc-签到&quot;&gt;&lt;a href=&quot;#Misc-签到&quot; class=&quot;headerlink&quot; title=&quot;Misc-签到&quot;&gt;&lt;/a&gt;Misc-签到&lt;/h2&gt;&lt;p&gt;题目:EwzB3KQcFGnVmxPsPK8xBX9GMgR7RUFJcdXLtxKXM&lt;/p&gt;
&lt;
      
    
    </summary>
    
    
    
      <category term="ctf" scheme="http://fredliu168.github.io/tags/ctf/"/>
    
  </entry>
  
  <entry>
    <title>ReverseAdvanced解题</title>
    <link href="http://fredliu168.github.io/2022/03/24/ReverseAdvanced%E8%A7%A3%E9%A2%98/"/>
    <id>http://fredliu168.github.io/2022/03/24/ReverseAdvanced%E8%A7%A3%E9%A2%98/</id>
    <published>2022-03-23T16:18:20.000Z</published>
    <updated>2026-09-15T02:20:04.150Z</updated>
    
    <content type="html"><![CDATA[<h1 id="春秋网鼎杯网络安全大赛advanced题目writeup"><a href="#春秋网鼎杯网络安全大赛advanced题目writeup" class="headerlink" title="春秋网鼎杯网络安全大赛advanced题目writeup"></a>春秋网鼎杯网络安全大赛advanced题目writeup</h1><p><a href="ReverseAdvanced%E8%A7%A3%E9%A2%98/src">附件下载:scr</a></p><p>file命令查看是一个64位的ELF文件    运行后无交互动作   只输出</p><p>welcome, here is your identification, please keep it in your pocket: <strong>4b404c4b5648725b445845734c735949405c414d5949725c45495a51</strong></p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_">$ </span><span class="language-bash">file /home/kali/Desktop/src</span>                                    </span><br><span class="line">/home/kali/Desktop/src: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=c87b49d516e19f9b4d01673c90ac79283f6672a2, stripped</span><br><span class="line"></span><br></pre></td></tr></table></figure><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_">$ </span><span class="language-bash">./src                                                                                127 ⨯</span></span><br><span class="line">welcome, here is your identification, please keep it in your pocket: 4b404c4b5648725b445845734c735949405c414d5949725c45495a51</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>到这里  平常的思路是打开IDA 进行分析(当时我就是这么做的。。。)</p><p>而大佬们则是一眼看出这是异或flag{********}之后得到的</p><p>于是上python     挑出前几位 <strong>f l a g {</strong> 与最后一位 **} **分别与对应位置的十六进制进行异或</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">print(ord(&#x27;f&#x27;) ^ 0x4b)</span><br><span class="line">45</span><br><span class="line">print(ord(&#x27;l&#x27;) ^ 0x40)</span><br><span class="line">44</span><br><span class="line">print(ord(&#x27;a&#x27;) ^ 0x4c)</span><br><span class="line">45</span><br><span class="line">print(ord(&#x27;g&#x27;) ^ 0x4b)</span><br><span class="line">44</span><br></pre></td></tr></table></figure><p>然后就可以发现有规律  每次得到的结果只会是44或者45</p><p>根据异或的性质    我们将奇数位与45异或    偶数位与44异或  就可以得到flag</p><p>代码如下：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">enc = <span class="string">&#x27;4b404c4b5648725b445845734c735949405c414d5949725c45495a51&#x27;</span></span><br><span class="line"></span><br><span class="line">array_enc = []</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>, <span class="built_in">len</span>(enc), <span class="number">2</span>):</span><br><span class="line">    array_enc.append(enc[i:i + <span class="number">2</span>])</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="built_in">print</span>(<span class="built_in">ord</span>(<span class="string">&#x27;f&#x27;</span>) ^ <span class="number">0x4b</span>)</span><br><span class="line"><span class="built_in">print</span>(<span class="built_in">ord</span>(<span class="string">&#x27;l&#x27;</span>) ^ <span class="number">0x40</span>)</span><br><span class="line"><span class="built_in">print</span>(<span class="built_in">ord</span>(<span class="string">&#x27;a&#x27;</span>) ^ <span class="number">0x4c</span>)</span><br><span class="line"><span class="built_in">print</span>(<span class="built_in">ord</span>(<span class="string">&#x27;g&#x27;</span>) ^ <span class="number">0x4b</span>)</span><br><span class="line">  </span><br><span class="line">flag = []</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="built_in">len</span>(array_enc)): </span><br><span class="line">    <span class="keyword">if</span> i % <span class="number">2</span> == <span class="number">0</span>:</span><br><span class="line">        <span class="comment"># print(chr(int(array_enc[i], 16) ^ 45))</span></span><br><span class="line">        flag.append(<span class="built_in">chr</span>(<span class="built_in">int</span>(array_enc[i], <span class="number">16</span>) ^ <span class="number">45</span>))</span><br><span class="line">    <span class="keyword">if</span> i % <span class="number">2</span> == <span class="number">1</span>:</span><br><span class="line">        <span class="comment"># print(chr(int(array_enc[i], 16) ^ 44))</span></span><br><span class="line">        flag.append(<span class="built_in">chr</span>(<span class="built_in">int</span>(array_enc[i], <span class="number">16</span>) ^ <span class="number">44</span>))</span><br><span class="line">  </span><br><span class="line"><span class="built_in">print</span>(<span class="string">&#x27;&#x27;</span>.join(flag)) <span class="comment"># flag&#123;d_with_a_template_phew&#125;</span></span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;春秋网鼎杯网络安全大赛advanced题目writeup&quot;&gt;&lt;a href=&quot;#春秋网鼎杯网络安全大赛advanced题目writeup&quot; class=&quot;headerlink&quot; title=&quot;春秋网鼎杯网络安全大赛advanced题目writeup&quot;&gt;&lt;/a&gt;春秋
      
    
    </summary>
    
    
    
      <category term="ctf" scheme="http://fredliu168.github.io/tags/ctf/"/>
    
  </entry>
  
  <entry>
    <title>用Python生成密码字典</title>
    <link href="http://fredliu168.github.io/2022/03/23/%E7%94%A8Python%E7%94%9F%E6%88%90%E5%AF%86%E7%A0%81%E5%AD%97%E5%85%B8/"/>
    <id>http://fredliu168.github.io/2022/03/23/%E7%94%A8Python%E7%94%9F%E6%88%90%E5%AF%86%E7%A0%81%E5%AD%97%E5%85%B8/</id>
    <published>2022-03-23T08:59:26.000Z</published>
    <updated>2026-09-15T02:20:04.174Z</updated>
    
    <content type="html"><![CDATA[<p>题目:</p><p>我只记得RAR的密码是 abcdefg 中不重复的6个字母随机排列组成的。但是其中是不是有哪些字母转为了大写,我已经已经记不得了。一切都靠你自己了。<br>密码举例 cAeGfb</p><p><a href="%E7%94%A8Python%E7%94%9F%E6%88%90%E5%AF%86%E7%A0%81%E5%AD%97%E5%85%B8/%E6%9C%AC%E5%8E%8B%E7%BC%A9%E5%8C%85%E5%AF%86%E7%A0%81%E9%9C%80%E8%A6%81%E8%BF%9B%E8%A1%8C%E7%A0%B4%E8%A7%A33.rar">附件:本压缩包密码需要进行破解3.rar</a></p><p>使用python生成密码字典,然后用ARCHPR破解,解密密码: D***,解压后获取flag</p><p>flag{158e02c09eac01316960696ff0d8e123}</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">import itertools, string</span><br><span class="line"></span><br><span class="line">   words = &#x27;abcdefgABCDEFG&#x27;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">   def generatePassword(repeat):</span><br><span class="line">       with open(&#x27;pwd.txt&#x27;,&#x27;w&#x27;) as f:</span><br><span class="line">           for item in itertools.product(words, repeat=repeat):</span><br><span class="line">               # print(item)</span><br><span class="line">               tmp = [x.lower() for x in item]</span><br><span class="line">               #print(tmp)</span><br><span class="line">               set_lst = set(tmp)</span><br><span class="line">               if len(set_lst) == len(tmp):</span><br><span class="line">                   # 没有重复元素</span><br><span class="line">                   # print(&#x27;&#x27;.join(item))</span><br><span class="line">                   f.write(&#x27;&#x27;.join(item)+&#x27;\n&#x27;)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">   def generatePasswordForRepeat(min, max):</span><br><span class="line">       for i in range(max - min):</span><br><span class="line">           generatePassword(min + i)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">   passwords = generatePassword(6)</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;题目:&lt;/p&gt;
&lt;p&gt;我只记得RAR的密码是 abcdefg 中不重复的6个字母随机排列组成的。但是其中是不是有哪些字母转为了大写,我已经已经记不得了。一切都靠你自己了。&lt;br&gt;密码举例 cAeGfb&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;%E7%94%A8Python%E7%9
      
    
    </summary>
    
    
    
      <category term="ctf" scheme="http://fredliu168.github.io/tags/ctf/"/>
    
  </entry>
  
  <entry>
    <title>misc签到Halo</title>
    <link href="http://fredliu168.github.io/2022/03/22/misc%E7%AD%BE%E5%88%B0Halo/"/>
    <id>http://fredliu168.github.io/2022/03/22/misc%E7%AD%BE%E5%88%B0Halo/</id>
    <published>2022-03-22T09:15:33.000Z</published>
    <updated>2026-09-15T02:20:04.162Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Misc-Halo"><a href="#Misc-Halo" class="headerlink" title="Misc-Halo"></a>Misc-Halo</h2><p>题目:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">aWdxNDs6NDFSOzFpa1I1MWliT08w</span><br></pre></td></tr></table></figure><p>请提交flag{}形式的答案 （这题没多难，这题只是缺德）</p><h5 id="解题："><a href="#解题：" class="headerlink" title="解题："></a>解题：</h5><p>base64后:</p><p>igq4;:41R;1ikR51ibOO0</p><p>后来尝试多种后，想到之前看到过的base64和异或，于是尝试了下：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">python</span><br><span class="line">from base64 import *</span><br><span class="line"></span><br><span class="line">    b = b64decode(&quot;aWdxNDs6NDFSOzFpa1I1MWliT08w&quot;).decode()</span><br><span class="line">    print(b)</span><br><span class="line"></span><br><span class="line">    data = list(b)</span><br><span class="line"></span><br><span class="line">    print(data)</span><br><span class="line">    for k in range(0, 200):</span><br><span class="line"></span><br><span class="line">        key = &quot;&quot;</span><br><span class="line"></span><br><span class="line">        for i in range(len(data)):</span><br><span class="line">            key += chr(ord(data[i]) ^ k)</span><br><span class="line"></span><br><span class="line">        print(key)</span><br></pre></td></tr></table></figure><p>输出:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">igq4;:41R;1ikR51ibOO0</span><br><span class="line">hfp5:;50S:0hjS40hcNN1</span><br><span class="line">kes69863P93kiP73k`MM2</span><br><span class="line">jdr78972Q82jhQ62jaLL3</span><br><span class="line">mcu0?&gt;05V?5moV15mfKK4</span><br><span class="line">lbt1&gt;?14W&gt;4lnW04lgJJ5</span><br><span class="line">oaw2=&lt;27T=7omT37odII6</span><br><span class="line">n`v3&lt;=36U&lt;6nlU26neHH7</span><br><span class="line">aoy&lt;32&lt;9Z39acZ=9ajGG8</span><br><span class="line">`nx=23=8[28`b[&lt;8`kFF9</span><br><span class="line">cm&#123;&gt;10&gt;;X1;caX?;chEE:</span><br><span class="line">blz?01?:Y0:b`Y&gt;:biDD;</span><br><span class="line">ek&#125;8768=^7=eg^9=enCC&lt;</span><br><span class="line">dj|9679&lt;_6&lt;df_8&lt;doBB=</span><br><span class="line">igq4;:41R;1ikR51ibOO0</span><br><span class="line">hfp5:;50S:0hjS40hcNN1</span><br><span class="line">kes69863P93kiP73k`MM2</span><br><span class="line">jdr78972Q82jhQ62jaLL3</span><br><span class="line">mcu0?&gt;05V?5moV15mfKK4</span><br><span class="line">lbt1&gt;?14W&gt;4lnW04lgJJ5</span><br><span class="line">oaw2=&lt;27T=7omT37odII6</span><br><span class="line">n`v3&lt;=36U&lt;6nlU26neHH7</span><br><span class="line">aoy&lt;32&lt;9Z39acZ=9ajGG8</span><br><span class="line">`nx=23=8[28`b[&lt;8`kFF9</span><br><span class="line">cm&#123;&gt;10&gt;;X1;caX?;chEE:</span><br><span class="line">blz?01?:Y0:b`Y&gt;:biDD;</span><br><span class="line">ek&#125;8768=^7=eg^9=enCC&lt;</span><br><span class="line">dj|9679&lt;_6&lt;df_8&lt;doBB=</span><br><span class="line">....</span><br></pre></td></tr></table></figure><p>看到唯一一个没有特殊字符的：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">jdr78972Q82jhQ62jaLL3</span><br></pre></td></tr></table></figure><p>提交,即flag~</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2 id=&quot;Misc-Halo&quot;&gt;&lt;a href=&quot;#Misc-Halo&quot; class=&quot;headerlink&quot; title=&quot;Misc-Halo&quot;&gt;&lt;/a&gt;Misc-Halo&lt;/h2&gt;&lt;p&gt;题目:&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext
      
    
    </summary>
    
    
    
      <category term="ctf" scheme="http://fredliu168.github.io/tags/ctf/"/>
    
  </entry>
  
  <entry>
    <title>Mac下运行.bin文件</title>
    <link href="http://fredliu168.github.io/2022/03/03/Mac%E4%B8%8B%E8%BF%90%E8%A1%8C-bin%E6%96%87%E4%BB%B6/"/>
    <id>http://fredliu168.github.io/2022/03/03/Mac%E4%B8%8B%E8%BF%90%E8%A1%8C-bin%E6%96%87%E4%BB%B6/</id>
    <published>2022-03-03T07:31:26.000Z</published>
    <updated>2026-09-15T02:20:04.149Z</updated>
    
    <content type="html"><![CDATA[<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">chmod a+x CaptfEncoder-darwin-x64-3.1.2.bin</span><br><span class="line">    ./CaptfEncoder-darwin-x64-3.1.2.bin</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;
      
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>Mac使用WireShark和Ettercap抓同一局域网设备数据包</title>
    <link href="http://fredliu168.github.io/2022/02/24/Mac%E4%BD%BF%E7%94%A8WireShark%E5%92%8CEttercap%E6%8A%93%E5%90%8C%E4%B8%80%E5%B1%80%E5%9F%9F%E7%BD%91%E8%AE%BE%E5%A4%87%E6%95%B0%E6%8D%AE%E5%8C%85/"/>
    <id>http://fredliu168.github.io/2022/02/24/Mac%E4%BD%BF%E7%94%A8WireShark%E5%92%8CEttercap%E6%8A%93%E5%90%8C%E4%B8%80%E5%B1%80%E5%9F%9F%E7%BD%91%E8%AE%BE%E5%A4%87%E6%95%B0%E6%8D%AE%E5%8C%85/</id>
    <published>2022-02-24T01:17:24.000Z</published>
    <updated>2026-09-15T02:20:04.149Z</updated>
    
    <content type="html"><![CDATA[<h2 id="安装Ettercap"><a href="#安装Ettercap" class="headerlink" title="安装Ettercap"></a><strong>安装Ettercap</strong></h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ brew install ettercap</span><br></pre></td></tr></table></figure><h2 id="使用Ettercap进行arp欺骗与回话劫持"><a href="#使用Ettercap进行arp欺骗与回话劫持" class="headerlink" title="使用Ettercap进行arp欺骗与回话劫持"></a>使用Ettercap进行arp欺骗与回话劫持</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> ettercap -Tqi en0 -M arp:remote /192.168.50.212//  -l /tmp/log</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2 id=&quot;安装Ettercap&quot;&gt;&lt;a href=&quot;#安装Ettercap&quot; class=&quot;headerlink&quot; title=&quot;安装Ettercap&quot;&gt;&lt;/a&gt;&lt;strong&gt;安装Ettercap&lt;/strong&gt;&lt;/h2&gt;&lt;figure class=&quot;highlight
      
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>RSA加密在Vue和Python中的使用</title>
    <link href="http://fredliu168.github.io/2021/11/17/RSA%E5%8A%A0%E5%AF%86%E5%9C%A8Vue%E5%92%8CPython%E4%B8%AD%E7%9A%84%E4%BD%BF%E7%94%A8/"/>
    <id>http://fredliu168.github.io/2021/11/17/RSA%E5%8A%A0%E5%AF%86%E5%9C%A8Vue%E5%92%8CPython%E4%B8%AD%E7%9A%84%E4%BD%BF%E7%94%A8/</id>
    <published>2021-11-17T03:08:14.000Z</published>
    <updated>2026-09-15T02:20:04.150Z</updated>
    
    <content type="html"><![CDATA[<h2 id="一-Python下使用RSA"><a href="#一-Python下使用RSA" class="headerlink" title="一.Python下使用RSA"></a>一.Python下使用RSA</h2><p>安装rsa包</p><p><code>pip install rsa</code></p><p>使用在线网站生成RSA公钥和匙钥</p><p><a href="http://www.metools.info/code/c80.html">http://www.metools.info/code/c80.html</a></p><p>密钥格式使用PKCS#1</p><p>RsaUtil.py代码</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># -*- coding: UTF-8 -*-</span></span><br><span class="line"><span class="comment"># ! /usr/bin/env python</span></span><br><span class="line"><span class="keyword">import</span> base64</span><br><span class="line"><span class="keyword">import</span> rsa</span><br><span class="line"><span class="keyword">from</span> rsa <span class="keyword">import</span> common</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用 rsa库进行RSA签名和加解密</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">RsaUtil</span>(<span class="title class_ inherited__">object</span>):</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 初始化key</span></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self</span>):</span><br><span class="line"></span><br><span class="line">        <span class="variable language_">self</span>.company_public_key = rsa.PublicKey.load_pkcs1(<span class="string">&quot;&quot;&quot;-----BEGIN RSA PUBLIC KEY-----\n</span></span><br><span class="line"><span class="string">MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvYXgihiiYlfPVEnEyqoR</span></span><br><span class="line"><span class="string">Vba7m5pD3Us2Nv7BDRBKyP7wMNX5egRwl9h++4HaRzVnTz8uYIXr1S27gNNbuyNn</span></span><br><span class="line"><span class="string">TtNSx9KnUBctyRTMFRVAWt68xTzT0UGsM3GKhYWU+H+b0q3pmu+xVZ0Q3xzGIiHO</span></span><br><span class="line"><span class="string">edFCZkSfbvttcEq4CbkYxZRySCgsQWfPuetWKMKWw+9D8rNVJBkvB1/6yh325fJq</span></span><br><span class="line"><span class="string">1LLcPlA4/Oc0A5Zbd5iKPpAVrdQRsLe3q12pbC0VTekxPWsPYcafhEnJVI3xWwne</span></span><br><span class="line"><span class="string">41WExxiAwo8iGB7gONkO0YsQXCYRb/aQTFQ3tmms/Vho2CUVLAyzByyMj7jMGwEl</span></span><br><span class="line"><span class="string">1QIDAQAB\n</span></span><br><span class="line"><span class="string">-----END RSA PUBLIC KEY-----</span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span>)</span><br><span class="line"></span><br><span class="line">        <span class="variable language_">self</span>.company_private_key = rsa.PrivateKey.load_pkcs1(<span class="string">&quot;&quot;&quot;-----BEGIN RSA PRIVATE KEY-----\n</span></span><br><span class="line"><span class="string">MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC9heCKGKJiV89U</span></span><br><span class="line"><span class="string">ScTKqhFVtrubmkPdSzY2/sENEErI/vAw1fl6BHCX2H77gdpHNWdPPy5ghevVLbuA</span></span><br><span class="line"><span class="string">01u7I2dO01LH0qdQFy3JFMwVFUBa3rzFPNPRQawzcYqFhZT4f5vSrema77FVnRDf</span></span><br><span class="line"><span class="string">HMYiIc550UJmRJ9u+21wSrgJuRjFlHJIKCxBZ8+561YowpbD70Pys1UkGS8HX/rK</span></span><br><span class="line"><span class="string">Hfbl8mrUstw+UDj85zQDllt3mIo+kBWt1BGwt7erXalsLRVN6TE9aw9hxp+ESclU</span></span><br><span class="line"><span class="string">jfFbCd7jVYTHGIDCjyIYHuA42Q7RixBcJhFv9pBMVDe2aaz9WGjYJRUsDLMHLIyP</span></span><br><span class="line"><span class="string">uMwbASXVAgMBAAECggEAFLnST2fYQkb2DnKuybcFhEkihSa+qzGxcRw1Ane4pfhz</span></span><br><span class="line"><span class="string">TfPof3aC1ahAYsLVmxn0/U6chMPAgaSpr7Htgy6g+pbTo7SexXxzbl0O4HNdgVKA</span></span><br><span class="line"><span class="string">dFVtmKHE8i9FhcqQ+wgBg22vcVkrHIC7upqL9GmcCehfiY2RnfJzCmexbqbGVbzw</span></span><br><span class="line"><span class="string">vcllb7lYkEoQaDrZ15+qFS7HQCwjL6lpc9KRwTo+sfQV/udceent0FTRkfqpuDN4</span></span><br><span class="line"><span class="string">sQws2alzRkRGuvJqCt7OF1aDVijPVbjZVXu2bnrLhpDeD+sjMZg88dxguiPoojfk</span></span><br><span class="line"><span class="string">WjUVVkpdB5KHZqCmyycBGrcw/bjnzOvvNFvBgw00wQKBgQD0iieqxvwc2I9+RqUD</span></span><br><span class="line"><span class="string">MD7/3HIL6swuwZinCrZAhhmy8eLxmiXOVk+mxyS0WgckwBpyAf5GPxFVXu2PKo5N</span></span><br><span class="line"><span class="string">Nc2kTRrrQECggRccMmr0gVgbxtaCJ6HHcVaW+wLnMYjtOAWDtIYoxzcN0n0cyF73</span></span><br><span class="line"><span class="string">AqsignLPKsnWeErrPHpxgrHWxQKBgQDGZ6ng6nGwduSWZjtdH7CiNnFrjUNO7v7C</span></span><br><span class="line"><span class="string">ZcjiR9fdIlQv1HIFKZiGnmY55KipFGb2aguFJ3xqhi0hCPbdn2rrjdA997oFfpDU</span></span><br><span class="line"><span class="string">jji1QxgGtwoUIgvZC6j36Tu97i394DogK/wUsAum1yeeDLkKpBCZ0hiVe78J7YLc</span></span><br><span class="line"><span class="string">yYwVaeKD0QKBgQDJD/Lvgq52FUVeYT158qhJ/Xoz/Dkn1HvsFG2nfdsRe7rKRaEC</span></span><br><span class="line"><span class="string">F4tkKGcwdrla6SyVQrhMD7zzwZp31ViteSh9B/yzIuBAWAOlZnr0UIkeRY3H9Egb</span></span><br><span class="line"><span class="string">UUAN4ZMQfnUD/sTh9oM8chf9IG1IRiN221XUiQdW+Op9keifo9lVDU2ltQKBgGLY</span></span><br><span class="line"><span class="string">xLcMtqWPJmWT+2Fy52J5s1o9H9qUkZIyebnaxz4h20WVF1VhGt9+zTlspWbPhlig</span></span><br><span class="line"><span class="string">DqtBN+gufw9lUvCpevBuT+B/qksQeoGbdb9A9RhrWvca20JAX+dbaOtAXeONMghT</span></span><br><span class="line"><span class="string">QZzg9H0j1lYUyp/1i1vHY34eD9iXX0o2k7cbcMHxAoGBAJsDR0YcqOXLHsBRvOR4</span></span><br><span class="line"><span class="string">/OLdViw61DSuyvmYcuBLUE0TYsysJfq/bXDiF8ttxMu0S2XMXzTuILM8VaucteWM</span></span><br><span class="line"><span class="string">hM5f+Dci1o1Lp1C1oftLnl/VkG3so1ck0kTe2fqK5HdKE8iFrfPqkA+gFyJT6mx4</span></span><br><span class="line"><span class="string">raQC/GelBXiDOaDVf/lLYDwq\n</span></span><br><span class="line"><span class="string">-----END RSA PRIVATE KEY-----</span></span><br><span class="line"><span class="string">&quot;&quot;&quot;</span>)</span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">get_max_length</span>(<span class="params">self, rsa_key, encrypt=<span class="literal">True</span></span>):</span><br><span class="line">        <span class="string">&quot;&quot;&quot;加密内容过长时 需要分段加密 换算每一段的长度.</span></span><br><span class="line"><span class="string">            :param rsa_key: 钥匙.</span></span><br><span class="line"><span class="string">            :param encrypt: 是否是加密.</span></span><br><span class="line"><span class="string">        &quot;&quot;&quot;</span></span><br><span class="line">        blocksize = common.byte_size(rsa_key.n)</span><br><span class="line">        reserve_size = <span class="number">11</span>  <span class="comment"># 预留位为11</span></span><br><span class="line">        <span class="keyword">if</span> <span class="keyword">not</span> encrypt:  <span class="comment"># 解密时不需要考虑预留位</span></span><br><span class="line">            reserve_size = <span class="number">0</span></span><br><span class="line">        maxlength = blocksize - reserve_size</span><br><span class="line">        <span class="keyword">return</span> maxlength</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 加密 支付方公钥</span></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">encrypt_by_public_key</span>(<span class="params">self, message</span>):</span><br><span class="line">        <span class="string">&quot;&quot;&quot;使用公钥加密.</span></span><br><span class="line"><span class="string">            :param message: 需要加密的内容.</span></span><br><span class="line"><span class="string">            加密之后需要对接过进行base64转码</span></span><br><span class="line"><span class="string">        &quot;&quot;&quot;</span></span><br><span class="line">        encrypt_result = <span class="string">b&#x27;&#x27;</span></span><br><span class="line">        max_length = <span class="variable language_">self</span>.get_max_length(<span class="variable language_">self</span>.company_public_key)</span><br><span class="line">        <span class="keyword">while</span> message:</span><br><span class="line">            <span class="built_in">input</span> = message[:max_length]</span><br><span class="line">            message = message[max_length:]</span><br><span class="line">            out = rsa.encrypt(<span class="built_in">input</span>.encode(), <span class="variable language_">self</span>.company_public_key)</span><br><span class="line">            <span class="comment">#print(out)</span></span><br><span class="line">            encrypt_result += out</span><br><span class="line">            <span class="comment"># print(encrypt_result)</span></span><br><span class="line">        encrypt_result = base64.b64encode(encrypt_result)</span><br><span class="line"></span><br><span class="line">        <span class="keyword">return</span> encrypt_result</span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">decrypt_by_private_key</span>(<span class="params">self, message</span>):</span><br><span class="line">        <span class="string">&quot;&quot;&quot;使用私钥解密.</span></span><br><span class="line"><span class="string">            :param message: 需要加密的内容.</span></span><br><span class="line"><span class="string">            解密之后的内容直接是字符串，不需要在进行转义</span></span><br><span class="line"><span class="string">        &quot;&quot;&quot;</span></span><br><span class="line">        decrypt_result = <span class="string">b&quot;&quot;</span></span><br><span class="line"></span><br><span class="line">        max_length = <span class="variable language_">self</span>.get_max_length(<span class="variable language_">self</span>.company_private_key, <span class="literal">False</span>)</span><br><span class="line">        decrypt_message = base64.b64decode(message)</span><br><span class="line">        <span class="keyword">while</span> decrypt_message:</span><br><span class="line">            <span class="built_in">input</span> = decrypt_message[:max_length]</span><br><span class="line">            decrypt_message = decrypt_message[max_length:]</span><br><span class="line">            out = rsa.decrypt(<span class="built_in">input</span>, <span class="variable language_">self</span>.company_private_key)</span><br><span class="line">            decrypt_result += out</span><br><span class="line">        <span class="keyword">return</span> decrypt_result</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    <span class="comment"># 签名 商户私钥 base64转码</span></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">sign_by_private_key</span>(<span class="params">self, data</span>):</span><br><span class="line">        <span class="string">&quot;&quot;&quot;私钥签名.</span></span><br><span class="line"><span class="string">            :param data: 需要签名的内容.</span></span><br><span class="line"><span class="string">            使用SHA-1 方法进行签名（也可以使用MD5）</span></span><br><span class="line"><span class="string">            签名之后，需要转义后输出</span></span><br><span class="line"><span class="string">        &quot;&quot;&quot;</span></span><br><span class="line">        signature = rsa.sign(<span class="built_in">str</span>(data), priv_key=<span class="variable language_">self</span>.company_private_key, <span class="built_in">hash</span>=<span class="string">&#x27;SHA-1&#x27;</span>)</span><br><span class="line">        <span class="keyword">return</span> base64.b64encode(signature)</span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">verify_by_public_key</span>(<span class="params">self, message, signature</span>):</span><br><span class="line">        <span class="string">&quot;&quot;&quot;公钥验签.</span></span><br><span class="line"><span class="string">            :param message: 验签的内容.</span></span><br><span class="line"><span class="string">            :param signature: 对验签内容签名的值（签名之后，会进行b64encode转码，所以验签前也需转码）.</span></span><br><span class="line"><span class="string">        &quot;&quot;&quot;</span></span><br><span class="line">        signature = base64.b64decode(signature)</span><br><span class="line">        <span class="keyword">return</span> rsa.verify(message, signature, <span class="variable language_">self</span>.company_public_key)</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">&#x27;__main__&#x27;</span>:</span><br><span class="line">    message = <span class="string">&#x27;hell world&#x27;</span></span><br><span class="line">    <span class="comment"># print(&quot;明文内容：&gt;&gt;&gt; &quot;)</span></span><br><span class="line">    <span class="comment"># print(message)</span></span><br><span class="line">    rsaUtil = RsaUtil()</span><br><span class="line">    encrypy_result = rsaUtil.encrypt_by_public_key(message)</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;加密结果：&gt;&gt;&gt; &quot;</span>)</span><br><span class="line">    <span class="built_in">print</span>(encrypy_result.decode())</span><br><span class="line"></span><br><span class="line">    decrypt_result = rsaUtil.decrypt_by_private_key(encrypy_result)</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;解密结果：&gt;&gt;&gt; &quot;</span>)</span><br><span class="line">    <span class="built_in">print</span>(decrypt_result.decode())</span><br><span class="line"></span><br><span class="line">    <span class="comment"># key = rsa.newkeys(1024)#生成随机秘钥</span></span><br><span class="line">    <span class="comment"># privateKey = key[1]#私钥</span></span><br><span class="line">    <span class="comment"># publicKey = key[0]#公钥</span></span><br><span class="line">    <span class="comment"># print(publicKey)</span></span><br><span class="line">    <span class="comment"># print(privateKey)</span></span><br></pre></td></tr></table></figure><h2 id="二-Vue下使用RSA"><a href="#二-Vue下使用RSA" class="headerlink" title="二.Vue下使用RSA"></a>二.Vue下使用RSA</h2><h3 id="1-现在vue项目中安装依赖包jsencrypt"><a href="#1-现在vue项目中安装依赖包jsencrypt" class="headerlink" title="1.现在vue项目中安装依赖包jsencrypt"></a>1.现在<a href="https://so.csdn.net/so/search?from=pc_blog_highlight&q=vue">vue</a>项目中安装依赖包<strong>jsencrypt</strong></h3><p><code>npm install jsencrypt --save-dev</code></p><h3 id="2-使用rsa加解密过程中会出现待加密和待解密字符串过长情况，需要用到分段加解密需要进入依赖包中修改jsencrypt-js-文件中方法，具体方法如下："><a href="#2-使用rsa加解密过程中会出现待加密和待解密字符串过长情况，需要用到分段加解密需要进入依赖包中修改jsencrypt-js-文件中方法，具体方法如下：" class="headerlink" title="2.使用rsa加解密过程中会出现待加密和待解密字符串过长情况，需要用到分段加解密需要进入依赖包中修改jsencrypt.js 文件中方法，具体方法如下："></a>2.使用rsa加解密过程中会出现待加密和待解密字符串过长情况，需要用到分段加解密需要进入依赖包中修改jsencrypt.js 文件中方法，具体方法如下：</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//任意长度RSA Key分段加密解密长字符串</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">//获取RSA key 长度</span></span><br><span class="line">    <span class="title class_">JSEncrypt</span>.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">getkeylength</span> = <span class="keyword">function</span>(<span class="params"></span>) &#123;</span><br><span class="line">        <span class="keyword">return</span> ((<span class="variable language_">this</span>.<span class="property">key</span>.<span class="property">n</span>.<span class="title function_">bitLength</span>() + <span class="number">7</span>) &gt;&gt; <span class="number">3</span>);</span><br><span class="line">    &#125;;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 分段加密，支持中文</span></span><br><span class="line">    <span class="title class_">JSEncrypt</span>.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">encryptUnicodeLong</span> = <span class="keyword">function</span>(<span class="params">string</span>) &#123;</span><br><span class="line">        <span class="keyword">var</span> k = <span class="variable language_">this</span>.<span class="title function_">getKey</span>();</span><br><span class="line">        <span class="comment">//根据key所能编码的最大长度来定分段长度。key size - 11：11字节随机padding使每次加密结果都不同。</span></span><br><span class="line">        <span class="keyword">var</span> maxLength = ((k.<span class="property">n</span>.<span class="title function_">bitLength</span>() + <span class="number">7</span>) &gt;&gt; <span class="number">3</span>) - <span class="number">11</span>;</span><br><span class="line">        <span class="keyword">try</span> &#123;</span><br><span class="line">            <span class="keyword">var</span> subStr = <span class="string">&quot;&quot;</span>,</span><br><span class="line">                encryptedString = <span class="string">&quot;&quot;</span>;</span><br><span class="line">            <span class="keyword">var</span> subStart = <span class="number">0</span>,</span><br><span class="line">                subEnd = <span class="number">0</span>;</span><br><span class="line">            <span class="keyword">var</span> bitLen = <span class="number">0</span>,</span><br><span class="line">                tmpPoint = <span class="number">0</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>, len = string.<span class="property">length</span>; i &lt; len; i++) &#123;</span><br><span class="line">                <span class="comment">//js 是使用 Unicode 编码的，每个字符所占用的字节数不同</span></span><br><span class="line">                <span class="keyword">var</span> charCode = string.<span class="title function_">charCodeAt</span>(i);</span><br><span class="line">                <span class="keyword">if</span> (charCode &lt;= <span class="number">0x007f</span>) &#123;</span><br><span class="line">                    bitLen += <span class="number">1</span>;</span><br><span class="line">                &#125; <span class="keyword">else</span> <span class="keyword">if</span> (charCode &lt;= <span class="number">0x07ff</span>) &#123;</span><br><span class="line">                    bitLen += <span class="number">2</span>;</span><br><span class="line">                &#125; <span class="keyword">else</span> <span class="keyword">if</span> (charCode &lt;= <span class="number">0xffff</span>) &#123;</span><br><span class="line">                    bitLen += <span class="number">3</span>;</span><br><span class="line">                &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                    bitLen += <span class="number">4</span>;</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="comment">//字节数到达上限，获取子字符串加密并追加到总字符串后。更新下一个字符串起始位置及字节计算。</span></span><br><span class="line">                <span class="keyword">if</span> (bitLen &gt; maxLength) &#123;</span><br><span class="line">                    subStr = string.<span class="title function_">substring</span>(subStart, subEnd)</span><br><span class="line">                    encryptedString += k.<span class="title function_">encrypt</span>(subStr);</span><br><span class="line">                    subStart = subEnd;</span><br><span class="line">                    bitLen = bitLen - tmpPoint;</span><br><span class="line">                &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                    subEnd = i;</span><br><span class="line">                    tmpPoint = bitLen;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">            subStr = string.<span class="title function_">substring</span>(subStart, len)</span><br><span class="line">            encryptedString += k.<span class="title function_">encrypt</span>(subStr);</span><br><span class="line">            <span class="keyword">return</span> <span class="title function_">hex2b64</span>(encryptedString);</span><br><span class="line">        &#125; <span class="keyword">catch</span> (ex) &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 分段解密，支持中文</span></span><br><span class="line">    <span class="title class_">JSEncrypt</span>.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">decryptUnicodeLong</span> = <span class="keyword">function</span>(<span class="params">string</span>) &#123;</span><br><span class="line">        <span class="keyword">var</span> k = <span class="variable language_">this</span>.<span class="title function_">getKey</span>();</span><br><span class="line">        <span class="comment">//解密长度=key size.hex2b64结果是每字节每两字符，所以直接*2</span></span><br><span class="line">        <span class="keyword">var</span> maxLength = ((k.<span class="property">n</span>.<span class="title function_">bitLength</span>() + <span class="number">7</span>) &gt;&gt; <span class="number">3</span>) * <span class="number">2</span>;</span><br><span class="line">        <span class="keyword">try</span> &#123;</span><br><span class="line">            <span class="keyword">var</span> hexString = <span class="title function_">b64tohex</span>(string);</span><br><span class="line">            <span class="keyword">var</span> decryptedString = <span class="string">&quot;&quot;</span>;</span><br><span class="line">            <span class="keyword">var</span> rexStr = <span class="string">&quot;.&#123;1,&quot;</span> + maxLength + <span class="string">&quot;&#125;&quot;</span>;</span><br><span class="line">            <span class="keyword">var</span> rex = <span class="keyword">new</span> <span class="title class_">RegExp</span>(rexStr, <span class="string">&#x27;g&#x27;</span>);</span><br><span class="line">            <span class="keyword">var</span> subStrArray = hexString.<span class="title function_">match</span>(rex);</span><br><span class="line">            <span class="keyword">if</span> (subStrArray) &#123;</span><br><span class="line">                subStrArray.<span class="title function_">forEach</span>(<span class="keyword">function</span>(<span class="params">entry</span>) &#123;</span><br><span class="line">                    decryptedString += k.<span class="title function_">decrypt</span>(entry);</span><br><span class="line">                &#125;);</span><br><span class="line">                <span class="keyword">return</span> decryptedString;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125; <span class="keyword">catch</span> (ex) &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="3-main-js中引用依赖"><a href="#3-main-js中引用依赖" class="headerlink" title="3.main.js中引用依赖"></a>3.main.js中引用依赖</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> <span class="title class_">JSEncrypt</span> <span class="keyword">from</span> <span class="string">&#x27;jsencrypt&#x27;</span>;</span><br><span class="line"><span class="comment">/* eslint-disable */</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> privKey = <span class="string">`-----BEGIN RSA PRIVATE KEY-----</span></span><br><span class="line"><span class="string">..............</span></span><br><span class="line"><span class="string">-----END RSA PRIVATE KEY-----`</span>; <span class="comment">// ES6 模板字符串 引用 rsa 公钥</span></span><br><span class="line"></span><br><span class="line"><span class="title class_">Vue</span>.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">$getRsaDescrypt</span> = <span class="keyword">function</span>(<span class="params">str</span>) &#123; <span class="comment">// 注册方法</span></span><br><span class="line">    <span class="keyword">let</span> encryptStr = <span class="keyword">new</span> <span class="title class_">JSEncrypt</span>();</span><br><span class="line">    encryptStr.<span class="title function_">setPrivateKey</span>(privKey);</span><br><span class="line">    <span class="keyword">let</span> data = encryptStr.<span class="title function_">decryptUnicodeLong</span>(str); <span class="comment">//解密</span></span><br><span class="line">    <span class="keyword">return</span> data;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="title class_">Vue</span>.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">$getRsaEncrypt</span> = <span class="keyword">function</span>(<span class="params">str</span>) &#123; <span class="comment">// 注册方法</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">let</span> encryptStr = <span class="keyword">new</span> <span class="title class_">JSEncrypt</span>();</span><br><span class="line">    encryptStr.<span class="title function_">setPrivateKey</span>(privKey);</span><br><span class="line">    <span class="keyword">let</span> data = encryptStr.<span class="title function_">encryptUnicodeLong</span>(str); <span class="comment">//加密</span></span><br><span class="line">    <span class="keyword">return</span> data;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="4、使用RSA"><a href="#4、使用RSA" class="headerlink" title="4、使用RSA"></a>4、使用RSA</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">this</span>.$getRsaEncrypt(<span class="string">&#x27;需要加密内容&#x27;</span>)</span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2 id=&quot;一-Python下使用RSA&quot;&gt;&lt;a href=&quot;#一-Python下使用RSA&quot; class=&quot;headerlink&quot; title=&quot;一.Python下使用RSA&quot;&gt;&lt;/a&gt;一.Python下使用RSA&lt;/h2&gt;&lt;p&gt;安装rsa包&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pi
      
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>nginx安全配置</title>
    <link href="http://fredliu168.github.io/2021/10/21/nginx%E5%AE%89%E5%85%A8%E9%85%8D%E7%BD%AE/"/>
    <id>http://fredliu168.github.io/2021/10/21/nginx%E5%AE%89%E5%85%A8%E9%85%8D%E7%BD%AE/</id>
    <published>2021-10-21T03:39:27.000Z</published>
    <updated>2026-09-15T02:20:04.162Z</updated>
    
    <content type="html"><![CDATA[<h1 id="如何避免CRLF注入攻击配置"><a href="#如何避免CRLF注入攻击配置" class="headerlink" title="如何避免CRLF注入攻击配置"></a>如何避免CRLF注入攻击配置</h1><p>CR 和 LF 字符将在 $request_uri 中编码为 %0D%0A。<br> 可以通过在服务器块顶部附近放置一个 if 块来检测它们：  </p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">if</span> ( <span class="variable">$request_uri</span> <span class="regexp">~* &quot;%0A|%0D&quot;</span> ) </span><br><span class="line">&#123; </span><br><span class="line">    <span class="attribute">return</span> <span class="number">403</span>; </span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><span id="more"></span>]]></content>
    
    <summary type="html">
    
      &lt;h1 id=&quot;如何避免CRLF注入攻击配置&quot;&gt;&lt;a href=&quot;#如何避免CRLF注入攻击配置&quot; class=&quot;headerlink&quot; title=&quot;如何避免CRLF注入攻击配置&quot;&gt;&lt;/a&gt;如何避免CRLF注入攻击配置&lt;/h1&gt;&lt;p&gt;CR 和 LF 字符将在 $request_uri 中编码为 %0D%0A。&lt;br&gt; 可以通过在服务器块顶部附近放置一个 if 块来检测它们：  &lt;/p&gt;
&lt;figure class=&quot;highlight nginx&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;attribute&quot;&gt;if&lt;/span&gt; ( &lt;span class=&quot;variable&quot;&gt;$request_uri&lt;/span&gt; &lt;span class=&quot;regexp&quot;&gt;~* &amp;quot;%0A|%0D&amp;quot;&lt;/span&gt; ) &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#123; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attribute&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;number&quot;&gt;403&lt;/span&gt;; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>MacOs内外网自动切换脚本</title>
    <link href="http://fredliu168.github.io/2021/10/19/MacOs%E5%86%85%E5%A4%96%E7%BD%91%E8%87%AA%E5%8A%A8%E5%88%87%E6%8D%A2%E8%84%9A%E6%9C%AC/"/>
    <id>http://fredliu168.github.io/2021/10/19/MacOs%E5%86%85%E5%A4%96%E7%BD%91%E8%87%AA%E5%8A%A8%E5%88%87%E6%8D%A2%E8%84%9A%E6%9C%AC/</id>
    <published>2021-10-19T08:42:13.000Z</published>
    <updated>2026-09-15T02:20:04.149Z</updated>
    
    <content type="html"><![CDATA[<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># chmod +x ./switch_net.sh  使脚本具有执行权限</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;#################################&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;#网络切换，1:OA，2:Wlan&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;#请输入需要切换的网络，回车默认Wlan，IP获取为DHCP模式&quot;</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;#################################&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">read</span>  -p <span class="string">&quot;please enter you choise: &quot;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> [[ <span class="string">&quot;<span class="variable">$REPLY</span>&quot;</span> == 1 ]]</span><br><span class="line"><span class="keyword">then</span></span><br><span class="line">  <span class="built_in">echo</span> <span class="string">&quot;网络切换为OA&quot;</span></span><br><span class="line">  <span class="built_in">sudo</span> ifconfig en10 ether 11:1C:29:1A:12:AD</span><br><span class="line">  networksetup -setmanual <span class="string">&quot;AX88179 USB 3.0 to Gigabit Ethernet&quot;</span> 110.149.197.269 255.255.255.0 </span><br><span class="line">  <span class="built_in">echo</span> <span class="string">&quot;切换成功&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">  <span class="built_in">echo</span> <span class="string">&quot;网络切换为Wlan&quot;</span></span><br><span class="line">  <span class="built_in">sudo</span> networksetup -setdhcp <span class="string">&quot;AX88179 USB 3.0 to Gigabit Ethernet&quot;</span></span><br><span class="line">  <span class="built_in">echo</span> <span class="string">&quot;切换成功&quot;</span></span><br><span class="line"><span class="keyword">fi</span></span><br></pre></td></tr></table></figure><p>执行以下语句使脚本具有执行权限</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod +x ./switch_net.sh  </span><br></pre></td></tr></table></figure><span id="more"></span>]]></content>
    
    <summary type="html">
    
      &lt;figure class=&quot;highlight sh&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;19&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;20&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;comment&quot;&gt;# chmod +x ./switch_net.sh  使脚本具有执行权限&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;quot;#################################&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;quot;#网络切换，1:OA，2:Wlan&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;quot;#请输入需要切换的网络，回车默认Wlan，IP获取为DHCP模式&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;quot;#################################&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;built_in&quot;&gt;read&lt;/span&gt;  -p &lt;span class=&quot;string&quot;&gt;&amp;quot;please enter you choise: &amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;if&lt;/span&gt; [[ &lt;span class=&quot;string&quot;&gt;&amp;quot;&lt;span class=&quot;variable&quot;&gt;$REPLY&lt;/span&gt;&amp;quot;&lt;/span&gt; == 1 ]]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;then&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;quot;网络切换为OA&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;built_in&quot;&gt;sudo&lt;/span&gt; ifconfig en10 ether 11:1C:29:1A:12:AD&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  networksetup -setmanual &lt;span class=&quot;string&quot;&gt;&amp;quot;AX88179 USB 3.0 to Gigabit Ethernet&amp;quot;&lt;/span&gt; 110.149.197.269 255.255.255.0 &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;quot;切换成功&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;else&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;quot;网络切换为Wlan&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;built_in&quot;&gt;sudo&lt;/span&gt; networksetup -setdhcp &lt;span class=&quot;string&quot;&gt;&amp;quot;AX88179 USB 3.0 to Gigabit Ethernet&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;quot;切换成功&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;keyword&quot;&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;执行以下语句使脚本具有执行权限&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;chmod +x ./switch_net.sh  &lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>Nginx废除支持TSL1.0和TSL1.1导致Python3网络请求时出现CERTIFICATE_VERIFY_FAILED处理</title>
    <link href="http://fredliu168.github.io/2021/10/19/Nginx%E5%BA%9F%E9%99%A4%E6%94%AF%E6%8C%81TSL1-0%E5%92%8CTSL1-1%E5%AF%BC%E8%87%B4Python3%E7%BD%91%E7%BB%9C%E8%AF%B7%E6%B1%82%E6%97%B6%E5%87%BA%E7%8E%B0CERTIFICATE-VERIFY-FAILED%E5%A4%84%E7%90%86/"/>
    <id>http://fredliu168.github.io/2021/10/19/Nginx%E5%BA%9F%E9%99%A4%E6%94%AF%E6%8C%81TSL1-0%E5%92%8CTSL1-1%E5%AF%BC%E8%87%B4Python3%E7%BD%91%E7%BB%9C%E8%AF%B7%E6%B1%82%E6%97%B6%E5%87%BA%E7%8E%B0CERTIFICATE-VERIFY-FAILED%E5%A4%84%E7%90%86/</id>
    <published>2021-10-19T07:45:19.000Z</published>
    <updated>2026-09-15T02:20:04.150Z</updated>
    
    <content type="html"><![CDATA[<p>nginx配置不支持TSL1.0和TSL1.1后出现:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired </span><br></pre></td></tr></table></figure><p>把代码中的 </p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">AsyncHTTPClient(max_clients=config.async_http_client_max_clients).fetch(</span><br><span class="line">                HTTPRequest(url=url,</span><br><span class="line">                            method=method,</span><br><span class="line">                            body=body,</span><br><span class="line">                            headers=<span class="variable language_">self</span>.headers,</span><br><span class="line">                            ssl_options=&#123;<span class="string">&quot;ssl_version&quot;</span>: ssl.PROTOCOL_TLSv1&#125;, </span><br><span class="line">                            follow_redirects=<span class="literal">False</span>),</span><br><span class="line">                <span class="variable language_">self</span>._on_proxy)</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssl_options=&#123;&quot;ssl_version&quot;: ssl.PROTOCOL_TLSv1&#125;</span><br></pre></td></tr></table></figure><p>改为:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssl_options=&#123;&quot;ssl_version&quot;: ssl.PROTOCOL_SSLv23&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;nginx配置不支持TSL1.0和TSL1.1后出现:&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/p
      
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>Quantumult屏蔽掌上公交广告配置</title>
    <link href="http://fredliu168.github.io/2021/08/26/Quantumult%E5%B1%8F%E8%94%BD%E6%8E%8C%E4%B8%8A%E5%85%AC%E4%BA%A4%E5%B9%BF%E5%91%8A%E9%85%8D%E7%BD%AE/"/>
    <id>http://fredliu168.github.io/2021/08/26/Quantumult%E5%B1%8F%E8%94%BD%E6%8E%8C%E4%B8%8A%E5%85%AC%E4%BA%A4%E5%B9%BF%E5%91%8A%E9%85%8D%E7%BD%AE/</id>
    <published>2021-08-26T03:02:52.000Z</published>
    <updated>2026-09-15T02:20:04.150Z</updated>
    
    <content type="html"><![CDATA[<p>掌上公交提供了实时的公交查询,功能做的挺好的,就是广告超级多,体验超级差,有开屏广告,弹窗广告,后台却换广告,暂时没找到可以替代的软件,而已没有提供会员去广告的功能,希望该软件能出一个会员免广告版本,我可以考虑充个会员,无奈只能想办法怎么去屏蔽一下广告,经过摸索发现Quantumult可以设置屏蔽相关站点.瞬间清爽了,设置如下.</p><p>[TCP]<br>HOST,api-access.pangolin-sdk-toutiao.com,REJECT<br>HOST,telemetry.sdk.inmobi.cn,REJECT<br>HOST,dg.k.jd.com,REJECT<br>HOST,kepler.jd.com,REJECT<br>HOST,baichuan-sdk.taobao.com,REJECT<br>HOST,qzs.qq.com,REJECT<br>HOST,cpu-openapi.baidu.com,REJECT<br>HOST,log-api.pangolin-sdk-toutiao.com,REJECT<br>HOST,caclick.baidu.com,REJECT<br>HOST,publish-pic-cpu.baidu.com,REJECT<br>IP-CIDR,112.49.27.244&#x2F;24,REJECT<br>HOST,<a href="http://www.huyue.best,reject/">www.huyue.best,REJECT</a><br>HOST,toblog.ctobsnssdk.com,REJECT<br>HOST,mobads.baidu.com,REJECT<br>HOST,mobads-logs.baidu.com,REJECT<br>HOST,sf3-fe-tos.pglstatp-toutiao.com,REJECT<br>HOST,ulogs.umengcloud.com,REJECT<br>HOST,mi.gdt.qq.com,REJECT<br>HOST,ulogs.umeng.com,REJECT<br>HOST,v2.gdt.qq.com,REJECT<br>HOST,errlog.umeng.com,REJECT<br>HOST,ios.bugly.qq.com,REJECT<br>HOST,sdk.e.qq.com,REJECT<br>HOST,userlink.alicdn.com,REJECT<br>HOST,api.lytaohuitao.com,REJECT<br>HOST,audid-api.taobao.com,REJECT<br>HOST,sdkm.w.inmobi.cn,REJECT<br>HOST,adashbc.ut.taobao.com,REJECT</p><span id="more"></span>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;掌上公交提供了实时的公交查询,功能做的挺好的,就是广告超级多,体验超级差,有开屏广告,弹窗广告,后台却换广告,暂时没找到可以替代的软件,而已没有提供会员去广告的功能,希望该软件能出一个会员免广告版本,我可以考虑充个会员,无奈只能想办法怎么去屏蔽一下广告,经过摸索发现Quantumult可以设置屏蔽相关站点.瞬间清爽了,设置如下.&lt;/p&gt;
&lt;p&gt;[TCP]&lt;br&gt;HOST,api-access.pangolin-sdk-toutiao.com,REJECT&lt;br&gt;HOST,telemetry.sdk.inmobi.cn,REJECT&lt;br&gt;HOST,dg.k.jd.com,REJECT&lt;br&gt;HOST,kepler.jd.com,REJECT&lt;br&gt;HOST,baichuan-sdk.taobao.com,REJECT&lt;br&gt;HOST,qzs.qq.com,REJECT&lt;br&gt;HOST,cpu-openapi.baidu.com,REJECT&lt;br&gt;HOST,log-api.pangolin-sdk-toutiao.com,REJECT&lt;br&gt;HOST,caclick.baidu.com,REJECT&lt;br&gt;HOST,publish-pic-cpu.baidu.com,REJECT&lt;br&gt;IP-CIDR,112.49.27.244&amp;#x2F;24,REJECT&lt;br&gt;HOST,&lt;a href=&quot;http://www.huyue.best,reject/&quot;&gt;www.huyue.best,REJECT&lt;/a&gt;&lt;br&gt;HOST,toblog.ctobsnssdk.com,REJECT&lt;br&gt;HOST,mobads.baidu.com,REJECT&lt;br&gt;HOST,mobads-logs.baidu.com,REJECT&lt;br&gt;HOST,sf3-fe-tos.pglstatp-toutiao.com,REJECT&lt;br&gt;HOST,ulogs.umengcloud.com,REJECT&lt;br&gt;HOST,mi.gdt.qq.com,REJECT&lt;br&gt;HOST,ulogs.umeng.com,REJECT&lt;br&gt;HOST,v2.gdt.qq.com,REJECT&lt;br&gt;HOST,errlog.umeng.com,REJECT&lt;br&gt;HOST,ios.bugly.qq.com,REJECT&lt;br&gt;HOST,sdk.e.qq.com,REJECT&lt;br&gt;HOST,userlink.alicdn.com,REJECT&lt;br&gt;HOST,api.lytaohuitao.com,REJECT&lt;br&gt;HOST,audid-api.taobao.com,REJECT&lt;br&gt;HOST,sdkm.w.inmobi.cn,REJECT&lt;br&gt;HOST,adashbc.ut.taobao.com,REJECT&lt;/p&gt;
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>nginx设置https</title>
    <link href="http://fredliu168.github.io/2021/08/03/nginx%E8%AE%BE%E7%BD%AEhttps/"/>
    <id>http://fredliu168.github.io/2021/08/03/nginx%E8%AE%BE%E7%BD%AEhttps/</id>
    <published>2021-08-03T12:12:56.000Z</published>
    <updated>2026-09-15T02:20:04.162Z</updated>
    
    <content type="html"><![CDATA[<h2 id="SSH-into-the-server"><a href="#SSH-into-the-server" class="headerlink" title="SSH into the server"></a>SSH into the server</h2><p>SSH into the server running your HTTP website as a user with sudo privileges.</p><h2 id="Install-snapd"><a href="#Install-snapd" class="headerlink" title="Install snapd"></a>Install snapd</h2><p>You’ll need to install snapd and make sure you follow any instructions to enable classic snap support.<br>Follow these instructions on snapcraft’s site to install snapd.</p><p>Ensure that your version of snapd is up to date<br>Execute the following instructions on the command line on the machine to ensure that you have the latest version of snapd.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">sudo snap install core; </span><br><span class="line"></span><br><span class="line">sudo snap refresh core</span><br></pre></td></tr></table></figure><p>Remove certbot-auto and any Certbot OS packages<br>If you have any Certbot packages installed using an OS package manager like apt, dnf, or yum, you should remove them before installing the Certbot snap to ensure that when you run the command certbot the snap is used rather than the installation from your OS package manager. The exact command to do this depends on your OS, but common examples are sudo apt-get remove certbot, sudo dnf remove certbot, or sudo yum remove certbot.</p><p>If you previously used Certbot through the certbot-auto script, you should also remove its installation by following the instructions here.</p><h2 id="Install-Certbot"><a href="#Install-Certbot" class="headerlink" title="Install Certbot"></a>Install Certbot</h2><p>Run this command on the command line on the machine to install Certbot.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo snap install --classic certbot</span><br></pre></td></tr></table></figure><p>Prepare the Certbot command<br>Execute the following instruction on the command line on the machine to ensure that the certbot command can be run.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo ln -s /snap/bin/certbot /usr/bin/certbot</span><br></pre></td></tr></table></figure><p>Choose how you’d like to run Certbot<br>Either get and install your certificates…<br>Run this command to get a certificate and have Certbot edit your Nginx configuration automatically to serve it, turning on HTTPS access in a single step.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo certbot --nginx</span><br></pre></td></tr></table></figure><p>Or, just get a certificate<br>If you’re feeling more conservative and would like to make the changes to your Nginx configuration by hand, run this command.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo certbot certonly --nginx</span><br></pre></td></tr></table></figure><span id="more"></span><h2 id="Test-automatic-renewal"><a href="#Test-automatic-renewal" class="headerlink" title="Test automatic renewal"></a>Test automatic renewal</h2><p>The Certbot packages on your system come with a cron job or systemd timer that will renew your certificates automatically before they expire. You will not need to run Certbot again, unless you change your configuration.</p><p>You can test automatic renewal for your certificates by running this command:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo certbot renew --dry-run</span><br></pre></td></tr></table></figure><p>If that command completes without errors, your certificates will renew automatically in the background.</p>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;SSH-into-the-server&quot;&gt;&lt;a href=&quot;#SSH-into-the-server&quot; class=&quot;headerlink&quot; title=&quot;SSH into the server&quot;&gt;&lt;/a&gt;SSH into the server&lt;/h2&gt;&lt;p&gt;SSH into the server running your HTTP website as a user with sudo privileges.&lt;/p&gt;
&lt;h2 id=&quot;Install-snapd&quot;&gt;&lt;a href=&quot;#Install-snapd&quot; class=&quot;headerlink&quot; title=&quot;Install snapd&quot;&gt;&lt;/a&gt;Install snapd&lt;/h2&gt;&lt;p&gt;You’ll need to install snapd and make sure you follow any instructions to enable classic snap support.&lt;br&gt;Follow these instructions on snapcraft’s site to install snapd.&lt;/p&gt;
&lt;p&gt;Ensure that your version of snapd is up to date&lt;br&gt;Execute the following instructions on the command line on the machine to ensure that you have the latest version of snapd.&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;sudo snap install core; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;sudo snap refresh core&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;Remove certbot-auto and any Certbot OS packages&lt;br&gt;If you have any Certbot packages installed using an OS package manager like apt, dnf, or yum, you should remove them before installing the Certbot snap to ensure that when you run the command certbot the snap is used rather than the installation from your OS package manager. The exact command to do this depends on your OS, but common examples are sudo apt-get remove certbot, sudo dnf remove certbot, or sudo yum remove certbot.&lt;/p&gt;
&lt;p&gt;If you previously used Certbot through the certbot-auto script, you should also remove its installation by following the instructions here.&lt;/p&gt;
&lt;h2 id=&quot;Install-Certbot&quot;&gt;&lt;a href=&quot;#Install-Certbot&quot; class=&quot;headerlink&quot; title=&quot;Install Certbot&quot;&gt;&lt;/a&gt;Install Certbot&lt;/h2&gt;&lt;p&gt;Run this command on the command line on the machine to install Certbot.&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sudo snap install --classic certbot&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;Prepare the Certbot command&lt;br&gt;Execute the following instruction on the command line on the machine to ensure that the certbot command can be run.&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sudo ln -s /snap/bin/certbot /usr/bin/certbot&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;Choose how you’d like to run Certbot&lt;br&gt;Either get and install your certificates…&lt;br&gt;Run this command to get a certificate and have Certbot edit your Nginx configuration automatically to serve it, turning on HTTPS access in a single step.&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sudo certbot --nginx&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;Or, just get a certificate&lt;br&gt;If you’re feeling more conservative and would like to make the changes to your Nginx configuration by hand, run this command.&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sudo certbot certonly --nginx&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>为iterm2设置代理</title>
    <link href="http://fredliu168.github.io/2021/07/29/%E4%B8%BAiterm2%E8%AE%BE%E7%BD%AE%E4%BB%A3%E7%90%86/"/>
    <id>http://fredliu168.github.io/2021/07/29/%E4%B8%BAiterm2%E8%AE%BE%E7%BD%AE%E4%BB%A3%E7%90%86/</id>
    <published>2021-07-29T06:55:08.000Z</published>
    <updated>2026-09-15T02:20:04.163Z</updated>
    
    <content type="html"><![CDATA[<ol><li>设置终端代理<br>最新的 ShadowsocksX-NG 已经支持终端代理, 我们可以如下图复制得出:</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">export http_proxy=http://127.0.0.1:1081;export https_proxy=http://127.0.0.1:1081;</span><br></pre></td></tr></table></figure><img src="/2021/07/29/%E4%B8%BAiterm2%E8%AE%BE%E7%BD%AE%E4%BB%A3%E7%90%86/1.png" class="" title="This is an image"><p>为了方便, 我们可以制作一下别名</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">alias setproxy=&#x27;export http_proxy=&quot;http://127.0.0.1:8001&quot;; export HTTP_PROXY=&quot;http://127.0.0.1:8001&quot;; export https_proxy=&quot;http://127.0.0.1:8001&quot;; export HTTPS_PROXY=&quot;http://127.0.0.1:8001&quot;&#x27; # 设置终端代理</span><br><span class="line"></span><br><span class="line">alias unproxy=&#x27;unset http_proxy https_proxy&#x27; # 取消终端代理</span><br><span class="line"></span><br><span class="line">alias ip=&#x27;curl cip.cc&#x27; # 测试</span><br><span class="line"></span><br></pre></td></tr></table></figure><span id="more"></span><p>安装配置iterm2和oh my zsh</p><p><a href="https://segmentfault.com/a/1190000016952262">https://segmentfault.com/a/1190000016952262</a></p>]]></content>
    
    <summary type="html">
    
      &lt;ol&gt;
&lt;li&gt;设置终端代理&lt;br&gt;最新的 ShadowsocksX-NG 已经支持终端代理, 我们可以如下图复制得出:&lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;export http_proxy=http://127.0.0.1:1081;export https_proxy=http://127.0.0.1:1081;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;img src=&quot;/2021/07/29/%E4%B8%BAiterm2%E8%AE%BE%E7%BD%AE%E4%BB%A3%E7%90%86/1.png&quot; class=&quot;&quot; title=&quot;This is an image&quot;&gt;


&lt;p&gt;为了方便, 我们可以制作一下别名&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;alias setproxy=&amp;#x27;export http_proxy=&amp;quot;http://127.0.0.1:8001&amp;quot;; export HTTP_PROXY=&amp;quot;http://127.0.0.1:8001&amp;quot;; export https_proxy=&amp;quot;http://127.0.0.1:8001&amp;quot;; export HTTPS_PROXY=&amp;quot;http://127.0.0.1:8001&amp;quot;&amp;#x27; # 设置终端代理&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;alias unproxy=&amp;#x27;unset http_proxy https_proxy&amp;#x27; # 取消终端代理&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;alias ip=&amp;#x27;curl cip.cc&amp;#x27; # 测试&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>nginx 之 proxy_pass详解</title>
    <link href="http://fredliu168.github.io/2021/04/14/nginx-%E4%B9%8B-proxy-pass%E8%AF%A6%E8%A7%A3/"/>
    <id>http://fredliu168.github.io/2021/04/14/nginx-%E4%B9%8B-proxy-pass%E8%AF%A6%E8%A7%A3/</id>
    <published>2021-04-14T03:06:40.000Z</published>
    <updated>2026-09-15T02:20:04.162Z</updated>
    
    <content type="html"><![CDATA[<p>在nginx中配置proxy_pass代理转发时，如果在proxy_pass后面的url加&#x2F;，表示绝对根路径；如果没有&#x2F;，表示相对路径，把匹配的路径部分也给代理走。</p><p>假设下面四种情况分别用 <a href="http://192.168.1.1/proxy/test.html">http://192.168.1.1/proxy/test.html</a> 进行访问。</p><h2 id="第一种："><a href="#第一种：" class="headerlink" title="第一种："></a>第一种：</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">location /proxy/ &#123;</span><br><span class="line">proxy_pass http://127.0.0.1/;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>代理到URL：<a href="http://127.0.0.1/test.html">http://127.0.0.1/test.html</a></p><p>第二种（相对于第一种，最后少一个 &#x2F; ）</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">location /proxy/ &#123;</span><br><span class="line">proxy_pass http://127.0.0.1;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>代理到URL：<a href="http://127.0.0.1/proxy/test.html">http://127.0.0.1/proxy/test.html</a></p><p>第三种：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">location /proxy/ &#123;</span><br><span class="line">proxy_pass http://127.0.0.1/aaa/;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>代理到URL：<a href="http://127.0.0.1/aaa/test.html">http://127.0.0.1/aaa/test.html</a></p><p>第四种（相对于第三种，最后少一个 &#x2F; ）</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">location /proxy/ &#123;</span><br><span class="line">proxy_pass http://127.0.0.1/aaa;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>代理到URL：<a href="http://127.0.0.1/aaatest.html">http://127.0.0.1/aaatest.html</a></p><p>nginx中有两个模块都有proxy_pass指令。</p><p>ngx_http_proxy_module的proxy_pass：<br>语法: proxy_pass URL;场景: location, if in location, limit_except说明: 设置后端代理服务器的协议(protocol)和地址(address),以及location中可以匹配的一个可选的URI。协议可以是”http”或”https”。地址可以是一个域名或ip地址和端口，或者一个 unix-domain socket 路径。  详见官方文档: <a href="http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_passURI%E7%9A%84%E5%8C%B9%E9%85%8D%EF%BC%8C%E6%9C%AC%E6%96%87%E7%AC%AC%E5%9B%9B%E9%83%A8%E5%88%86%E9%87%8D%E7%82%B9%E8%AE%A8%E8%AE%BA%E3%80%82">http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_passURI的匹配，本文第四部分重点讨论。</a><br>ngx_stream_proxy_module的proxy_pass：<br>语法: proxy_pass address;场景: server说明: 设置后端代理服务器的地址。这个地址(address)可以是一个域名或ip地址和端口，或者一个 unix-domain socket路径。  详见官方文档: <a href="http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_pass">http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_pass</a></p><h2 id="二、两个proxy-pass的关系和区别"><a href="#二、两个proxy-pass的关系和区别" class="headerlink" title="二、两个proxy_pass的关系和区别"></a>二、两个proxy_pass的关系和区别</h2><p>在两个模块中，两个proxy_pass都是用来做后端代理的指令。<br>ngx_stream_proxy_module模块的proxy_pass指令只能在server段使用使用, 只需要提供域名或ip地址和端口。可以理解为端口转发，可以是tcp端口，也可以是udp端口。<br>ngx_http_proxy_module模块的proxy_pass指令需要在location段，location中的if段，limit_except段中使用，处理需要提供域名或ip地址和端口外，还需要提供协议，如”http”或”https”，还有一个可选的uri可以配置。</p><h2 id="三、proxy-pass的具体用法"><a href="#三、proxy-pass的具体用法" class="headerlink" title="三、proxy_pass的具体用法"></a>三、proxy_pass的具体用法</h2><p>ngx_stream_proxy_module模块的proxy_pass指令</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">server &#123;</span><br><span class="line">    listen 127.0.0.1:12345;</span><br><span class="line">    proxy_pass 127.0.0.1:8080;</span><br><span class="line">&#125;</span><br><span class="line"> </span><br><span class="line">server &#123;</span><br><span class="line">    listen 12345;</span><br><span class="line">    proxy_connect_timeout 1s;</span><br><span class="line">    proxy_timeout 1m;</span><br><span class="line">    proxy_pass example.com:12345;</span><br><span class="line">&#125;</span><br><span class="line"> </span><br><span class="line">server &#123;</span><br><span class="line">    listen 53 udp;</span><br><span class="line">    proxy_responses 1;</span><br><span class="line">    proxy_timeout 20s;</span><br><span class="line">    proxy_pass dns.example.com:53;</span><br><span class="line">&#125;</span><br><span class="line"> </span><br><span class="line">server &#123;</span><br><span class="line">    listen [::1]:12345;</span><br><span class="line">    proxy_pass unix:/tmp/stream.socket;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>ngx_http_proxy_module模块的proxy_pass指令</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">server &#123;</span><br><span class="line">    listen      80;</span><br><span class="line">    server_name www.test.com;</span><br><span class="line"> </span><br><span class="line">    # 正常代理，不修改后端url的</span><br><span class="line">    location /some/path/ &#123;</span><br><span class="line">        proxy_pass http://127.0.0.1;</span><br><span class="line">    &#125;</span><br><span class="line"> </span><br><span class="line">    # 修改后端url地址的代理（本例后端地址中，最后带了一个斜线)</span><br><span class="line">    location /testb &#123;</span><br><span class="line">        proxy_pass http://www.other.com:8801/;</span><br><span class="line">    &#125;</span><br><span class="line"> </span><br><span class="line">    # 使用 if in location</span><br><span class="line">    location /google &#123;</span><br><span class="line">        if ( $geoip_country_code ~ (RU|CN) ) &#123;</span><br><span class="line">            proxy_pass http://www.google.hk;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"> </span><br><span class="line">    location /yongfu/ &#123;</span><br><span class="line">        # 没有匹配 limit_except 的，代理到 unix:/tmp/backend.socket:/uri/</span><br><span class="line">        proxy_pass http://unix:/tmp/backend.socket:/uri/;;</span><br><span class="line"> </span><br><span class="line">        # 匹配到请求方法为: PUT or DELETE, 代理到9080</span><br><span class="line">        limit_except PUT DELETE &#123;</span><br><span class="line">            proxy_pass http://127.0.0.1:9080;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"> </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="四、proxy-pass后，后端服务器的url-request-uri-情况分析"><a href="#四、proxy-pass后，后端服务器的url-request-uri-情况分析" class="headerlink" title="四、proxy_pass后，后端服务器的url(request_uri)情况分析"></a>四、proxy_pass后，后端服务器的url(request_uri)情况分析</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br></pre></td><td class="code"><pre><span class="line">server &#123;</span><br><span class="line">    listen      80;</span><br><span class="line">    server_name www.test.com;</span><br><span class="line"> </span><br><span class="line">    # 情形A</span><br><span class="line">    # 访问 http://www.test.com/testa/aaaa</span><br><span class="line">    # 后端的request_uri为: /testa/aaaa</span><br><span class="line">    location ^~ /testa/ &#123;</span><br><span class="line">        proxy_pass http://127.0.0.1:8801;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    # 情形B</span><br><span class="line">    # 访问 http://www.test.com/testb/bbbb</span><br><span class="line">    # 后端的request_uri为: /bbbb</span><br><span class="line">    location ^~ /testb/ &#123;</span><br><span class="line">        proxy_pass http://127.0.0.1:8801/;</span><br><span class="line">    &#125;</span><br><span class="line"> </span><br><span class="line">    # 情形C</span><br><span class="line">    # 下面这段location是正确的</span><br><span class="line">    location ~ /testc &#123;</span><br><span class="line">        proxy_pass http://127.0.0.1:8801;</span><br><span class="line">    &#125;</span><br><span class="line"> </span><br><span class="line">    # 情形D</span><br><span class="line">    # 下面这段location是错误的</span><br><span class="line">    #</span><br><span class="line">    # nginx -t 时，会报如下错误: </span><br><span class="line">    #</span><br><span class="line">    # nginx: [emerg] &quot;proxy_pass&quot; cannot have URI part in location given by regular </span><br><span class="line">    # expression, or inside named location, or inside &quot;if&quot; statement, or inside </span><br><span class="line">    # &quot;limit_except&quot; block in /opt/app/nginx/conf/vhost/test.conf:17</span><br><span class="line">    # </span><br><span class="line">    # 当location为正则表达式时，proxy_pass 不能包含URI部分。本例中包含了&quot;/&quot;</span><br><span class="line">    location ~ /testd &#123;</span><br><span class="line">        proxy_pass http://127.0.0.1:8801/;   # 记住，location为正则表达式时，不能这样写！！！</span><br><span class="line">    &#125;</span><br><span class="line"> </span><br><span class="line">    # 情形E</span><br><span class="line">    # 访问 http://www.test.com/ccc/bbbb</span><br><span class="line">    # 后端的request_uri为: /aaa/ccc/bbbb</span><br><span class="line">    location /ccc/ &#123;</span><br><span class="line">        proxy_pass http://127.0.0.1:8801/aaa$request_uri;</span><br><span class="line">    &#125;</span><br><span class="line"> </span><br><span class="line">    # 情形F</span><br><span class="line">    # 访问 http://www.test.com/namea/ddd</span><br><span class="line">    # 后端的request_uri为: /yongfu?namea=ddd</span><br><span class="line">    location /namea/ &#123;</span><br><span class="line">        rewrite    /namea/([^/]+) /yongfu?namea=$1 break;</span><br><span class="line">        proxy_pass http://127.0.0.1:8801;</span><br><span class="line">    &#125;</span><br><span class="line"> </span><br><span class="line">    # 情形G</span><br><span class="line">    # 访问 http://www.test.com/nameb/eee</span><br><span class="line">    # 后端的request_uri为: /yongfu?nameb=eee</span><br><span class="line">    location /nameb/ &#123;</span><br><span class="line">        rewrite    /nameb/([^/]+) /yongfu?nameb=$1 break;</span><br><span class="line">        proxy_pass http://127.0.0.1:8801/;</span><br><span class="line">    &#125;</span><br><span class="line"> </span><br><span class="line">    access_log /data/logs/www/www.test.com.log;</span><br><span class="line">&#125;</span><br><span class="line"> </span><br><span class="line">server &#123;</span><br><span class="line">    listen      8801;</span><br><span class="line">    server_name www.test.com;</span><br><span class="line">    </span><br><span class="line">    root        /data/www/test;</span><br><span class="line">    index       index.php index.html;</span><br><span class="line"> </span><br><span class="line">    rewrite ^(.*)$ /test.php?u=$1 last;</span><br><span class="line"> </span><br><span class="line">    location ~ \.php$ &#123;</span><br><span class="line">        try_files $uri =404;</span><br><span class="line">        fastcgi_pass unix:/tmp/php-cgi.sock;</span><br><span class="line">        fastcgi_index index.php;</span><br><span class="line">        include fastcgi.conf;</span><br><span class="line">    &#125;</span><br><span class="line"> </span><br><span class="line">    access_log /data/logs/www/www.test.com.8801.log;</span><br><span class="line">&#125;</span><br><span class="line"> </span><br></pre></td></tr></table></figure><p>文件: &#x2F;data&#x2F;www&#x2F;test&#x2F;test.php</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&lt;?php</span><br><span class="line">echo &#x27;$_SERVER[REQUEST_URI]:&#x27; . $_SERVER[&#x27;REQUEST_URI&#x27;];</span><br><span class="line">通过查看 $_SERVER[&#x27;REQUEST_URI&#x27;] 的值，我们可以看到每次请求的后端的request_uri的值，进行验证。</span><br></pre></td></tr></table></figure><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><p>情形A和情形B进行对比，可以知道proxy_pass后带一个URI,可以是斜杠(&#x2F;)也可以是其他uri，对后端request_uri变量的影响。<br>情形D说明，当location为正则表达式时，proxy_pass不能包含URI部分。<br>情形E通过变量($request_uri, 也可以是其他变量)，对后端的request_uri进行改写。<br>情形F和情形G通过rewrite配合break标志,对url进行改写，并改写后端的request_uri。需要注意，proxy_pass地址的URI部分在情形G中无效，不管如何设置，都会被忽略。</p><p>作者：金星show<br>链接：<a href="https://www.jianshu.com/p/b010c9302cd0">https://www.jianshu.com/p/b010c9302cd0</a><br>来源：简书<br>著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;在nginx中配置proxy_pass代理转发时，如果在proxy_pass后面的url加&amp;#x2F;，表示绝对根路径；如果没有&amp;#x2F;，表示相对路径，把匹配的路径部分也给代理走。&lt;/p&gt;
&lt;p&gt;假设下面四种情况分别用 &lt;a href=&quot;http://192.168.1
      
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>树莓派不带图形化界面系统安装桌面GUI及其管理服务</title>
    <link href="http://fredliu168.github.io/2021/04/14/%E6%A0%91%E8%8E%93%E6%B4%BE%E4%B8%8D%E5%B8%A6%E5%9B%BE%E5%BD%A2%E5%8C%96%E7%95%8C%E9%9D%A2%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E6%A1%8C%E9%9D%A2GUI%E5%8F%8A%E5%85%B6%E7%AE%A1%E7%90%86%E6%9C%8D%E5%8A%A1/"/>
    <id>http://fredliu168.github.io/2021/04/14/%E6%A0%91%E8%8E%93%E6%B4%BE%E4%B8%8D%E5%B8%A6%E5%9B%BE%E5%BD%A2%E5%8C%96%E7%95%8C%E9%9D%A2%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E6%A1%8C%E9%9D%A2GUI%E5%8F%8A%E5%85%B6%E7%AE%A1%E7%90%86%E6%9C%8D%E5%8A%A1/</id>
    <published>2021-04-14T01:04:13.000Z</published>
    <updated>2026-09-15T02:20:04.173Z</updated>
    
    <content type="html"><![CDATA[<p>树莓派P4桌面无法登录处理.   </p><h2 id="1、依次安装Xorg、xinit，加-y参数安装过程自动确认"><a href="#1、依次安装Xorg、xinit，加-y参数安装过程自动确认" class="headerlink" title="1、依次安装Xorg、xinit，加-y参数安装过程自动确认"></a>1、依次安装Xorg、xinit，加-y参数安装过程自动确认</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install --no-install-recommends xserver-xorg -y</span><br><span class="line">sudo apt-get install --no-install-recommends xinit -y</span><br></pre></td></tr></table></figure><h2 id="2、安装桌面GUI类型"><a href="#2、安装桌面GUI类型" class="headerlink" title="2、安装桌面GUI类型"></a>2、安装桌面GUI类型</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Raspberry Pi Desktop (RPD) GUI</span><br><span class="line"></span><br><span class="line">sudo apt-get install raspberrypi-ui-mods -y</span><br></pre></td></tr></table></figure><p>LXDE GUI</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install lxde-core lxappearance  -y</span><br></pre></td></tr></table></figure><p>XFCE GUI</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install xfce4 xfce4-terminal -y</span><br></pre></td></tr></table></figure><h2 id="3、安装登陆管理器"><a href="#3、安装登陆管理器" class="headerlink" title="3、安装登陆管理器"></a>3、安装登陆管理器</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install lightdm</span><br></pre></td></tr></table></figure><h2 id="4、设置自动进入桌面"><a href="#4、设置自动进入桌面" class="headerlink" title="4、设置自动进入桌面"></a>4、设置自动进入桌面</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo raspi-config</span><br></pre></td></tr></table></figure><ol><li>System Options -&gt; S5.Boot&#x2F;Auto Login -&gt; B4.Desktop AutoLogin Desktop GUI</li></ol><p>这里建议选择B4，启动免登陆进入桌面（以pi账户登陆）<br>B3 则需要在登陆界面输入账户及密码登陆。<br>B1进入命令行界面<br>B2免登陆进入命令行界面</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;树莓派P4桌面无法登录处理.   &lt;/p&gt;
&lt;h2 id=&quot;1、依次安装Xorg、xinit，加-y参数安装过程自动确认&quot;&gt;&lt;a href=&quot;#1、依次安装Xorg、xinit，加-y参数安装过程自动确认&quot; class=&quot;headerlink&quot; title=&quot;1、依次安装X
      
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>树莓派docker jd脚本运行</title>
    <link href="http://fredliu168.github.io/2021/04/11/%E6%A0%91%E8%8E%93%E6%B4%BEdocker-jd%E8%84%9A%E6%9C%AC%E8%BF%90%E8%A1%8C/"/>
    <id>http://fredliu168.github.io/2021/04/11/%E6%A0%91%E8%8E%93%E6%B4%BEdocker-jd%E8%84%9A%E6%9C%AC%E8%BF%90%E8%A1%8C/</id>
    <published>2021-04-11T15:10:22.000Z</published>
    <updated>2026-09-15T02:20:04.173Z</updated>
    
    <content type="html"><![CDATA[<p>脚本本地路径</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/home/pi/jd/jd_scripts</span><br></pre></td></tr></table></figure><h1 id="获取cookies"><a href="#获取cookies" class="headerlink" title="获取cookies"></a>获取cookies</h1><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> <span class="variable constant_">CV</span> =<span class="string">&#x27;&#123;cookies&#125;&#x27;</span>;<span class="comment">//大括号里面放jd的cookies</span></span><br><span class="line"><span class="keyword">var</span> <span class="title class_">CookieValue</span> = <span class="variable constant_">CV</span>.<span class="title function_">match</span>(<span class="regexp">/pt_pin=.+?;/</span>) + <span class="variable constant_">CV</span>.<span class="title function_">match</span>(<span class="regexp">/pt_key=.+?;/</span>);</span><br><span class="line"><span class="title function_">copy</span>(<span class="title class_">CookieValue</span>);</span><br></pre></td></tr></table></figure><h1 id="安装docker-compose"><a href="#安装docker-compose" class="headerlink" title="安装docker-compose"></a>安装docker-compose</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install docker-compose</span><br></pre></td></tr></table></figure><p>jd docker地址</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://hub.docker.com/r/lxk0301/jd_scripts</span><br></pre></td></tr></table></figure><p>安装jd_scirpts</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker pull lxk0301/jd_scripts</span><br></pre></td></tr></table></figure><p>目录文件配置好之后在 jd_scripts目录执行。<br>docker-compose 命令:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">docker-compose up -d 启动（修改docker-compose.yml后需要使用此命令使更改生效）；</span><br><span class="line">docker-compose logs 打印日志；</span><br><span class="line">docker-compose logs -f 打印日志，-f表示跟随日志； docker logs -f jd_scripts 和上面两条相比可以显示汉字； docker-compose pull 更新镜像；</span><br><span class="line">docker-compose stop 停止容器；</span><br><span class="line">docker-compose restart 重启容器；</span><br><span class="line">docker-compose down 停止并删除容器；</span><br></pre></td></tr></table></figure><p>来源:<a href="https://gitee.com/lxk0301/jd_docker/blob/master/docker/Readme.md">https://gitee.com/lxk0301/jd_docker/blob/master/docker/Readme.md</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;脚本本地路径&lt;/p&gt;
&lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;co
      
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>树莓派其他应用安装</title>
    <link href="http://fredliu168.github.io/2021/04/11/%E6%A0%91%E8%8E%93%E6%B4%BE%E5%85%B6%E4%BB%96%E5%BA%94%E7%94%A8%E5%AE%89%E8%A3%85/"/>
    <id>http://fredliu168.github.io/2021/04/11/%E6%A0%91%E8%8E%93%E6%B4%BE%E5%85%B6%E4%BB%96%E5%BA%94%E7%94%A8%E5%AE%89%E8%A3%85/</id>
    <published>2021-04-11T14:06:39.000Z</published>
    <updated>2026-09-15T02:20:04.173Z</updated>
    
    <content type="html"><![CDATA[<h1 id="python卸载与安装"><a href="#python卸载与安装" class="headerlink" title="python卸载与安装"></a>python卸载与安装</h1><p>卸载：<br>1、卸载python3.4</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get remove python3.4</span><br></pre></td></tr></table></figure><p>2、卸载python3.4及其依赖</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get remove --auto-remove python3.4</span><br></pre></td></tr></table></figure><p>3、清除python3.4</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get purge python3.4</span><br><span class="line">or</span><br><span class="line">sudo apt-get purge --auto-remove python3.4</span><br></pre></td></tr></table></figure><p>安装：<br>下载python</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz</span><br><span class="line">wget -P /usr/lib https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz(下载文件到指定目录)</span><br></pre></td></tr></table></figure><p>解压、编译安装</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">tar -zxvf Python-2.7.9.tgz</span><br><span class="line">cd Python-2.7.9</span><br><span class="line">./configure --prefix=/usr/local/python-2.7.9</span><br><span class="line">make</span><br><span class="line">make install</span><br></pre></td></tr></table></figure><p>系统自带了python版本，我们需要为新安装的版本添加一个软链</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ln -s /usr/local/python-2.7.9/bin/python /usr/bin/python2.7.9</span><br></pre></td></tr></table></figure><h1 id="远程桌面安装"><a href="#远程桌面安装" class="headerlink" title="远程桌面安装"></a>远程桌面安装</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install xrdp</span><br></pre></td></tr></table></figure><p>默认端口:3389<br>安装完成后可以使用windows的远程桌面访问</p><h1 id="安装docker-compose"><a href="#安装docker-compose" class="headerlink" title="安装docker-compose"></a>安装docker-compose</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install docker-compose</span><br></pre></td></tr></table></figure><h1 id="安装nginx"><a href="#安装nginx" class="headerlink" title="安装nginx"></a>安装nginx</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install nginx</span><br></pre></td></tr></table></figure><h1 id="树莓派查看cpu温度"><a href="#树莓派查看cpu温度" class="headerlink" title="树莓派查看cpu温度"></a>树莓派查看cpu温度</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vcgencmd measure_temp</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;python卸载与安装&quot;&gt;&lt;a href=&quot;#python卸载与安装&quot; class=&quot;headerlink&quot; title=&quot;python卸载与安装&quot;&gt;&lt;/a&gt;python卸载与安装&lt;/h1&gt;&lt;p&gt;卸载：&lt;br&gt;1、卸载python3.4&lt;/p&gt;
&lt;figure c
      
    
    </summary>
    
    
    
  </entry>
  
</feed>
