diff --git a/404.html b/404.html index 74b113b..c05fbc1 100644 --- a/404.html +++ b/404.html @@ -20,11 +20,11 @@ - + -
404
这是一个Four-Oh-Four.
返回首页
- +
404
看来我们的链接坏掉了~
返回首页
+ diff --git a/assets/js/11.7b24619b.js b/assets/js/11.a41da825.js similarity index 98% rename from assets/js/11.7b24619b.js rename to assets/js/11.a41da825.js index 3225825..3e89a40 100644 --- a/assets/js/11.7b24619b.js +++ b/assets/js/11.a41da825.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{321:function(t,a,s){"use strict";s.r(a);var o=s(7),n=Object(o.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"函数实例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#函数实例"}},[t._v("#")]),t._v(" 函数实例")]),t._v(" "),a("p",[t._v("函数实例对应着在云上部署的每一个函数")]),t._v(" "),a("h3",{attrs:{id:"创建函数实例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#创建函数实例"}},[t._v("#")]),t._v(" 创建函数实例")]),t._v(" "),a("p",[t._v("点击 [新增], 会要求选择一个关联的账户,将会使用这个账户进行部署")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/0cd322d2dac14f77b117ff1024c047b9.png",alt:"tunnel"}})]),t._v(" "),a("p",[t._v("点击 [下一步], 进入具体的函数参数配置")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/4f49e3f00b7a4e28a4152b8504354b08.png",alt:"config"}})]),t._v(" "),a("ul",[a("li",[t._v("函数名称:用于在平台区分各个函数")]),t._v(" "),a("li",[t._v("函数所在地区:只能选择当前账户允许的区域")]),t._v(" "),a("li",[t._v("CPU、内存: 一般默认即可,如果有需求也可以自行调整(不同平台有相关要求,不建议自行调整)")]),t._v(" "),a("li",[t._v("最大处理数:指一个实例最多同时可以处理的请求数;如果你希望获取更多的IP,该值越小越好(最低为1);如果你想节约成本,那么可以调整大一些。")]),t._v(" "),a("li",[t._v("端口号配置:默认不要改动。")]),t._v(" "),a("li",[t._v("函数认证方式: 指函数调用时的认证方法,可以避免一些反制与滥用。默认请选择无认证;如果你需要导入其他客户端使用,请确保此选项为无认证方式,")]),t._v(" "),a("li",[t._v("隧道协议类型: websocket/gprc。推荐websockets, grpc 目前测试较少,不太稳定")]),t._v(" "),a("li",[t._v("TLS: 默认开启即可;不开启的时候走80端口,数据为明文传输。")]),t._v(" "),a("li",[t._v("Tor: 开启 Tor 网桥时,会允许代理访问 onion域名,但是会导致内存占用增高。")])]),t._v(" "),a("h3",{attrs:{id:"停用函数实例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#停用函数实例"}},[t._v("#")]),t._v(" 停用函数实例")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/da2a2030a728415cbbe0014b52b01b0d.png",alt:"stop"}})]),t._v(" "),a("p",[t._v("点击停用后,远端的函数实例将会销毁,但平台的配置数据依旧存在;你可以通过再次启用来部署一个新的服务。")]),t._v(" "),a("h3",{attrs:{id:"删除函数实例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#删除函数实例"}},[t._v("#")]),t._v(" 删除函数实例")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/d640f664ef4249e09461999fd6776107.png",alt:"delete"}})]),t._v(" "),a("p",[t._v("点击删除后,远端函数实例将会销毁,同时本地的数据也会随之删除;基于此函数隧道的代理也会一起删除。")]),t._v(" "),a("h3",{attrs:{id:"导入其他客户端"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#导入其他客户端"}},[t._v("#")]),t._v(" 导入其他客户端")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/52f88f5bf8904aa293eaffcdd4091203.png",alt:"import"}})]),t._v(" "),a("p",[t._v("目前支持导入 Clash、ShadowRocket 两种客户端,可以选择自动导入,也可以手动复制订阅地址。\n注意,此订阅地址会随着服务重启后失效。当客户端重启后,需要重新获取订阅地址。")])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{322:function(t,a,s){"use strict";s.r(a);var o=s(7),n=Object(o.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"函数实例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#函数实例"}},[t._v("#")]),t._v(" 函数实例")]),t._v(" "),a("p",[t._v("函数实例对应着在云上部署的每一个函数")]),t._v(" "),a("h3",{attrs:{id:"创建函数实例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#创建函数实例"}},[t._v("#")]),t._v(" 创建函数实例")]),t._v(" "),a("p",[t._v("点击 [新增], 会要求选择一个关联的账户,将会使用这个账户进行部署")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/0cd322d2dac14f77b117ff1024c047b9.png",alt:"tunnel"}})]),t._v(" "),a("p",[t._v("点击 [下一步], 进入具体的函数参数配置")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/4f49e3f00b7a4e28a4152b8504354b08.png",alt:"config"}})]),t._v(" "),a("ul",[a("li",[t._v("函数名称:用于在平台区分各个函数")]),t._v(" "),a("li",[t._v("函数所在地区:只能选择当前账户允许的区域")]),t._v(" "),a("li",[t._v("CPU、内存: 一般默认即可,如果有需求也可以自行调整(不同平台有相关要求,不建议自行调整)")]),t._v(" "),a("li",[t._v("最大处理数:指一个实例最多同时可以处理的请求数;如果你希望获取更多的IP,该值越小越好(最低为1);如果你想节约成本,那么可以调整大一些。")]),t._v(" "),a("li",[t._v("端口号配置:默认不要改动。")]),t._v(" "),a("li",[t._v("函数认证方式: 指函数调用时的认证方法,可以避免一些反制与滥用。默认请选择无认证;如果你需要导入其他客户端使用,请确保此选项为无认证方式,")]),t._v(" "),a("li",[t._v("隧道协议类型: websocket/gprc。推荐websockets, grpc 目前测试较少,不太稳定")]),t._v(" "),a("li",[t._v("TLS: 默认开启即可;不开启的时候走80端口,数据为明文传输。")]),t._v(" "),a("li",[t._v("Tor: 开启 Tor 网桥时,会允许代理访问 onion域名,但是会导致内存占用增高。")])]),t._v(" "),a("h3",{attrs:{id:"停用函数实例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#停用函数实例"}},[t._v("#")]),t._v(" 停用函数实例")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/da2a2030a728415cbbe0014b52b01b0d.png",alt:"stop"}})]),t._v(" "),a("p",[t._v("点击停用后,远端的函数实例将会销毁,但平台的配置数据依旧存在;你可以通过再次启用来部署一个新的服务。")]),t._v(" "),a("h3",{attrs:{id:"删除函数实例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#删除函数实例"}},[t._v("#")]),t._v(" 删除函数实例")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/d640f664ef4249e09461999fd6776107.png",alt:"delete"}})]),t._v(" "),a("p",[t._v("点击删除后,远端函数实例将会销毁,同时本地的数据也会随之删除;基于此函数隧道的代理也会一起删除。")]),t._v(" "),a("h3",{attrs:{id:"导入其他客户端"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#导入其他客户端"}},[t._v("#")]),t._v(" 导入其他客户端")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/52f88f5bf8904aa293eaffcdd4091203.png",alt:"import"}})]),t._v(" "),a("p",[t._v("目前支持导入 Clash、ShadowRocket 两种客户端,可以选择自动导入,也可以手动复制订阅地址。\n注意,此订阅地址会随着服务重启后失效。当客户端重启后,需要重新获取订阅地址。")])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/12.2832e202.js b/assets/js/12.f25c8723.js similarity index 98% rename from assets/js/12.2832e202.js rename to assets/js/12.f25c8723.js index 4857b4e..23d28ba 100644 --- a/assets/js/12.2832e202.js +++ b/assets/js/12.f25c8723.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{322:function(a,t,s){"use strict";s.r(t);var e=s(7),r=Object(e.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"服务"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#服务"}},[a._v("#")]),a._v(" 服务")]),a._v(" "),t("h3",{attrs:{id:"创建服务"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#创建服务"}},[a._v("#")]),a._v(" 创建服务")]),a._v(" "),t("p",[a._v("点击 [新增]:")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/fe87befcb18c4e059951f8f1ed2dbe91.png",alt:"create"}})]),a._v(" "),t("ul",[t("li",[a._v("代理名称:用于在平台区分不同的代理")]),a._v(" "),t("li",[a._v("监听协议: 选择代理的服务类型")]),a._v(" "),t("li",[a._v("监听地址: 监听的 IP 信息")]),a._v(" "),t("li",[a._v("监听端口: 监听的端口信息")])]),a._v(" "),t("h4",{attrs:{id:"从账户直接创建服务"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#从账户直接创建服务"}},[a._v("#")]),a._v(" 从账户直接创建服务")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/700cea1e620f40f1beb6596bd48565a0.png",alt:"select-1"}})]),a._v(" "),t("p",[a._v("直接从账户创建,将会从选择的账户创建一个新的函数与服务绑定。具体请参考 "),t("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/func/",target:"_blank",rel:"noopener noreferrer"}},[a._v("创建函数实例"),t("OutboundLink")],1)]),a._v(" "),t("h4",{attrs:{id:"选择已有函数进行关联"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#选择已有函数进行关联"}},[a._v("#")]),a._v(" 选择已有函数进行关联")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/120fa192be864d4293ea51344542f336.png",alt:"select-2"}})]),a._v(" "),t("p",[a._v("选择已有函数进行关联时,将会从已有的函数实例进行选择,无需进行其他配置。")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/af8eaa396fac4413a2a6d54d715412a5.png",alt:"select-4"}})]),a._v(" "),t("h3",{attrs:{id:"修改服务"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#修改服务"}},[a._v("#")]),a._v(" 修改服务")]),a._v(" "),t("p",[a._v("目前允许修改的内容有:代理类型、监听地址、监听端口三个选项。点击对应服务,即可进行详情修改。")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/1cb9366981cf4432898a179f1e380004.png",alt:"update"}})]),a._v(" "),t("h3",{attrs:{id:"测速"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#测速"}},[a._v("#")]),a._v(" 测速")]),a._v(" "),t("p",[a._v("点击测速,将会通过当前服务访问测速网站进行上行与下行的速率测试。")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/31c585b8ed8d4cc0994cad33ad554852.png",alt:"speed"}})]),a._v(" "),t("h3",{attrs:{id:"停止服务"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#停止服务"}},[a._v("#")]),a._v(" 停止服务")]),a._v(" "),t("p",[a._v("点击停止服务,代理服务将会停止,但数据不会删除。")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/53605b61a97e48218caca2f0eb8b175f.png",alt:"stop"}})]),a._v(" "),t("h3",{attrs:{id:"删除服务"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#删除服务"}},[a._v("#")]),a._v(" 删除服务")]),a._v(" "),t("p",[a._v("点击删除服务,将会删除对应的代理服务数据。")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/b4b1fb410f1a4d9798956e0ad80cebc9.png",alt:"delete"}})])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{321:function(a,t,s){"use strict";s.r(t);var e=s(7),r=Object(e.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"服务"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#服务"}},[a._v("#")]),a._v(" 服务")]),a._v(" "),t("h3",{attrs:{id:"创建服务"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#创建服务"}},[a._v("#")]),a._v(" 创建服务")]),a._v(" "),t("p",[a._v("点击 [新增]:")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/fe87befcb18c4e059951f8f1ed2dbe91.png",alt:"create"}})]),a._v(" "),t("ul",[t("li",[a._v("代理名称:用于在平台区分不同的代理")]),a._v(" "),t("li",[a._v("监听协议: 选择代理的服务类型")]),a._v(" "),t("li",[a._v("监听地址: 监听的 IP 信息")]),a._v(" "),t("li",[a._v("监听端口: 监听的端口信息")])]),a._v(" "),t("h4",{attrs:{id:"从账户直接创建服务"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#从账户直接创建服务"}},[a._v("#")]),a._v(" 从账户直接创建服务")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/700cea1e620f40f1beb6596bd48565a0.png",alt:"select-1"}})]),a._v(" "),t("p",[a._v("直接从账户创建,将会从选择的账户创建一个新的函数与服务绑定。具体请参考 "),t("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/func/",target:"_blank",rel:"noopener noreferrer"}},[a._v("创建函数实例"),t("OutboundLink")],1)]),a._v(" "),t("h4",{attrs:{id:"选择已有函数进行关联"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#选择已有函数进行关联"}},[a._v("#")]),a._v(" 选择已有函数进行关联")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/120fa192be864d4293ea51344542f336.png",alt:"select-2"}})]),a._v(" "),t("p",[a._v("选择已有函数进行关联时,将会从已有的函数实例进行选择,无需进行其他配置。")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/af8eaa396fac4413a2a6d54d715412a5.png",alt:"select-4"}})]),a._v(" "),t("h3",{attrs:{id:"修改服务"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#修改服务"}},[a._v("#")]),a._v(" 修改服务")]),a._v(" "),t("p",[a._v("目前允许修改的内容有:代理类型、监听地址、监听端口三个选项。点击对应服务,即可进行详情修改。")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/1cb9366981cf4432898a179f1e380004.png",alt:"update"}})]),a._v(" "),t("h3",{attrs:{id:"测速"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#测速"}},[a._v("#")]),a._v(" 测速")]),a._v(" "),t("p",[a._v("点击测速,将会通过当前服务访问测速网站进行上行与下行的速率测试。")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/31c585b8ed8d4cc0994cad33ad554852.png",alt:"speed"}})]),a._v(" "),t("h3",{attrs:{id:"停止服务"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#停止服务"}},[a._v("#")]),a._v(" 停止服务")]),a._v(" "),t("p",[a._v("点击停止服务,代理服务将会停止,但数据不会删除。")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/53605b61a97e48218caca2f0eb8b175f.png",alt:"stop"}})]),a._v(" "),t("h3",{attrs:{id:"删除服务"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#删除服务"}},[a._v("#")]),a._v(" 删除服务")]),a._v(" "),t("p",[a._v("点击删除服务,将会删除对应的代理服务数据。")]),a._v(" "),t("p",[t("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/b4b1fb410f1a4d9798956e0ad80cebc9.png",alt:"delete"}})])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/16.463faaa4.js b/assets/js/16.b63f2596.js similarity index 96% rename from assets/js/16.463faaa4.js rename to assets/js/16.b63f2596.js index 70404d6..8865c37 100644 --- a/assets/js/16.463faaa4.js +++ b/assets/js/16.b63f2596.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{326:function(e,r,n){"use strict";n.r(r);var t=n(7),o=Object(t.a)({},(function(){var e=this,r=e._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"高级进阶"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#高级进阶"}},[e._v("#")]),e._v(" 高级进阶")]),e._v(" "),r("p",[e._v("SeaMoon 提供了多种多样的部署方式。")]),e._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/deploy/aliyun/",target:"_blank",rel:"noopener noreferrer"}},[e._v("阿里云手动部署"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/deploy/tencent/",target:"_blank",rel:"noopener noreferrer"}},[e._v("腾讯云手动部署"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/deploy/sealos/",target:"_blank",rel:"noopener noreferrer"}},[e._v("🔥 sealos:更便宜更舒服的选择"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/deploy/render/",target:"_blank",rel:"noopener noreferrer"}},[e._v("💰 render:"),r("s",[e._v("免费的总是最好的")]),e._v("免费的总是会封号的"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("a",{attrs:{href:"https://www.heroku.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("heroku"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("a",{attrs:{href:"https://railway.app/new",target:"_blank",rel:"noopener noreferrer"}},[e._v("railway"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/deploy/serverlessDevs/",target:"_blank",rel:"noopener noreferrer"}},[e._v("serverless-devs快捷部署"),r("OutboundLink")],1)])])])}),[],!1,null,null,null);r.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{329:function(e,r,n){"use strict";n.r(r);var t=n(7),o=Object(t.a)({},(function(){var e=this,r=e._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"高级进阶"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#高级进阶"}},[e._v("#")]),e._v(" 高级进阶")]),e._v(" "),r("p",[e._v("SeaMoon 提供了多种多样的部署方式。")]),e._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/deploy/aliyun/",target:"_blank",rel:"noopener noreferrer"}},[e._v("阿里云手动部署"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/deploy/tencent/",target:"_blank",rel:"noopener noreferrer"}},[e._v("腾讯云手动部署"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/deploy/sealos/",target:"_blank",rel:"noopener noreferrer"}},[e._v("🔥 sealos:更便宜更舒服的选择"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/deploy/render/",target:"_blank",rel:"noopener noreferrer"}},[e._v("💰 render:"),r("s",[e._v("免费的总是最好的")]),e._v("免费的总是会封号的"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("a",{attrs:{href:"https://www.heroku.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("heroku"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("a",{attrs:{href:"https://railway.app/new",target:"_blank",rel:"noopener noreferrer"}},[e._v("railway"),r("OutboundLink")],1)]),e._v(" "),r("li",[r("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/deploy/serverlessDevs/",target:"_blank",rel:"noopener noreferrer"}},[e._v("serverless-devs快捷部署"),r("OutboundLink")],1)])])])}),[],!1,null,null,null);r.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/17.3ec75fb7.js b/assets/js/17.bbfe0511.js similarity index 97% rename from assets/js/17.3ec75fb7.js rename to assets/js/17.bbfe0511.js index ea54191..ced811a 100644 --- a/assets/js/17.3ec75fb7.js +++ b/assets/js/17.bbfe0511.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{327:function(t,o,s){"use strict";s.r(o);var a=s(7),c=Object(a.a)({},(function(){var t=this,o=t._self._c;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h2",{attrs:{id:"🧅-tor-网络开启"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#🧅-tor-网络开启"}},[t._v("#")]),t._v(" 🧅 Tor 网络开启")]),t._v(" "),o("div",{staticClass:"custom-block warning"},[o("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),o("p",[t._v("tor 服务比较吃内存,经测试 内存至少需要配置在 100MB 以上才能发挥稳定的效果。")])]),t._v(" "),o("p",[t._v("为了防止普通流量过 Tor 导致的速率下降,在客户端做了个开关。")]),t._v(" "),o("p",[t._v("客户端会根据这个这个开关来选择是否给服务端发送 Tor 代理标识。")]),t._v(" "),o("p",[t._v("服务端接收到 Tor 代理标识后,会将流量直接转发给本地服务。")]),t._v(" "),o("p",[o("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/ec26347f298a4f9d81f7068eb3c0e4dc.png",alt:"tor"}})]),t._v(" "),o("p",[t._v("注意,tor 网络目前仅支持: 本地 socks5 代理 + websocket 隧道 的模式。")]),t._v(" "),o("p",[t._v("然后本地的 socks5 代理即可访问一些 .onion 结尾的域名了。如:")]),t._v(" "),o("p",[o("code",[t._v("https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion/")])]),t._v(" "),o("p",[o("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/09626bede56b4c18b6cd4d41d3e11c00.png",alt:"onion"}})]),t._v(" "),o("div",{staticClass:"custom-block tip"},[o("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),o("p",[t._v("在当前版本内,seamoon 实现了最简单的 tor 接入方式 -- 通过 tor cli 自带的 s5 协议做了一层转发,因为 v2ray 也是这样玩的。")]),t._v(" "),o("p",[t._v("实际上,这种方案,有很多不足,出去开头的资源占用较高 warning,通过 binary 的集成力度也不是非常合适,但是在这个阶段暂时用该方案来减少代码开发的工作量。")]),t._v(" "),o("p",[t._v('因此,此方案仅用于证明 seamoon 的扩展性,距离真正 "便宜" 可能还需要一段的距离。')])])])}),[],!1,null,null,null);o.default=c.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{326:function(t,o,s){"use strict";s.r(o);var a=s(7),c=Object(a.a)({},(function(){var t=this,o=t._self._c;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h2",{attrs:{id:"🧅-tor-网络开启"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#🧅-tor-网络开启"}},[t._v("#")]),t._v(" 🧅 Tor 网络开启")]),t._v(" "),o("div",{staticClass:"custom-block warning"},[o("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),o("p",[t._v("tor 服务比较吃内存,经测试 内存至少需要配置在 100MB 以上才能发挥稳定的效果。")])]),t._v(" "),o("p",[t._v("为了防止普通流量过 Tor 导致的速率下降,在客户端做了个开关。")]),t._v(" "),o("p",[t._v("客户端会根据这个这个开关来选择是否给服务端发送 Tor 代理标识。")]),t._v(" "),o("p",[t._v("服务端接收到 Tor 代理标识后,会将流量直接转发给本地服务。")]),t._v(" "),o("p",[o("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/ec26347f298a4f9d81f7068eb3c0e4dc.png",alt:"tor"}})]),t._v(" "),o("p",[t._v("注意,tor 网络目前仅支持: 本地 socks5 代理 + websocket 隧道 的模式。")]),t._v(" "),o("p",[t._v("然后本地的 socks5 代理即可访问一些 .onion 结尾的域名了。如:")]),t._v(" "),o("p",[o("code",[t._v("https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion/")])]),t._v(" "),o("p",[o("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/09626bede56b4c18b6cd4d41d3e11c00.png",alt:"onion"}})]),t._v(" "),o("div",{staticClass:"custom-block tip"},[o("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),o("p",[t._v("在当前版本内,seamoon 实现了最简单的 tor 接入方式 -- 通过 tor cli 自带的 s5 协议做了一层转发,因为 v2ray 也是这样玩的。")]),t._v(" "),o("p",[t._v("实际上,这种方案,有很多不足,出去开头的资源占用较高 warning,通过 binary 的集成力度也不是非常合适,但是在这个阶段暂时用该方案来减少代码开发的工作量。")]),t._v(" "),o("p",[t._v('因此,此方案仅用于证明 seamoon 的扩展性,距离真正 "便宜" 可能还需要一段的距离。')])])])}),[],!1,null,null,null);o.default=c.exports}}]); \ No newline at end of file diff --git a/assets/js/18.56ba5f0d.js b/assets/js/18.b2ba7331.js similarity index 99% rename from assets/js/18.56ba5f0d.js rename to assets/js/18.b2ba7331.js index 75e962a..77cb927 100644 --- a/assets/js/18.56ba5f0d.js +++ b/assets/js/18.b2ba7331.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{328:function(s,t,a){"use strict";a.r(t);var e=a(7),r=Object(e.a)({},(function(){var s=this,t=s._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h2",{attrs:{id:"gost-优雅的-golang-代理"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gost-优雅的-golang-代理"}},[s._v("#")]),s._v(" GOST - 优雅的 golang 代理")]),s._v(" "),t("p",[s._v("Seamoon 对接 "),t("a",{attrs:{href:"https://github.com/go-gost/gost",target:"_blank",rel:"noopener noreferrer"}},[s._v("Gost"),t("OutboundLink")],1),s._v(' 十分简单。原因也很简单,2.0 迭代的代码改造中"借鉴"(copy)了很多 gost 的设计和原封不动的代码结构。对协议的理解和代码设计上参考了很多师傅的模式。在此表示感谢无私的开源和分享。')]),s._v(" "),t("p",[s._v("GOST 是一款基于 golang 的简单隧道,具体的介绍可以访问其"),t("a",{attrs:{href:"https://gost.run",target:"_blank",rel:"noopener noreferrer"}},[s._v("官网"),t("OutboundLink")],1)]),s._v(" "),t("p",[s._v("在技术博客里,我们也分享了 GOST 的一些设计架构代码,我们可以这样理解: Seamoon 服务端就是一个 websocket / grpc 的 gost 转发节点,但是只实现了 http / socks5 的处理模块,由此目前还支持值了这两种协议的转发。")]),s._v(" "),t("p",[s._v("gost 的客户端更强大,因为模块拆分的很细致,所以能实现很多好玩的玩法各种组合, 理论来讲, gost 支持的 listen 都可以通过 seamoon 的隧道转发过来。")]),s._v(" "),t("p",[s._v("gost 还支持了 metrics 等数据统计、代理认证、限速等等客户端实现的功能,适合长期挂在本地作为一个持久化的服务使用。")]),s._v(" "),t("p",[s._v("我们给出一些demo示例,来看一下 seamoon 如何对接 gost。这里免去了 gost 安装相关教程,默认用户已安装了 gost,提供的是具体的启动脚本配置。")]),s._v(" "),t("h3",{attrs:{id:"websocket-隧道"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#websocket-隧道"}},[s._v("#")]),s._v(" websocket 隧道")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"gost-http + seamoon-websocket(http)",active:""}},[t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 通过 gost 启动一个 http 代理,利用 websocket 转发,转发的流量 以 http 形式(默认不指定的话,流量都将以 http 形式进行传递)。")]),s._v("\ngost "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-L")]),s._v(" http://:1080 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-F")]),s._v(" wss://"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-server"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-port"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("?path"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/http\n")])])])]),s._v(" "),t("code-block",{attrs:{title:"gost-http + seamoon-websocket(socks5)"}},[t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 通过 gost 启动一个 http 代理,利用 websocket 转发,并指定转发的流量 以 socks5 形式")]),s._v("\ngost "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-L")]),s._v(" http://:1080 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-F")]),s._v(" socks5+wss://"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-server"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-port"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("?path"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/socks5\n")])])])]),s._v(" "),t("code-block",{attrs:{title:"gost-socks5 + seamoon-websocket(http)"}},[t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 通过 gost 启动一个 http 代理,利用 websocket 转发,转发的流量 以 http 形式(默认不指定的话,流量都将以 http 形式进行传递)。")]),s._v("\ngost "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-L")]),s._v(" socks5://:1080 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-F")]),s._v(" wss://"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-server"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-port"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("?path"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/http\n")])])])]),s._v(" "),t("code-block",{attrs:{title:"gost-socks5 + seamoon-websocket(socks5)"}},[t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 通过 gost 启动一个 http 代理,利用 websocket 转发,并指定转发的流量 以 socks5 形式。")]),s._v("\ngost "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-L")]),s._v(" socks5://:1080 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-F")]),s._v(" socks5+wss://"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-server"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-port"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("?path"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/socks5\n")])])])]),s._v(" "),t("code-block",{attrs:{title:"gost-socks4 + seamoon-websocket(socks5)"}},[t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 通过 gost 启动一个其他协议代理,这里以 socks4 代理为例,利用 websocket 转发,并指定转发的流量 以 socks5 形式。")]),s._v("\ngost "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-L")]),s._v(" socks4://:1080 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-F")]),s._v(" socks5+wss://"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-server"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-port"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("?path"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/socks5\n")])])])]),s._v(" "),t("code-block",{attrs:{title:"gost-shadowsocks + seamoon-websocket(socks5)"}},[t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 通过 gost 启动一个其他协议代理,这里以 shadowsocks 代理为例,利用 websocket 转发,并指定转发的流量 以 socks5 形式。")]),s._v("\ngost "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-L")]),s._v(" ss://"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("cipher"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("pass"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("@:1080 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-F")]),s._v(" socks5+wss://"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-server"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-port"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("?path"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/socks5\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 如:ss://AEAD_AES_128_GCM:password@:1080")]),s._v("\n")])])])])],1),s._v(" "),t("h3",{attrs:{id:"grpc-隧道"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#grpc-隧道"}},[s._v("#")]),s._v(" grpc 隧道")]),s._v(" "),t("p",[s._v("grpc 隧道由于 gost 的 proto 略有冲突,因此需要单独适配实现一个 server。计划 2.0 版本彻底完成适配。")])],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{327:function(s,t,a){"use strict";a.r(t);var e=a(7),r=Object(e.a)({},(function(){var s=this,t=s._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h2",{attrs:{id:"gost-优雅的-golang-代理"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gost-优雅的-golang-代理"}},[s._v("#")]),s._v(" GOST - 优雅的 golang 代理")]),s._v(" "),t("p",[s._v("Seamoon 对接 "),t("a",{attrs:{href:"https://github.com/go-gost/gost",target:"_blank",rel:"noopener noreferrer"}},[s._v("Gost"),t("OutboundLink")],1),s._v(' 十分简单。原因也很简单,2.0 迭代的代码改造中"借鉴"(copy)了很多 gost 的设计和原封不动的代码结构。对协议的理解和代码设计上参考了很多师傅的模式。在此表示感谢无私的开源和分享。')]),s._v(" "),t("p",[s._v("GOST 是一款基于 golang 的简单隧道,具体的介绍可以访问其"),t("a",{attrs:{href:"https://gost.run",target:"_blank",rel:"noopener noreferrer"}},[s._v("官网"),t("OutboundLink")],1)]),s._v(" "),t("p",[s._v("在技术博客里,我们也分享了 GOST 的一些设计架构代码,我们可以这样理解: Seamoon 服务端就是一个 websocket / grpc 的 gost 转发节点,但是只实现了 http / socks5 的处理模块,由此目前还支持值了这两种协议的转发。")]),s._v(" "),t("p",[s._v("gost 的客户端更强大,因为模块拆分的很细致,所以能实现很多好玩的玩法各种组合, 理论来讲, gost 支持的 listen 都可以通过 seamoon 的隧道转发过来。")]),s._v(" "),t("p",[s._v("gost 还支持了 metrics 等数据统计、代理认证、限速等等客户端实现的功能,适合长期挂在本地作为一个持久化的服务使用。")]),s._v(" "),t("p",[s._v("我们给出一些demo示例,来看一下 seamoon 如何对接 gost。这里免去了 gost 安装相关教程,默认用户已安装了 gost,提供的是具体的启动脚本配置。")]),s._v(" "),t("h3",{attrs:{id:"websocket-隧道"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#websocket-隧道"}},[s._v("#")]),s._v(" websocket 隧道")]),s._v(" "),t("code-group",[t("code-block",{attrs:{title:"gost-http + seamoon-websocket(http)",active:""}},[t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 通过 gost 启动一个 http 代理,利用 websocket 转发,转发的流量 以 http 形式(默认不指定的话,流量都将以 http 形式进行传递)。")]),s._v("\ngost "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-L")]),s._v(" http://:1080 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-F")]),s._v(" wss://"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-server"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-port"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("?path"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/http\n")])])])]),s._v(" "),t("code-block",{attrs:{title:"gost-http + seamoon-websocket(socks5)"}},[t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 通过 gost 启动一个 http 代理,利用 websocket 转发,并指定转发的流量 以 socks5 形式")]),s._v("\ngost "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-L")]),s._v(" http://:1080 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-F")]),s._v(" socks5+wss://"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-server"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-port"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("?path"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/socks5\n")])])])]),s._v(" "),t("code-block",{attrs:{title:"gost-socks5 + seamoon-websocket(http)"}},[t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 通过 gost 启动一个 http 代理,利用 websocket 转发,转发的流量 以 http 形式(默认不指定的话,流量都将以 http 形式进行传递)。")]),s._v("\ngost "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-L")]),s._v(" socks5://:1080 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-F")]),s._v(" wss://"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-server"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-port"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("?path"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/http\n")])])])]),s._v(" "),t("code-block",{attrs:{title:"gost-socks5 + seamoon-websocket(socks5)"}},[t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 通过 gost 启动一个 http 代理,利用 websocket 转发,并指定转发的流量 以 socks5 形式。")]),s._v("\ngost "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-L")]),s._v(" socks5://:1080 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-F")]),s._v(" socks5+wss://"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-server"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-port"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("?path"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/socks5\n")])])])]),s._v(" "),t("code-block",{attrs:{title:"gost-socks4 + seamoon-websocket(socks5)"}},[t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 通过 gost 启动一个其他协议代理,这里以 socks4 代理为例,利用 websocket 转发,并指定转发的流量 以 socks5 形式。")]),s._v("\ngost "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-L")]),s._v(" socks4://:1080 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-F")]),s._v(" socks5+wss://"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-server"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-port"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("?path"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/socks5\n")])])])]),s._v(" "),t("code-block",{attrs:{title:"gost-shadowsocks + seamoon-websocket(socks5)"}},[t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 通过 gost 启动一个其他协议代理,这里以 shadowsocks 代理为例,利用 websocket 转发,并指定转发的流量 以 socks5 形式。")]),s._v("\ngost "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-L")]),s._v(" ss://"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("cipher"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("pass"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("@:1080 "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-F")]),s._v(" socks5+wss://"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-server"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(":"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v("seamoon-port"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("?path"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/socks5\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 如:ss://AEAD_AES_128_GCM:password@:1080")]),s._v("\n")])])])])],1),s._v(" "),t("h3",{attrs:{id:"grpc-隧道"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#grpc-隧道"}},[s._v("#")]),s._v(" grpc 隧道")]),s._v(" "),t("p",[s._v("grpc 隧道由于 gost 的 proto 略有冲突,因此需要单独适配实现一个 server。计划 2.0 版本彻底完成适配。")])],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/19.798bc6d9.js b/assets/js/19.3dd46379.js similarity index 81% rename from assets/js/19.798bc6d9.js rename to assets/js/19.3dd46379.js index 2955b78..601274c 100644 --- a/assets/js/19.798bc6d9.js +++ b/assets/js/19.3dd46379.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{329:function(t,n,s){"use strict";s.r(n);var o=s(7),e=Object(o.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("p",[this._v("seamoon 完美兼容 v2ray 系列客户端。")])])}),[],!1,null,null,null);n.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{328:function(t,n,s){"use strict";s.r(n);var o=s(7),e=Object(o.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("p",[this._v("seamoon 完美兼容 v2ray 系列客户端。")])])}),[],!1,null,null,null);n.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/20.e25c9837.js b/assets/js/20.ad52d61f.js similarity index 96% rename from assets/js/20.e25c9837.js rename to assets/js/20.ad52d61f.js index 273e89a..603b66c 100644 --- a/assets/js/20.e25c9837.js +++ b/assets/js/20.ad52d61f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{331:function(e,n,r){"use strict";r.r(n);var t=r(7),o=Object(t.a)({},(function(){var e=this,n=e._self._c;return n("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[n("h2",{attrs:{id:"其他客户端支持"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#其他客户端支持"}},[e._v("#")]),e._v(" 其他客户端支持")]),e._v(" "),n("p",[e._v("SeaMoon 继承了云原生的开放思想,不局限于一种/一个平台,尽可能的适配各种客户端的模式,使用已有的成品客户端。")]),e._v(" "),n("p",[e._v("成品客户端通常会支持更多协议类型,比如 gost,基本上所有可以监听的类型都可以通过 seamoon 隧道协议转发出来。")]),e._v(" "),n("ul",[n("li",[n("p",[n("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/client/gost/",target:"_blank",rel:"noopener noreferrer"}},[e._v("gost:优雅简便的go代理"),n("OutboundLink")],1)])]),e._v(" "),n("li",[n("p",[n("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/client/docker/",target:"_blank",rel:"noopener noreferrer"}},[e._v("docker"),n("OutboundLink")],1)])]),e._v(" "),n("li",[n("p",[n("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/deploy/binary/",target:"_blank",rel:"noopener noreferrer"}},[e._v("binary"),n("OutboundLink")],1)])])]),e._v(" "),n("p",[e._v("Seamoon 客户端还支持了 Tor 网桥的接入")]),e._v(" "),n("ul",[n("li",[n("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/client/tor/",target:"_blank",rel:"noopener noreferrer"}},[e._v("tor"),n("OutboundLink")],1)]),e._v(" "),n("li",[n("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/client/v2ray/",target:"_blank",rel:"noopener noreferrer"}},[e._v("v2ray: 时代战神"),n("OutboundLink")],1)]),e._v(" "),n("li",[n("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/client/clash/",target:"_blank",rel:"noopener noreferrer"}},[e._v("clash: 快速的即成,抛开多个客户端"),n("OutboundLink")],1)])])])}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{330:function(e,n,r){"use strict";r.r(n);var t=r(7),o=Object(t.a)({},(function(){var e=this,n=e._self._c;return n("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[n("h2",{attrs:{id:"其他客户端支持"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#其他客户端支持"}},[e._v("#")]),e._v(" 其他客户端支持")]),e._v(" "),n("p",[e._v("SeaMoon 继承了云原生的开放思想,不局限于一种/一个平台,尽可能的适配各种客户端的模式,使用已有的成品客户端。")]),e._v(" "),n("p",[e._v("成品客户端通常会支持更多协议类型,比如 gost,基本上所有可以监听的类型都可以通过 seamoon 隧道协议转发出来。")]),e._v(" "),n("ul",[n("li",[n("p",[n("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/client/gost/",target:"_blank",rel:"noopener noreferrer"}},[e._v("gost:优雅简便的go代理"),n("OutboundLink")],1)])]),e._v(" "),n("li",[n("p",[n("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/client/docker/",target:"_blank",rel:"noopener noreferrer"}},[e._v("docker"),n("OutboundLink")],1)])]),e._v(" "),n("li",[n("p",[n("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/deploy/binary/",target:"_blank",rel:"noopener noreferrer"}},[e._v("binary"),n("OutboundLink")],1)])])]),e._v(" "),n("p",[e._v("Seamoon 客户端还支持了 Tor 网桥的接入")]),e._v(" "),n("ul",[n("li",[n("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/client/tor/",target:"_blank",rel:"noopener noreferrer"}},[e._v("tor"),n("OutboundLink")],1)]),e._v(" "),n("li",[n("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/client/v2ray/",target:"_blank",rel:"noopener noreferrer"}},[e._v("v2ray: 时代战神"),n("OutboundLink")],1)]),e._v(" "),n("li",[n("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/client/clash/",target:"_blank",rel:"noopener noreferrer"}},[e._v("clash: 快速的即成,抛开多个客户端"),n("OutboundLink")],1)])])])}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/21.16ebe77a.js b/assets/js/21.58bb51b4.js similarity index 96% rename from assets/js/21.16ebe77a.js rename to assets/js/21.58bb51b4.js index 8b82ae6..a655607 100644 --- a/assets/js/21.16ebe77a.js +++ b/assets/js/21.58bb51b4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{330:function(t,s,a){"use strict";a.r(s);var r=a(7),e=Object(r.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"position"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#position"}},[t._v("#")]),t._v(" Position")]),t._v(" "),s("h2",{attrs:{id:"一些想法上的改动"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#一些想法上的改动"}},[t._v("#")]),t._v(" 一些想法上的改动")]),t._v(" "),s("p",[t._v("随着版本的迭代,月海已经与我最初的雏形完全偏离")]),t._v(" "),s("h2",{attrs:{id:"前言-为什么要写月海这个工具-why-sea-moon"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#前言-为什么要写月海这个工具-why-sea-moon"}},[t._v("#")]),t._v(" 前言: 为什么要写月海这个工具? (Why Sea Moon)")]),t._v(" "),s("ul",[s("li",[t._v("随着云原生不断地推广,希望渗透测试也能够与时俱进,开启一个新的纪元。不论从测试的手段还是挖掘方向,都应该朝着时代发展的方向跟进。")]),t._v(" "),s("li",[t._v("现有项目模式较为松散,部署还是需要花费一些经历来理解和操作。而类似阿里云已经上升到serverless应用的层级,相应的部署方式和玩法更新颖。")]),t._v(" "),s("li",[t._v("如果将这些项目比作是概念性工具,那么月海致力于打造的是一个较为成熟化的,能够快速简易应用的工具集产品。")]),t._v(" "),s("li",[t._v("月海希望能够抛砖引玉,提出一个简易的框架和模式,将现有的大部分可迁移至云端操作的攻击手段集成进来,最终达到随手拿来的一台崭新电脑,5分钟即可进入攻击状态(理想)。")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{331:function(t,s,a){"use strict";a.r(s);var r=a(7),e=Object(r.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"position"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#position"}},[t._v("#")]),t._v(" Position")]),t._v(" "),s("h2",{attrs:{id:"一些想法上的改动"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#一些想法上的改动"}},[t._v("#")]),t._v(" 一些想法上的改动")]),t._v(" "),s("p",[t._v("随着版本的迭代,月海已经与我最初的雏形完全偏离")]),t._v(" "),s("h2",{attrs:{id:"前言-为什么要写月海这个工具-why-sea-moon"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#前言-为什么要写月海这个工具-why-sea-moon"}},[t._v("#")]),t._v(" 前言: 为什么要写月海这个工具? (Why Sea Moon)")]),t._v(" "),s("ul",[s("li",[t._v("随着云原生不断地推广,希望渗透测试也能够与时俱进,开启一个新的纪元。不论从测试的手段还是挖掘方向,都应该朝着时代发展的方向跟进。")]),t._v(" "),s("li",[t._v("现有项目模式较为松散,部署还是需要花费一些经历来理解和操作。而类似阿里云已经上升到serverless应用的层级,相应的部署方式和玩法更新颖。")]),t._v(" "),s("li",[t._v("如果将这些项目比作是概念性工具,那么月海致力于打造的是一个较为成熟化的,能够快速简易应用的工具集产品。")]),t._v(" "),s("li",[t._v("月海希望能够抛砖引玉,提出一个简易的框架和模式,将现有的大部分可迁移至云端操作的攻击手段集成进来,最终达到随手拿来的一台崭新电脑,5分钟即可进入攻击状态(理想)。")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/23.6e2ee1ad.js b/assets/js/23.61105637.js similarity index 98% rename from assets/js/23.6e2ee1ad.js rename to assets/js/23.61105637.js index d8305c2..4257ec8 100644 --- a/assets/js/23.6e2ee1ad.js +++ b/assets/js/23.61105637.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{333:function(r,e,t){"use strict";t.r(e);var o=t(7),n=Object(o.a)({},(function(){var r=this,e=r._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":r.$parent.slotKey}},[e("h2",{attrs:{id:"seamoon-技术blog"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#seamoon-技术blog"}},[r._v("#")]),r._v(" SeaMoon 技术Blog")]),r._v(" "),e("p",[r._v("在此分享 SeaMoon 在实现上的一些技术思考与serverless的一些讨论")]),r._v(" "),e("h2",{attrs:{id:"📒-参考文献与项目"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#📒-参考文献与项目"}},[r._v("#")]),r._v(" 📒 参考文献与项目")]),r._v(" "),e("p",[r._v("感谢各位前辈师傅们的分享与沉淀。")]),r._v(" "),e("p",[e("strong",[r._v("文章类")])]),r._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"https://xz.aliyun.com/t/9502",target:"_blank",rel:"noopener noreferrer"}},[r._v("浅谈云函数的利用面"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://freewechat.com/a/MzI0MDI5MTQ3OQ==/2247484068/1",target:"_blank",rel:"noopener noreferrer"}},[r._v("白嫖CDN,打造封不尽IP的代理池"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://serverless.ink/",target:"_blank",rel:"noopener noreferrer"}},[r._v("Serverless 应用开发指南"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://www.freebuf.com/articles/web/212382.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("HTTP被动扫描代理的那些事"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://luyuhuang.tech/2020/12/02/subsocks.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("Subsocks: 用GO实现一个Socks5安全代理"),e("OutboundLink")],1)])]),r._v(" "),e("p",[e("strong",[r._v("项目类")])]),r._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"https://github.com/shimmeris/SCFProxy",target:"_blank",rel:"noopener noreferrer"}},[r._v("SFCProxy"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/armon/go-socks5",target:"_blank",rel:"noopener noreferrer"}},[r._v("go-socks5"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/luyuhuang/subsocks",target:"_blank",rel:"noopener noreferrer"}},[r._v("subsocks"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/ginuerzh/gost",target:"_blank",rel:"noopener noreferrer"}},[r._v("gost"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/inbug-team/InCloud",target:"_blank",rel:"noopener noreferrer"}},[r._v("InCloud"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/Sakurasan/scf-proxy",target:"_blank",rel:"noopener noreferrer"}},[r._v("sfc-proxy"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/copriwolf/serverless-transitcode",target:"_blank",rel:"noopener noreferrer"}},[r._v("Serverless-transitcode"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/SapphicCode/protoplex",target:"_blank",rel:"noopener noreferrer"}},[r._v("protoplex"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/D3Ext/DFShell",target:"_blank",rel:"noopener noreferrer"}},[r._v("DFShell"),e("OutboundLink")],1)])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{334:function(r,e,t){"use strict";t.r(e);var o=t(7),n=Object(o.a)({},(function(){var r=this,e=r._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":r.$parent.slotKey}},[e("h2",{attrs:{id:"seamoon-技术blog"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#seamoon-技术blog"}},[r._v("#")]),r._v(" SeaMoon 技术Blog")]),r._v(" "),e("p",[r._v("在此分享 SeaMoon 在实现上的一些技术思考与serverless的一些讨论")]),r._v(" "),e("h2",{attrs:{id:"📒-参考文献与项目"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#📒-参考文献与项目"}},[r._v("#")]),r._v(" 📒 参考文献与项目")]),r._v(" "),e("p",[r._v("感谢各位前辈师傅们的分享与沉淀。")]),r._v(" "),e("p",[e("strong",[r._v("文章类")])]),r._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"https://xz.aliyun.com/t/9502",target:"_blank",rel:"noopener noreferrer"}},[r._v("浅谈云函数的利用面"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://freewechat.com/a/MzI0MDI5MTQ3OQ==/2247484068/1",target:"_blank",rel:"noopener noreferrer"}},[r._v("白嫖CDN,打造封不尽IP的代理池"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://serverless.ink/",target:"_blank",rel:"noopener noreferrer"}},[r._v("Serverless 应用开发指南"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://www.freebuf.com/articles/web/212382.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("HTTP被动扫描代理的那些事"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://luyuhuang.tech/2020/12/02/subsocks.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("Subsocks: 用GO实现一个Socks5安全代理"),e("OutboundLink")],1)])]),r._v(" "),e("p",[e("strong",[r._v("项目类")])]),r._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"https://github.com/shimmeris/SCFProxy",target:"_blank",rel:"noopener noreferrer"}},[r._v("SFCProxy"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/armon/go-socks5",target:"_blank",rel:"noopener noreferrer"}},[r._v("go-socks5"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/luyuhuang/subsocks",target:"_blank",rel:"noopener noreferrer"}},[r._v("subsocks"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/ginuerzh/gost",target:"_blank",rel:"noopener noreferrer"}},[r._v("gost"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/inbug-team/InCloud",target:"_blank",rel:"noopener noreferrer"}},[r._v("InCloud"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/Sakurasan/scf-proxy",target:"_blank",rel:"noopener noreferrer"}},[r._v("sfc-proxy"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/copriwolf/serverless-transitcode",target:"_blank",rel:"noopener noreferrer"}},[r._v("Serverless-transitcode"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/SapphicCode/protoplex",target:"_blank",rel:"noopener noreferrer"}},[r._v("protoplex"),e("OutboundLink")],1)]),r._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/D3Ext/DFShell",target:"_blank",rel:"noopener noreferrer"}},[r._v("DFShell"),e("OutboundLink")],1)])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/24.164f03d7.js b/assets/js/24.3013bd4a.js similarity index 98% rename from assets/js/24.164f03d7.js rename to assets/js/24.3013bd4a.js index 0319ece..3086f99 100644 --- a/assets/js/24.164f03d7.js +++ b/assets/js/24.3013bd4a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{334:function(t,_,v){"use strict";v.r(_);var a=v(7),s=Object(a.a)({},(function(){var t=this,_=t._self._c;return _("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[_("h1",{attrs:{id:"http"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#http"}},[t._v("#")]),t._v(" HTTP")]),t._v(" "),_("p",[t._v("HTTP代理 涉及了三个问题。")]),t._v(" "),_("ol",[_("li",[t._v("HOST 路由问题")]),t._v(" "),_("li",[t._v("HTTPS 请求认证问题")]),t._v(" "),_("li",[t._v("链式代理")]),t._v(" "),_("li",[t._v("底层转发http.client.do()问题")])]),t._v(" "),_("p",[t._v("依次在原理部分解释月海是如何处理上述问题的")]),t._v(" "),_("h2",{attrs:{id:"效果"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#效果"}},[t._v("#")]),t._v(" 效果")]),t._v(" "),_("p",[_("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/7bfff588795a4e41b488694ad4eb5153.png",alt:"speed"}})]),t._v(" "),_("h2",{attrs:{id:"原理"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#原理"}},[t._v("#")]),t._v(" 原理")]),t._v(" "),_("h3",{attrs:{id:"host-路由问题"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#host-路由问题"}},[t._v("#")]),t._v(" HOST 路由问题")]),t._v(" "),_("p",[t._v("最早接触云函数就是大佬们的文章:通过云函数进行动态IP池的代理。开启了大家探索云函数的历程。")]),t._v(" "),_("p",[t._v("其基本原理在于: 通过本地代理拦截 http请求进行解析,将分析出来的参数提供给云函数执行。")]),t._v(" "),_("p",[t._v("而云函数端仅提供一个类似request的方法,把获取到的参数重组HTTP请求,请求过后将数据返回而已。")]),t._v(" "),_("p",[t._v("在设计月海时,我对这种模式实在是难以苟同,太不优雅了,先不提各种编码可能导致的问题,光是要在本地开一个client端,就已经很难受了。")]),t._v(" "),_("p",[t._v("(月海最初的目标是实现本地端不需要任何工具,拿到一台机器,连接到云函数就能进行渗透工作)")]),t._v(" "),_("p",[t._v("但是经过一番折腾,发现截止至目前,云函数的支持力度仅能够存在这一种利用的方式。")]),t._v(" "),_("p",[t._v("问题就出在了HTTP的代理模式。")]),t._v(" "),_("p",[t._v("我们正常使用HTTP代理(浏览器插件、burp、bash终端的"),_("code",[t._v("export HTTP_PROXY")]),t._v(")等,实际上是将HTTP数据包原封不动的发给了我们配置的代理服务器。")]),t._v(" "),_("p",[t._v("实际上,等效于这种请求:\n"),_("code",[t._v('curl -H "HOST: Dest-HOST" example.proxy.com')])]),t._v(" "),_("p",[t._v("但是在云函数的实现都是通过API网关来寻找对应的FC,来确定触发器到底是由哪个函数执行。")]),t._v(" "),_("p",[t._v("而这就用到了这个HOST头字段,导致无法直接在云函数开启一个HTTP代理,用插件配置上使用。")]),t._v(" "),_("p",[t._v('"不要在已有的模式上造轮子", 因此,基于FC的特性,针对HTTP模式,就不再做更多思考与尝试了。')]),t._v(" "),_("p",[t._v("这里仍可以做的,就是优化HTTP请求的优雅程度,比如,通信方式,字段规范,以及编码问题的处理。")]),t._v(" "),_("h3",{attrs:{id:"https-请求认证问题"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#https-请求认证问题"}},[t._v("#")]),t._v(" HTTPS 请求认证问题")]),t._v(" "),_("p",[t._v("其实基于上面的架构。HTTPS 的问题已经很好解决了。")]),t._v(" "),_("p",[t._v("因为我们的 云函数HTTP代理,并不是一个实际意义上的代理,而是一个模拟代理。 云函数模拟的请求是可以发送https的。")]),t._v(" "),_("p",[t._v("那么问题就变成了,如何信任我们的client端,参照大多proxy和burp的模式,可以通过信任根路径的证书来解决这个问题。")]),t._v(" "),_("p",[t._v("可以参考这篇文章")]),t._v(" "),_("p",[_("a",{attrs:{href:"https://www.lyyyuna.com/2018/03/16/http-proxy-https/",target:"_blank",rel:"noopener noreferrer"}},[t._v("实现基于 HTTPS 代理的中间人攻击"),_("OutboundLink")],1)]),t._v(" "),_("p",[t._v("HTTPS 迎刃而解。")]),t._v(" "),_("h3",{attrs:{id:"链式代理"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#链式代理"}},[t._v("#")]),t._v(" 链式代理")]),t._v(" "),_("p",[t._v("待开发")]),t._v(" "),_("h3",{attrs:{id:"底层逻辑问题"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#底层逻辑问题"}},[t._v("#")]),t._v(" 底层逻辑问题")]),t._v(" "),_("p",[t._v("月海测试beta版本,使用的方式是通过net.http 直接发送从header获取的完整路径请求。")]),t._v(" "),_("p",[t._v("这和现有的一些工具逻辑完全一致。 但是在测试时,很容易出现:"),_("code",[t._v("http redirect request")]),t._v(" 、 js/css加载失败或直接失效的场景,这相比socks5的舒适度差了一大截。")]),t._v(" "),_("p",[t._v("因此,基于完美主义,后续将会重构一版底层net转发的逻辑。")])])}),[],!1,null,null,null);_.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{333:function(t,_,v){"use strict";v.r(_);var a=v(7),s=Object(a.a)({},(function(){var t=this,_=t._self._c;return _("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[_("h1",{attrs:{id:"http"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#http"}},[t._v("#")]),t._v(" HTTP")]),t._v(" "),_("p",[t._v("HTTP代理 涉及了三个问题。")]),t._v(" "),_("ol",[_("li",[t._v("HOST 路由问题")]),t._v(" "),_("li",[t._v("HTTPS 请求认证问题")]),t._v(" "),_("li",[t._v("链式代理")]),t._v(" "),_("li",[t._v("底层转发http.client.do()问题")])]),t._v(" "),_("p",[t._v("依次在原理部分解释月海是如何处理上述问题的")]),t._v(" "),_("h2",{attrs:{id:"效果"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#效果"}},[t._v("#")]),t._v(" 效果")]),t._v(" "),_("p",[_("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/7bfff588795a4e41b488694ad4eb5153.png",alt:"speed"}})]),t._v(" "),_("h2",{attrs:{id:"原理"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#原理"}},[t._v("#")]),t._v(" 原理")]),t._v(" "),_("h3",{attrs:{id:"host-路由问题"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#host-路由问题"}},[t._v("#")]),t._v(" HOST 路由问题")]),t._v(" "),_("p",[t._v("最早接触云函数就是大佬们的文章:通过云函数进行动态IP池的代理。开启了大家探索云函数的历程。")]),t._v(" "),_("p",[t._v("其基本原理在于: 通过本地代理拦截 http请求进行解析,将分析出来的参数提供给云函数执行。")]),t._v(" "),_("p",[t._v("而云函数端仅提供一个类似request的方法,把获取到的参数重组HTTP请求,请求过后将数据返回而已。")]),t._v(" "),_("p",[t._v("在设计月海时,我对这种模式实在是难以苟同,太不优雅了,先不提各种编码可能导致的问题,光是要在本地开一个client端,就已经很难受了。")]),t._v(" "),_("p",[t._v("(月海最初的目标是实现本地端不需要任何工具,拿到一台机器,连接到云函数就能进行渗透工作)")]),t._v(" "),_("p",[t._v("但是经过一番折腾,发现截止至目前,云函数的支持力度仅能够存在这一种利用的方式。")]),t._v(" "),_("p",[t._v("问题就出在了HTTP的代理模式。")]),t._v(" "),_("p",[t._v("我们正常使用HTTP代理(浏览器插件、burp、bash终端的"),_("code",[t._v("export HTTP_PROXY")]),t._v(")等,实际上是将HTTP数据包原封不动的发给了我们配置的代理服务器。")]),t._v(" "),_("p",[t._v("实际上,等效于这种请求:\n"),_("code",[t._v('curl -H "HOST: Dest-HOST" example.proxy.com')])]),t._v(" "),_("p",[t._v("但是在云函数的实现都是通过API网关来寻找对应的FC,来确定触发器到底是由哪个函数执行。")]),t._v(" "),_("p",[t._v("而这就用到了这个HOST头字段,导致无法直接在云函数开启一个HTTP代理,用插件配置上使用。")]),t._v(" "),_("p",[t._v('"不要在已有的模式上造轮子", 因此,基于FC的特性,针对HTTP模式,就不再做更多思考与尝试了。')]),t._v(" "),_("p",[t._v("这里仍可以做的,就是优化HTTP请求的优雅程度,比如,通信方式,字段规范,以及编码问题的处理。")]),t._v(" "),_("h3",{attrs:{id:"https-请求认证问题"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#https-请求认证问题"}},[t._v("#")]),t._v(" HTTPS 请求认证问题")]),t._v(" "),_("p",[t._v("其实基于上面的架构。HTTPS 的问题已经很好解决了。")]),t._v(" "),_("p",[t._v("因为我们的 云函数HTTP代理,并不是一个实际意义上的代理,而是一个模拟代理。 云函数模拟的请求是可以发送https的。")]),t._v(" "),_("p",[t._v("那么问题就变成了,如何信任我们的client端,参照大多proxy和burp的模式,可以通过信任根路径的证书来解决这个问题。")]),t._v(" "),_("p",[t._v("可以参考这篇文章")]),t._v(" "),_("p",[_("a",{attrs:{href:"https://www.lyyyuna.com/2018/03/16/http-proxy-https/",target:"_blank",rel:"noopener noreferrer"}},[t._v("实现基于 HTTPS 代理的中间人攻击"),_("OutboundLink")],1)]),t._v(" "),_("p",[t._v("HTTPS 迎刃而解。")]),t._v(" "),_("h3",{attrs:{id:"链式代理"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#链式代理"}},[t._v("#")]),t._v(" 链式代理")]),t._v(" "),_("p",[t._v("待开发")]),t._v(" "),_("h3",{attrs:{id:"底层逻辑问题"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#底层逻辑问题"}},[t._v("#")]),t._v(" 底层逻辑问题")]),t._v(" "),_("p",[t._v("月海测试beta版本,使用的方式是通过net.http 直接发送从header获取的完整路径请求。")]),t._v(" "),_("p",[t._v("这和现有的一些工具逻辑完全一致。 但是在测试时,很容易出现:"),_("code",[t._v("http redirect request")]),t._v(" 、 js/css加载失败或直接失效的场景,这相比socks5的舒适度差了一大截。")]),t._v(" "),_("p",[t._v("因此,基于完美主义,后续将会重构一版底层net转发的逻辑。")])])}),[],!1,null,null,null);_.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/6.b1b844ce.js b/assets/js/6.2afe53c3.js similarity index 99% rename from assets/js/6.b1b844ce.js rename to assets/js/6.2afe53c3.js index 3a46fd4..04d3f59 100644 --- a/assets/js/6.b1b844ce.js +++ b/assets/js/6.2afe53c3.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{316:function(t,e,a){"use strict";a.r(e);var r=a(7),v=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"seamoon-月海"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#seamoon-月海"}},[t._v("#")]),t._v(" SeaMoon - 月海")]),t._v(" "),e("p",[e("img",{attrs:{src:"https://goreportcard.com/badge/github.com/DVKunion/SeaMoon",alt:"go-report"}}),t._v(" "),e("img",{attrs:{src:"https://img.shields.io/github/languages/top/DVKunion/SeaMoon.svg?&color=blueviolet",alt:"language"}}),t._v(" "),e("img",{attrs:{src:"https://img.shields.io/github/downloads/dvkunion/seamoon/total?color=orange",alt:"download"}}),t._v(" "),e("img",{attrs:{src:"https://img.shields.io/badge/LICENSE-MIT-777777.svg",alt:"license"}}),t._v(" "),e("img",{attrs:{src:"https://img.shields.io/github/stars/DVKunion/SeaMoon.svg",alt:"start"}})]),t._v(" "),e("h2",{attrs:{id:"☁️-什么是月海"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#☁️-什么是月海"}},[t._v("#")]),t._v(" ☁️ 什么是月海")]),t._v(" "),e("blockquote",[e("p",[t._v("🌕 月出于云却隐于海")])]),t._v(" "),e("p",[t._v("月海(Sea Moon) 是一款 FaaS/BaaS 实现的 Serverless 网络工具集,期望利用云原生的优势,实现更简单、更便宜的网络工具。")]),t._v(" "),e("p",[t._v("月海之名取自于苏轼的《西江月·顷在黄州》,寓意月海取自于传统工具,用之于云,最终达到隐匿于海的效果。")]),t._v(" "),e("p",[t._v("月海基于 Serverless 的动态与无状态的特性,从网络层实现了一个基于 Serverless 的网络工具集,包括代理、转发、隧道等等常见网络功能;\n同时在客户端集成了大量云厂商,实现快捷的一键式部署和跨厂商与平台操作。")]),t._v(" "),e("p",[t._v("觉得项目不错的话,"),e("a",{attrs:{href:"https://github.com/DVKunion/SeaMoon",target:"_blank",rel:"noopener noreferrer"}},[t._v("还请给一个star ✨"),e("OutboundLink")],1),t._v(", 你的支持是更新的最大动力~")]),t._v(" "),e("h2",{attrs:{id:"🌟-月海能做什么"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#🌟-月海能做什么"}},[t._v("#")]),t._v(" 🌟 月海能做什么")]),t._v(" "),e("p",[t._v("Serverless 的动态实例不同的出口IP,从而获取到了干净(非威胁情报黑名单)、随机的外网IP代理、用后即销毁的无痕状态等。")]),t._v(" "),e("p",[e("strong",[t._v("网络代理")])]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("代理类型")]),t._v(" "),e("th",[t._v("技术文档")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Seamoon 客户端支持")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("其他客户端支持")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("HTTP(S)")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://seamoon.dvkunion.cn/tech/net/http/",target:"_blank",rel:"noopener noreferrer"}},[t._v("HTTP.md"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("Socks5")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://seamoon.dvkunion.cn/tech/net/socks5/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Socks5.md"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("Socks4")]),t._v(" "),e("td",[e("a",{attrs:{href:""}})]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("Vmess")]),t._v(" "),e("td",[e("a",{attrs:{href:""}})]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("Vless")]),t._v(" "),e("td",[e("a",{attrs:{href:""}})]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("shadowsocks")]),t._v(" "),e("td",[e("a",{attrs:{href:""}})]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])])])]),t._v(" "),e("p",[e("strong",[t._v("网络隧道")])]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("隧道类型")]),t._v(" "),e("th",[t._v("技术文档")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("支持情况")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("websockst")]),t._v(" "),e("td",[e("a",{attrs:{href:""}})]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("grpc")]),t._v(" "),e("td",[e("a",{attrs:{href:""}})]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("oss")]),t._v(" "),e("td",[e("a",{attrs:{href:""}})]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("🐷调研中")])])])]),t._v(" "),e("p",[e("strong",[t._v("其他")])]),t._v(" "),e("ul",[e("li",[t._v("💻 多客户端支持,clash/shadowrocket 等。")]),t._v(" "),e("li",[t._v("🧅 Tor 网络 .onion 支持. "),e("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/client/tor/",target:"_blank",rel:"noopener noreferrer"}},[t._v("如何开启 Tor 代理"),e("OutboundLink")],1)]),t._v(" "),e("li",[t._v("......")])]),t._v(" "),e("p",[t._v("更多特性相关请移步: "),e("a",{attrs:{href:"https://seamoon.dvkunion.cn/tech/feature/",target:"_blank",rel:"noopener noreferrer"}},[t._v("技术文档"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"🧭-支持平台"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#🧭-支持平台"}},[t._v("#")]),t._v(" 🧭 支持平台")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("平台名称")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("免费力度")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("是否支持")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("阿里云")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("新用户三个月")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("腾讯云")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("🈚️")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("Sealos")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("五元余额")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("华为云")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}}),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("百度云")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}}),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("🙅Render")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("s",[t._v("每月750小时免费 + 100G流量")]),t._v("但是封号")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),e("tr",[e("td",[t._v("AWS")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}}),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("🐷调研中")])]),t._v(" "),e("tr",[e("td",[t._v("Google")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}}),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("🐷调研中")])])])]),t._v(" "),e("h2",{attrs:{id:"🕹开始使用"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#🕹开始使用"}},[t._v("#")]),t._v(" 🕹开始使用")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/start",target:"_blank",rel:"noopener noreferrer"}},[t._v("继续阅读: 快速开始"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"❗免责声明"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#❗免责声明"}},[t._v("#")]),t._v(" ❗免责声明")]),t._v(" "),e("p",[t._v("本工具仅用于学习 serverless 以及云原生相关技术,请勿用于其他用途。")]),t._v(" "),e("p",[t._v("如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。")])])}),[],!1,null,null,null);e.default=v.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{319:function(t,e,a){"use strict";a.r(e);var r=a(7),v=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"seamoon-月海"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#seamoon-月海"}},[t._v("#")]),t._v(" SeaMoon - 月海")]),t._v(" "),e("p",[e("img",{attrs:{src:"https://goreportcard.com/badge/github.com/DVKunion/SeaMoon",alt:"go-report"}}),t._v(" "),e("img",{attrs:{src:"https://img.shields.io/github/languages/top/DVKunion/SeaMoon.svg?&color=blueviolet",alt:"language"}}),t._v(" "),e("img",{attrs:{src:"https://img.shields.io/github/downloads/dvkunion/seamoon/total?color=orange",alt:"download"}}),t._v(" "),e("img",{attrs:{src:"https://img.shields.io/badge/LICENSE-MIT-777777.svg",alt:"license"}}),t._v(" "),e("img",{attrs:{src:"https://img.shields.io/github/stars/DVKunion/SeaMoon.svg",alt:"start"}})]),t._v(" "),e("h2",{attrs:{id:"☁️-什么是月海"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#☁️-什么是月海"}},[t._v("#")]),t._v(" ☁️ 什么是月海")]),t._v(" "),e("blockquote",[e("p",[t._v("🌕 月出于云却隐于海")])]),t._v(" "),e("p",[t._v("月海(Sea Moon) 是一款 FaaS/BaaS 实现的 Serverless 网络工具集,期望利用云原生的优势,实现更简单、更便宜的网络工具。")]),t._v(" "),e("p",[t._v("月海之名取自于苏轼的《西江月·顷在黄州》,寓意月海取自于传统工具,用之于云,最终达到隐匿于海的效果。")]),t._v(" "),e("p",[t._v("月海基于 Serverless 的动态与无状态的特性,从网络层实现了一个基于 Serverless 的网络工具集,包括代理、转发、隧道等等常见网络功能;\n同时在客户端集成了大量云厂商,实现快捷的一键式部署和跨厂商与平台操作。")]),t._v(" "),e("p",[t._v("觉得项目不错的话,"),e("a",{attrs:{href:"https://github.com/DVKunion/SeaMoon",target:"_blank",rel:"noopener noreferrer"}},[t._v("还请给一个star ✨"),e("OutboundLink")],1),t._v(", 你的支持是更新的最大动力~")]),t._v(" "),e("h2",{attrs:{id:"🌟-月海能做什么"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#🌟-月海能做什么"}},[t._v("#")]),t._v(" 🌟 月海能做什么")]),t._v(" "),e("p",[t._v("Serverless 的动态实例不同的出口IP,从而获取到了干净(非威胁情报黑名单)、随机的外网IP代理、用后即销毁的无痕状态等。")]),t._v(" "),e("p",[e("strong",[t._v("网络代理")])]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("代理类型")]),t._v(" "),e("th",[t._v("技术文档")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Seamoon 客户端支持")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("其他客户端支持")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("HTTP(S)")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://seamoon.dvkunion.cn/tech/net/http/",target:"_blank",rel:"noopener noreferrer"}},[t._v("HTTP.md"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("Socks5")]),t._v(" "),e("td",[e("a",{attrs:{href:"https://seamoon.dvkunion.cn/tech/net/socks5/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Socks5.md"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("Socks4")]),t._v(" "),e("td",[e("a",{attrs:{href:""}})]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("Vmess")]),t._v(" "),e("td",[e("a",{attrs:{href:""}})]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("Vless")]),t._v(" "),e("td",[e("a",{attrs:{href:""}})]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("shadowsocks")]),t._v(" "),e("td",[e("a",{attrs:{href:""}})]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])])])]),t._v(" "),e("p",[e("strong",[t._v("网络隧道")])]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("隧道类型")]),t._v(" "),e("th",[t._v("技术文档")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("支持情况")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("websockst")]),t._v(" "),e("td",[e("a",{attrs:{href:""}})]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("grpc")]),t._v(" "),e("td",[e("a",{attrs:{href:""}})]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("oss")]),t._v(" "),e("td",[e("a",{attrs:{href:""}})]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("🐷调研中")])])])]),t._v(" "),e("p",[e("strong",[t._v("其他")])]),t._v(" "),e("ul",[e("li",[t._v("💻 多客户端支持,clash/shadowrocket 等。")]),t._v(" "),e("li",[t._v("🧅 Tor 网络 .onion 支持. "),e("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/client/tor/",target:"_blank",rel:"noopener noreferrer"}},[t._v("如何开启 Tor 代理"),e("OutboundLink")],1)]),t._v(" "),e("li",[t._v("......")])]),t._v(" "),e("p",[t._v("更多特性相关请移步: "),e("a",{attrs:{href:"https://seamoon.dvkunion.cn/tech/feature/",target:"_blank",rel:"noopener noreferrer"}},[t._v("技术文档"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"🧭-支持平台"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#🧭-支持平台"}},[t._v("#")]),t._v(" 🧭 支持平台")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("平台名称")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("免费力度")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("是否支持")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("阿里云")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("新用户三个月")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("腾讯云")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("🈚️")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("Sealos")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("五元余额")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("华为云")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}}),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("百度云")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}}),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")])]),t._v(" "),e("tr",[e("td",[t._v("🙅Render")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[e("s",[t._v("每月750小时免费 + 100G流量")]),t._v("但是封号")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("❌")])]),t._v(" "),e("tr",[e("td",[t._v("AWS")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}}),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("🐷调研中")])]),t._v(" "),e("tr",[e("td",[t._v("Google")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}}),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("🐷调研中")])])])]),t._v(" "),e("h2",{attrs:{id:"🕹开始使用"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#🕹开始使用"}},[t._v("#")]),t._v(" 🕹开始使用")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/start",target:"_blank",rel:"noopener noreferrer"}},[t._v("继续阅读: 快速开始"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"❗免责声明"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#❗免责声明"}},[t._v("#")]),t._v(" ❗免责声明")]),t._v(" "),e("p",[t._v("本工具仅用于学习 serverless 以及云原生相关技术,请勿用于其他用途。")]),t._v(" "),e("p",[t._v("如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。")])])}),[],!1,null,null,null);e.default=v.exports}}]); \ No newline at end of file diff --git a/assets/js/7.04c8129c.js b/assets/js/7.cd5b83f2.js similarity index 96% rename from assets/js/7.04c8129c.js rename to assets/js/7.cd5b83f2.js index eeabcbe..3ef2988 100644 --- a/assets/js/7.04c8129c.js +++ b/assets/js/7.cd5b83f2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{317:function(t,s,a){"use strict";a.r(s);var v=a(7),_=Object(v.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"项目结构"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#项目结构"}},[t._v("#")]),t._v(" 项目结构")]),t._v(" "),s("p",[t._v("月海主要分为两部分:")]),t._v(" "),s("ul",[s("li",[t._v("部署在云端的服务端")]),t._v(" "),s("li",[t._v("客户端")])]),t._v(" "),s("h2",{attrs:{id:"服务端"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#服务端"}},[t._v("#")]),t._v(" 服务端")]),t._v(" "),s("p",[t._v("服务端为实际部署在云厂商的代码。负责实际计算的功能模块, 主要实现各类的隧道与协议解析。")]),t._v(" "),s("h2",{attrs:{id:"客户端"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#客户端"}},[t._v("#")]),t._v(" 客户端")]),t._v(" "),s("p",[t._v("为了方便管理和使用,月海提供了一个 B/S 架构的客户端,主要包括了以下内容:")]),t._v(" "),s("ul",[s("li",[t._v("系统配置: 客户端相关配置")]),t._v(" "),s("li",[t._v("云账户管理: 用于管控所有部署的云账户信息")]),t._v(" "),s("li",[t._v("函数实例: 用于展示和管理所有已经部署的 Serverless 函数")]),t._v(" "),s("li",[t._v("服务: 当没有使用其他的客户端时,月海还提供了一个简易的服务功能来提供一些网络服务,来实现对外的开放。")])]),t._v(" "),s("p",[t._v("除了使用 seamoon 自身的客户端代理功能之外,还可以使用其他支持隧道模式的 客户端工具,如 clash/v2ray/gost, 可以实现在本地落地更多协议的代理。")])])}),[],!1,null,null,null);s.default=_.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{316:function(t,s,a){"use strict";a.r(s);var v=a(7),_=Object(v.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"项目结构"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#项目结构"}},[t._v("#")]),t._v(" 项目结构")]),t._v(" "),s("p",[t._v("月海主要分为两部分:")]),t._v(" "),s("ul",[s("li",[t._v("部署在云端的服务端")]),t._v(" "),s("li",[t._v("客户端")])]),t._v(" "),s("h2",{attrs:{id:"服务端"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#服务端"}},[t._v("#")]),t._v(" 服务端")]),t._v(" "),s("p",[t._v("服务端为实际部署在云厂商的代码。负责实际计算的功能模块, 主要实现各类的隧道与协议解析。")]),t._v(" "),s("h2",{attrs:{id:"客户端"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#客户端"}},[t._v("#")]),t._v(" 客户端")]),t._v(" "),s("p",[t._v("为了方便管理和使用,月海提供了一个 B/S 架构的客户端,主要包括了以下内容:")]),t._v(" "),s("ul",[s("li",[t._v("系统配置: 客户端相关配置")]),t._v(" "),s("li",[t._v("云账户管理: 用于管控所有部署的云账户信息")]),t._v(" "),s("li",[t._v("函数实例: 用于展示和管理所有已经部署的 Serverless 函数")]),t._v(" "),s("li",[t._v("服务: 当没有使用其他的客户端时,月海还提供了一个简易的服务功能来提供一些网络服务,来实现对外的开放。")])]),t._v(" "),s("p",[t._v("除了使用 seamoon 自身的客户端代理功能之外,还可以使用其他支持隧道模式的 客户端工具,如 clash/v2ray/gost, 可以实现在本地落地更多协议的代理。")])])}),[],!1,null,null,null);s.default=_.exports}}]); \ No newline at end of file diff --git a/assets/js/8.c351445d.js b/assets/js/8.1e68ad02.js similarity index 99% rename from assets/js/8.c351445d.js rename to assets/js/8.1e68ad02.js index a66529f..b3eaa12 100644 --- a/assets/js/8.c351445d.js +++ b/assets/js/8.1e68ad02.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{319:function(s,a,t){"use strict";t.r(a);var e=t(7),c=Object(e.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"快速开始"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#快速开始"}},[s._v("#")]),s._v(" 快速开始")]),s._v(" "),a("p",[s._v("通过该页面,您可以快速的通过客户端来创建一个 http 代理服务,作为月海的基本使用演示。")]),s._v(" "),a("h3",{attrs:{id:"事前准备"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#事前准备"}},[s._v("#")]),s._v(" 事前准备")]),s._v(" "),a("ul",[a("li",[s._v("云厂商账户(以阿里云为例),并开通对应的serverless服务(阿里云serverless服务名为:函数计算)")]),s._v(" "),a("li",[s._v("云厂商账户 AK/SK,并拥有操作函数和账单相关的全部权限。")])]),s._v(" "),a("h3",{attrs:{id:"启动服务"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#启动服务"}},[s._v("#")]),s._v(" 启动服务")]),s._v(" "),a("p",[a("code",[s._v("$ docker run -it -d --net=host dvkunion/seamoon:latest client proxy")])]),s._v(" "),a("p",[s._v("如果一切正常,你将可以在 "),a("code",[s._v("http://localhost:7777")]),s._v(" 访问到管理页面:")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/fbc14247042b4608a99b18fce6682175.png",alt:"login"}})]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("提示")]),s._v(" "),a("p",[s._v("默认的账户密码为: seamoon/seamoon")])]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("注意")]),s._v(" "),a("p",[s._v("安全起见,我们不建议直接通过 --net=host 将所有的端口直接暴露在网络中,更加推荐的做法请继续阅读: "),a("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/install/",target:"_blank",rel:"noopener noreferrer"}},[s._v("客户端安装"),a("OutboundLink")],1)])]),s._v(" "),a("h3",{attrs:{id:"修改默认密码"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#修改默认密码"}},[s._v("#")]),s._v(" 修改默认密码")]),s._v(" "),a("p",[s._v("第一步一定要修改掉默认的密码。点击 [系统管理],填写一个新的密码,然后提交:")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/b87e34d7b9114fabb1404ce99eef3097.png",alt:"password"}})]),s._v(" "),a("h3",{attrs:{id:"配置账户"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#配置账户"}},[s._v("#")]),s._v(" 配置账户")]),s._v(" "),a("p",[s._v("我们来尝试创建一个账户, 点击 [云账户管理] -> [新增]:")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/d580190a2ba74c178e1d5e239f2d82e3.png",alt:"add-account"}})]),s._v(" "),a("p",[s._v("填写对应的字段:")]),s._v(" "),a("ul",[a("li",[s._v("账户名称: 用于在客户端区分不同的账户,与具体云账户用户名无关")]),s._v(" "),a("li",[s._v("账户类型: 选择账户对应的云平台类型")]),s._v(" "),a("li",[s._v("最大部署限制: 该账户最多允许部署的函数数量,0表示不作限制。")]),s._v(" "),a("li",[s._v("账户描述: 用于备注该账户的一些其他信息")])]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/d5e68b2e29754a68b1640c33c3b13bb0.png",alt:"aliyun"}})]),s._v(" "),a("p",[s._v("点击下一步,继续填写表单:")]),s._v(" "),a("ul",[a("li",[s._v("账户允许部署区域: 表示当前账户允许部署的函数区域,可以多选")]),s._v(" "),a("li",[s._v("AccessID/AccessKey/SecretKey: 阿里云账户信息, AccountId 可在主页右上角个人信息处获取 accountId, AccessKeyId/AccessKeySecret 可在 "),a("a",{attrs:{href:"https://ram.console.aliyun.com/users",target:"_blank",rel:"noopener noreferrer"}},[s._v("IAM"),a("OutboundLink")],1),s._v(" 页面添加子用户生成密钥")])]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/75c7aa76665740878c796d82aac17233.png",alt:"aliyun-account"}})]),s._v(" "),a("p",[s._v("点击提交,账户会开始自动同步余额信息、函数信息等等。等待账户显示为正常状态时,即表示该步骤正确完成。")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/93e870aab1ba4519be7b1ddf6552155f.png",alt:"success"}})]),s._v(" "),a("p",[s._v("如果出现错误,鼠标放置在状态处,即可显示错误详细信息。")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/19d4ea3949934efe86666478d5daab0c.png",alt:"error"}})]),s._v(" "),a("h3",{attrs:{id:"创建服务"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#创建服务"}},[s._v("#")]),s._v(" 创建服务")]),s._v(" "),a("p",[s._v("可以开始创建服务了, 点击 [服务] -> [新增]:")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/12b854194e504602aeff41c8c58d9399.png",alt:"add-service"}})]),s._v(" "),a("p",[s._v("对应的参数比较多,我们首先填写第一张表单:")]),s._v(" "),a("ul",[a("li",[s._v("代理名称: 用于在客户端展示的代理名")]),s._v(" "),a("li",[s._v("监听协议: 选择 http")]),s._v(" "),a("li",[s._v("监听地址: 不需要改动")]),s._v(" "),a("li",[s._v("监听端口: 不需要改动(默认1080)")])]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/ab82aa10192049c28157856acc8e8be8.png",alt:"proxy"}})]),s._v(" "),a("p",[s._v("点击下一步,选择 [选择账户并自动创建新实例]")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/ebe49e967ee94feabde0855691e79c08.png",alt:"new-instance"}})]),s._v(" "),a("p",[s._v("点击下一步,选择刚才创建好的账户")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/6cfd9c34857047a5805140d4c51aef7c.png",alt:"select-account"}})]),s._v(" "),a("p",[s._v("点击下一步,开始填写函数参数")]),s._v(" "),a("ul",[a("li",[s._v("函数名称: 函数的名称,只允许英文")]),s._v(" "),a("li",[s._v("函数所在区域: 只能选择账户允许的区域内部署")])]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/367928eaf3ed4d3b9745a1a6976e05a0.png",alt:"func"}})]),s._v(" "),a("p",[s._v("其他选项均不需要改动,点击提交。")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/14ea9dfdf588445398aa8cca7be187a9.png",alt:"create"}})]),s._v(" "),a("h3",{attrs:{id:"开始使用"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#开始使用"}},[s._v("#")]),s._v(" 开始使用")]),s._v(" "),a("p",[s._v("现在我们可以测试一下了。在终端输入:")]),s._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("https_proxy")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://127.0.0.1:1080 "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("http_proxy")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://127.0.0.1:1080 "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("all_proxy")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://127.0.0.1:1080\n")])])]),a("p",[s._v("然后查一下 IP:")]),s._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" cip.cc\n")])])]),a("p",[s._v("如果显示为阿里云 IP,表明代理已经生效。")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/a88026e1cdab45f987c5cc66b6f81034.png",alt:"ip"}})]),s._v(" "),a("p",[s._v("同时服务页面会显示当前对应的延迟、连接数以及流量统计汇总。")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/d819adccb751498fa2c3c82bae465024.png",alt:"total"}})])])}),[],!1,null,null,null);a.default=c.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{317:function(s,a,t){"use strict";t.r(a);var e=t(7),c=Object(e.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"快速开始"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#快速开始"}},[s._v("#")]),s._v(" 快速开始")]),s._v(" "),a("p",[s._v("通过该页面,您可以快速的通过客户端来创建一个 http 代理服务,作为月海的基本使用演示。")]),s._v(" "),a("h3",{attrs:{id:"事前准备"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#事前准备"}},[s._v("#")]),s._v(" 事前准备")]),s._v(" "),a("ul",[a("li",[s._v("云厂商账户(以阿里云为例),并开通对应的serverless服务(阿里云serverless服务名为:函数计算)")]),s._v(" "),a("li",[s._v("云厂商账户 AK/SK,并拥有操作函数和账单相关的全部权限。")])]),s._v(" "),a("h3",{attrs:{id:"启动服务"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#启动服务"}},[s._v("#")]),s._v(" 启动服务")]),s._v(" "),a("p",[a("code",[s._v("$ docker run -it -d --net=host dvkunion/seamoon:latest client proxy")])]),s._v(" "),a("p",[s._v("如果一切正常,你将可以在 "),a("code",[s._v("http://localhost:7777")]),s._v(" 访问到管理页面:")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/fbc14247042b4608a99b18fce6682175.png",alt:"login"}})]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("提示")]),s._v(" "),a("p",[s._v("默认的账户密码为: seamoon/seamoon")])]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("注意")]),s._v(" "),a("p",[s._v("安全起见,我们不建议直接通过 --net=host 将所有的端口直接暴露在网络中,更加推荐的做法请继续阅读: "),a("a",{attrs:{href:"https://seamoon.dvkunion.cn/guide/install/",target:"_blank",rel:"noopener noreferrer"}},[s._v("客户端安装"),a("OutboundLink")],1)])]),s._v(" "),a("h3",{attrs:{id:"修改默认密码"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#修改默认密码"}},[s._v("#")]),s._v(" 修改默认密码")]),s._v(" "),a("p",[s._v("第一步一定要修改掉默认的密码。点击 [系统管理],填写一个新的密码,然后提交:")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/b87e34d7b9114fabb1404ce99eef3097.png",alt:"password"}})]),s._v(" "),a("h3",{attrs:{id:"配置账户"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#配置账户"}},[s._v("#")]),s._v(" 配置账户")]),s._v(" "),a("p",[s._v("我们来尝试创建一个账户, 点击 [云账户管理] -> [新增]:")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/d580190a2ba74c178e1d5e239f2d82e3.png",alt:"add-account"}})]),s._v(" "),a("p",[s._v("填写对应的字段:")]),s._v(" "),a("ul",[a("li",[s._v("账户名称: 用于在客户端区分不同的账户,与具体云账户用户名无关")]),s._v(" "),a("li",[s._v("账户类型: 选择账户对应的云平台类型")]),s._v(" "),a("li",[s._v("最大部署限制: 该账户最多允许部署的函数数量,0表示不作限制。")]),s._v(" "),a("li",[s._v("账户描述: 用于备注该账户的一些其他信息")])]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/d5e68b2e29754a68b1640c33c3b13bb0.png",alt:"aliyun"}})]),s._v(" "),a("p",[s._v("点击下一步,继续填写表单:")]),s._v(" "),a("ul",[a("li",[s._v("账户允许部署区域: 表示当前账户允许部署的函数区域,可以多选")]),s._v(" "),a("li",[s._v("AccessID/AccessKey/SecretKey: 阿里云账户信息, AccountId 可在主页右上角个人信息处获取 accountId, AccessKeyId/AccessKeySecret 可在 "),a("a",{attrs:{href:"https://ram.console.aliyun.com/users",target:"_blank",rel:"noopener noreferrer"}},[s._v("IAM"),a("OutboundLink")],1),s._v(" 页面添加子用户生成密钥")])]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/75c7aa76665740878c796d82aac17233.png",alt:"aliyun-account"}})]),s._v(" "),a("p",[s._v("点击提交,账户会开始自动同步余额信息、函数信息等等。等待账户显示为正常状态时,即表示该步骤正确完成。")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/93e870aab1ba4519be7b1ddf6552155f.png",alt:"success"}})]),s._v(" "),a("p",[s._v("如果出现错误,鼠标放置在状态处,即可显示错误详细信息。")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/19d4ea3949934efe86666478d5daab0c.png",alt:"error"}})]),s._v(" "),a("h3",{attrs:{id:"创建服务"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#创建服务"}},[s._v("#")]),s._v(" 创建服务")]),s._v(" "),a("p",[s._v("可以开始创建服务了, 点击 [服务] -> [新增]:")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/12b854194e504602aeff41c8c58d9399.png",alt:"add-service"}})]),s._v(" "),a("p",[s._v("对应的参数比较多,我们首先填写第一张表单:")]),s._v(" "),a("ul",[a("li",[s._v("代理名称: 用于在客户端展示的代理名")]),s._v(" "),a("li",[s._v("监听协议: 选择 http")]),s._v(" "),a("li",[s._v("监听地址: 不需要改动")]),s._v(" "),a("li",[s._v("监听端口: 不需要改动(默认1080)")])]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/ab82aa10192049c28157856acc8e8be8.png",alt:"proxy"}})]),s._v(" "),a("p",[s._v("点击下一步,选择 [选择账户并自动创建新实例]")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/ebe49e967ee94feabde0855691e79c08.png",alt:"new-instance"}})]),s._v(" "),a("p",[s._v("点击下一步,选择刚才创建好的账户")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/6cfd9c34857047a5805140d4c51aef7c.png",alt:"select-account"}})]),s._v(" "),a("p",[s._v("点击下一步,开始填写函数参数")]),s._v(" "),a("ul",[a("li",[s._v("函数名称: 函数的名称,只允许英文")]),s._v(" "),a("li",[s._v("函数所在区域: 只能选择账户允许的区域内部署")])]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/367928eaf3ed4d3b9745a1a6976e05a0.png",alt:"func"}})]),s._v(" "),a("p",[s._v("其他选项均不需要改动,点击提交。")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/14ea9dfdf588445398aa8cca7be187a9.png",alt:"create"}})]),s._v(" "),a("h3",{attrs:{id:"开始使用"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#开始使用"}},[s._v("#")]),s._v(" 开始使用")]),s._v(" "),a("p",[s._v("现在我们可以测试一下了。在终端输入:")]),s._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("https_proxy")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://127.0.0.1:1080 "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("http_proxy")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://127.0.0.1:1080 "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("all_proxy")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://127.0.0.1:1080\n")])])]),a("p",[s._v("然后查一下 IP:")]),s._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" cip.cc\n")])])]),a("p",[s._v("如果显示为阿里云 IP,表明代理已经生效。")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/a88026e1cdab45f987c5cc66b6f81034.png",alt:"ip"}})]),s._v(" "),a("p",[s._v("同时服务页面会显示当前对应的延迟、连接数以及流量统计汇总。")]),s._v(" "),a("p",[a("img",{attrs:{src:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/d819adccb751498fa2c3c82bae465024.png",alt:"total"}})])])}),[],!1,null,null,null);a.default=c.exports}}]); \ No newline at end of file diff --git a/assets/js/app.dccc2a9d.js b/assets/js/app.98b08996.js similarity index 93% rename from assets/js/app.dccc2a9d.js rename to assets/js/app.98b08996.js index 99768c3..0d51109 100644 --- a/assets/js/app.dccc2a9d.js +++ b/assets/js/app.98b08996.js @@ -1,4 +1,4 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],c=e[1],u=e[2],f=0,p=[];ffunction t(e,n,r,o=1){if("string"==typeof e)return d(n,e,r);if(Array.isArray(e))return Object.assign(d(n,e[0],r),{title:e[1]});{o>3&&console.error("[vuepress] detected a too deep nested sidebar group.");const i=e.children||[];return 0===i.length&&e.path?Object.assign(d(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:i.map(e=>t(e,n,r,o+1)),collapsable:!1!==e.collapsable}}}(t,o,n)):[]}return[]}function v(t){const e=m(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function m(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function g(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}function y(t){return Object.prototype.toString.call(t).match(/\[object (.*?)\]/)[1].toLowerCase()}function b(t){let e=t.frontmatter.date||t.lastUpdated||new Date,n=new Date(e);return"Invalid Date"==n&&e&&(n=new Date(e.replace(/-/g,"/"))),n.getTime()}function _(t,e){return b(e)-b(t)}},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){var r=n(14),o=n(147),i=n(148),a=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":a&&a in Object(t)?o(t):i(t)}},function(t,e,n){var r=n(6).Symbol;t.exports=r},function(t,e,n){var r=n(3),o=r({}.toString),i=r("".slice);t.exports=function(t){return i(o(t),8,-1)}},function(t,e,n){var r=n(1),o=n(0),i=function(t){return o(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?i(r[t]):r[t]&&r[t][e]}},function(t,e,n){var r=n(5),o=n(18),i=n(29);t.exports=r?function(t,e,n){return o.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(5),o=n(63),i=n(107),a=n(35),s=n(52),c=TypeError,u=Object.defineProperty,l=Object.getOwnPropertyDescriptor;e.f=r?i?function(t,e,n){if(a(t),e=s(e),a(n),"function"==typeof t&&"prototype"===e&&"value"in n&&"writable"in n&&!n.writable){var r=l(t,e);r&&r.writable&&(t[e]=n.value,n={configurable:"configurable"in n?n.configurable:r.configurable,enumerable:"enumerable"in n?n.enumerable:r.enumerable,writable:!1})}return u(t,e,n)}:u:function(t,e,n){if(a(t),e=s(e),a(n),o)try{return u(t,e,n)}catch(t){}if("get"in n||"set"in n)throw c("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(152),o=n(153),i=n(154),a=n(155),s=n(156);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++efunction t(e,n,r,o=1){if("string"==typeof e)return d(n,e,r);if(Array.isArray(e))return Object.assign(d(n,e[0],r),{title:e[1]});{o>3&&console.error("[vuepress] detected a too deep nested sidebar group.");const i=e.children||[];return 0===i.length&&e.path?Object.assign(d(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:i.map(e=>t(e,n,r,o+1)),collapsable:!1!==e.collapsable}}}(t,o,n)):[]}return[]}function v(t){const e=m(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function m(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function g(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}function y(t){return Object.prototype.toString.call(t).match(/\[object (.*?)\]/)[1].toLowerCase()}function b(t){let e=t.frontmatter.date||t.lastUpdated||new Date,n=new Date(e);return"Invalid Date"==n&&e&&(n=new Date(e.replace(/-/g,"/"))),n.getTime()}function _(t,e){return b(e)-b(t)}},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){var r=n(14),o=n(147),i=n(148),a=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":a&&a in Object(t)?o(t):i(t)}},function(t,e,n){var r=n(6).Symbol;t.exports=r},function(t,e,n){var r=n(3),o=r({}.toString),i=r("".slice);t.exports=function(t){return i(o(t),8,-1)}},function(t,e,n){var r=n(1),o=n(0),i=function(t){return o(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?i(r[t]):r[t]&&r[t][e]}},function(t,e,n){var r=n(5),o=n(18),i=n(29);t.exports=r?function(t,e,n){return o.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(5),o=n(63),i=n(107),a=n(35),s=n(52),c=TypeError,u=Object.defineProperty,l=Object.getOwnPropertyDescriptor;e.f=r?i?function(t,e,n){if(a(t),e=s(e),a(n),"function"==typeof t&&"prototype"===e&&"value"in n&&"writable"in n&&!n.writable){var r=l(t,e);r&&r.writable&&(t[e]=n.value,n={configurable:"configurable"in n?n.configurable:r.configurable,enumerable:"enumerable"in n?n.enumerable:r.enumerable,writable:!1})}return u(t,e,n)}:u:function(t,e,n){if(a(t),e=s(e),a(n),o)try{return u(t,e,n)}catch(t){}if("get"in n||"set"in n)throw c("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(152),o=n(153),i=n(154),a=n(155),s=n(156);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e
'};function o(t,e,n){return tn?n:t}function i(t){return 100*(-1+t)}n.configure=function(t){var e,n;for(e in t)void 0!==(n=t[e])&&t.hasOwnProperty(e)&&(r[e]=n);return this},n.status=null,n.set=function(t){var e=n.isStarted();t=o(t,r.minimum,1),n.status=1===t?null:t;var c=n.render(!e),u=c.querySelector(r.barSelector),l=r.speed,f=r.easing;return c.offsetWidth,a((function(e){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,function(t,e,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+i(t)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+i(t)+"%,0)"}:{"margin-left":i(t)+"%"}).transition="all "+e+"ms "+n,o}(t,l,f)),1===t?(s(c,{transition:"none",opacity:1}),c.offsetWidth,setTimeout((function(){s(c,{transition:"all "+l+"ms linear",opacity:0}),setTimeout((function(){n.remove(),e()}),l)}),l)):setTimeout(e,l)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var t=function(){setTimeout((function(){n.status&&(n.trickle(),t())}),r.trickleSpeed)};return r.trickle&&t(),this},n.done=function(t){return t||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(t){var e=n.status;return e?("number"!=typeof t&&(t=(1-e)*o(Math.random()*e,.1,.95)),e=o(e+t,0,.994),n.set(e)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},t=0,e=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===e&&n.start(),t++,e++,r.always((function(){0==--e?(t=0,n.done()):n.set((t-e)/t)})),this):this},n.render=function(t){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var e=document.createElement("div");e.id="nprogress",e.innerHTML=r.template;var o,a=e.querySelector(r.barSelector),c=t?"-100":i(n.status||0),l=document.querySelector(r.parent);return s(a,{transition:"all 0 linear",transform:"translate3d("+c+"%,0,0)"}),r.showSpinner||(o=e.querySelector(r.spinnerSelector))&&p(o),l!=document.body&&u(l,"nprogress-custom-parent"),l.appendChild(e),e},n.remove=function(){l(document.documentElement,"nprogress-busy"),l(document.querySelector(r.parent),"nprogress-custom-parent");var t=document.getElementById("nprogress");t&&p(t)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var t=document.body.style,e="WebkitTransform"in t?"Webkit":"MozTransform"in t?"Moz":"msTransform"in t?"ms":"OTransform"in t?"O":"";return e+"Perspective"in t?"translate3d":e+"Transform"in t?"translate":"margin"};var a=function(){var t=[];function e(){var n=t.shift();n&&n(e)}return function(n){t.push(n),1==t.length&&e()}}(),s=function(){var t=["Webkit","O","Moz","ms"],e={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(t,e){return e.toUpperCase()})),e[n]||(e[n]=function(e){var n=document.body.style;if(e in n)return e;for(var r,o=t.length,i=e.charAt(0).toUpperCase()+e.slice(1);o--;)if((r=t[o]+i)in n)return r;return e}(n))}function r(t,e,r){e=n(e),t.style[e]=r}return function(t,e){var n,o,i=arguments;if(2==i.length)for(n in e)void 0!==(o=e[n])&&e.hasOwnProperty(n)&&r(t,n,o);else r(t,i[1],i[2])}}();function c(t,e){return("string"==typeof t?t:f(t)).indexOf(" "+e+" ")>=0}function u(t,e){var n=f(t),r=n+e;c(n,e)||(t.className=r.substring(1))}function l(t,e){var n,r=f(t);c(t,e)&&(n=r.replace(" "+e+" "," "),t.className=n.substring(1,n.length-1))}function f(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}function p(t){t&&t.parentNode&&t.parentNode.removeChild(t)}return n})?r.call(e,n,e,t):r)||(t.exports=o)},function(t,e,n){"use strict";var r=n(26),o=n(34),i=n(36),a=n(128),s=n(130),c=n(2)((function(){return 4294967297!==[].push.call({length:4294967296},1)})),u=!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(t){return t instanceof TypeError}}();r({target:"Array",proto:!0,arity:1,forced:c||u},{push:function(t){var e=o(this),n=i(e),r=arguments.length;s(n+r);for(var c=0;c-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){var r=n(4),o=n(44),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!o(t))||(a.test(t)||!i.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(13),o=n(12);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},function(t,e){t.exports=function(t){return t}},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e){var n=/^\s+|\s+$/g,r=/^[-+]0x[0-9a-f]+$/i,o=/^0b[01]+$/i,i=/^0o[0-7]+$/i,a=parseInt,s="object"==typeof global&&global&&global.Object===Object&&global,c="object"==typeof self&&self&&self.Object===Object&&self,u=s||c||Function("return this")(),l=Object.prototype.toString,f=Math.max,p=Math.min,d=function(){return u.Date.now()};function h(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function v(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&"[object Symbol]"==l.call(t)}(t))return NaN;if(h(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=h(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(n,"");var s=o.test(t);return s||i.test(t)?a(t.slice(2),s?2:8):r.test(t)?NaN:+t}t.exports=function(t,e,n){var r,o,i,a,s,c,u=0,l=!1,m=!1,g=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function y(e){var n=r,i=o;return r=o=void 0,u=e,a=t.apply(i,n)}function b(t){return u=t,s=setTimeout(x,e),l?y(t):a}function _(t){var n=t-c;return void 0===c||n>=e||n<0||m&&t-u>=i}function x(){var t=d();if(_(t))return w(t);s=setTimeout(x,function(t){var n=e-(t-c);return m?p(n,i-(t-u)):n}(t))}function w(t){return s=void 0,g&&r?y(t):(r=o=void 0,a)}function O(){var t=d(),n=_(t);if(r=arguments,o=this,c=t,n){if(void 0===s)return b(c);if(m)return s=setTimeout(x,e),y(c)}return void 0===s&&(s=setTimeout(x,e)),a}return e=v(e)||0,h(n)&&(l=!!n.leading,i=(m="maxWait"in n)?f(v(n.maxWait)||0,e):i,g="trailing"in n?!!n.trailing:g),O.cancel=function(){void 0!==s&&clearTimeout(s),u=0,r=c=o=s=void 0},O.flush=function(){return void 0===s?a:w(d())},O}},function(t,e,n){var r=n(5),o=n(27),i=n(100),a=n(29),s=n(30),c=n(52),u=n(8),l=n(63),f=Object.getOwnPropertyDescriptor;e.f=r?f:function(t,e){if(t=s(t),e=c(e),l)try{return f(t,e)}catch(t){}if(u(t,e))return a(!o(i.f,t,e),t[e])}},function(t,e,n){var r=n(3),o=n(2),i=n(15),a=Object,s=r("".split);t.exports=o((function(){return!a("z").propertyIsEnumerable(0)}))?function(t){return"String"==i(t)?s(t,""):a(t)}:a},function(t,e,n){var r=n(51),o=TypeError;t.exports=function(t){if(r(t))throw o("Can't call method on "+t);return t}},function(t,e){t.exports=function(t){return null==t}},function(t,e,n){var r=n(101),o=n(54);t.exports=function(t){var e=r(t,"string");return o(e)?e:e+""}},function(t,e){var n="object"==typeof document&&document.all,r=void 0===n&&void 0!==n;t.exports={all:n,IS_HTMLDDA:r}},function(t,e,n){var r=n(16),o=n(0),i=n(55),a=n(56),s=Object;t.exports=a?function(t){return"symbol"==typeof t}:function(t){var e=r("Symbol");return o(e)&&i(e.prototype,s(t))}},function(t,e,n){var r=n(3);t.exports=r({}.isPrototypeOf)},function(t,e,n){var r=n(57);t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,n){var r=n(58),o=n(2);t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},function(t,e,n){var r,o,i=n(1),a=n(102),s=i.process,c=i.Deno,u=s&&s.versions||c&&c.version,l=u&&u.v8;l&&(o=(r=l.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),t.exports=o},function(t,e,n){var r=n(0),o=n(104),i=TypeError;t.exports=function(t){if(r(t))return t;throw i(o(t)+" is not a function")}},function(t,e,n){var r=n(61),o=n(32);(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.25.3",mode:r?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.25.3/LICENSE",source:"https://github.com/zloirock/core-js"})},function(t,e){t.exports=!1},function(t,e,n){var r=n(3),o=0,i=Math.random(),a=r(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+a(++o+i,36)}},function(t,e,n){var r=n(5),o=n(2),i=n(106);t.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(t,e){t.exports={}},function(t,e,n){var r=n(8),o=n(115),i=n(48),a=n(18);t.exports=function(t,e,n){for(var s=o(e),c=a.f,u=i.f,l=0;ll))return!1;var p=c.get(t),d=c.get(e);if(p&&d)return p==e&&d==t;var h=-1,v=!0,m=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++h-1&&t%1==0&&t=0&&Math.floor(e)===e&&isFinite(t)}function v(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||p(t)&&t.toString===f?JSON.stringify(t,null,2):String(t)}function g(t){var e=parseFloat(t);return isNaN(e)?t:e}function y(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(n,1)}}var x=Object.prototype.hasOwnProperty;function w(t,e){return x.call(t,e)}function O(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var C=/-(\w)/g,k=O((function(t){return t.replace(C,(function(t,e){return e?e.toUpperCase():""}))})),S=O((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),E=/\B([A-Z])/g,$=O((function(t){return t.replace(E,"-$1").toLowerCase()}));var j=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function T(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function A(t,e){for(var n in e)t[n]=e[n];return t}function P(t){for(var e={},n=0;n0,Y=G&&G.indexOf("edge/")>0;G&&G.indexOf("android");var Q=G&&/iphone|ipad|ipod|ios/.test(G);G&&/chrome\/\d+/.test(G),G&&/phantomjs/.test(G);var tt,et=G&&G.match(/firefox\/(\d+)/),nt={}.watch,rt=!1;if(Z)try{var ot={};Object.defineProperty(ot,"passive",{get:function(){rt=!0}}),window.addEventListener("test-passive",null,ot)}catch(t){}var it=function(){return void 0===tt&&(tt=!Z&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),tt},at=Z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function st(t){return"function"==typeof t&&/native code/.test(t.toString())}var ct,ut="undefined"!=typeof Symbol&&st(Symbol)&&"undefined"!=typeof Reflect&&st(Reflect.ownKeys);ct="undefined"!=typeof Set&&st(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var lt=null;function ft(t){void 0===t&&(t=null),t||lt&<._scope.off(),lt=t,t&&t._scope.on()}var pt=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),dt=function(t){void 0===t&&(t="");var e=new pt;return e.text=t,e.isComment=!0,e};function ht(t){return new pt(void 0,void 0,void 0,String(t))}function vt(t){var e=new pt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var mt=0,gt=function(){function t(){this.id=mt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){_(this.subs,t)},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){var e=this.subs.slice();for(var n=0,r=e.length;n0&&(Zt((u=t(u,"".concat(n||"","_").concat(r)))[0])&&Zt(f)&&(p[l]=ht(f.text+u[0].text),u.shift()),p.push.apply(p,u)):c(u)?Zt(f)?p[l]=ht(f.text+u):""!==u&&p.push(ht(u)):Zt(u)&&Zt(f)?p[l]=ht(f.text+u.text):(s(e._isVList)&&a(u.tag)&&i(u.key)&&a(n)&&(u.key="__vlist".concat(n,"_").concat(r,"__")),p.push(u)));return p}(t):void 0}function Zt(t){return a(t)&&a(t.text)&&!1===t.isComment}function Gt(t,e){var n,r,i,s,c=null;if(o(t)||"string"==typeof t)for(c=new Array(t.length),n=0,r=t.length;n0,s=e?!!e.$stable:!a,c=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&o&&o!==r&&c===o.$key&&!a&&!o.$hasNormal)return o;for(var u in i={},e)e[u]&&"$"!==u[0]&&(i[u]=he(t,n,u,e[u]))}else i={};for(var l in n)l in i||(i[l]=ve(n,l));return e&&Object.isExtensible(e)&&(e._normalized=i),q(i,"$stable",s),q(i,"$key",c),q(i,"$hasNormal",a),i}function he(t,e,n,r){var i=function(){var e=lt;ft(t);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Kt(n))&&n[0];return ft(e),n&&(!i||1===n.length&&i.isComment&&!pe(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function ve(t,e){return function(){return t[e]}}function me(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};q(e,"_v_attr_proxy",!0),ge(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||ge(t._listenersProxy={},t.$listeners,r,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||be(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:j(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return It(t,e,n)}))}}}function ge(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,ye(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function ye(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function be(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var _e=null;function xe(t,e){return(t.__esModule||ut&&"Module"===t[Symbol.toStringTag])&&(t=t.default),l(t)?e.extend(t):t}function we(t){if(o(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(sn=function(){return cn.now()})}var un=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function ln(){var t,e;for(an=sn(),rn=!0,Qe.sort(un),on=0;onon&&Qe[n].id>t.id;)n--;Qe.splice(n+1,0,t)}else Qe.push(t);nn||(nn=!0,De(ln))}}function pn(t,e){if(t){for(var n=Object.create(null),r=ut?Reflect.ownKeys(t):Object.keys(t),o=0;o-1)if(i&&!w(o,"default"))a=!1;else if(""===a||a===$(t)){var c=Rn(String,o.type);(c<0||s-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!d(t)&&t.test(e)}function Gn(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=a.name;s&&!e(s)&&Jn(n,i,r,o)}}}function Jn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,_(n,e)}qn.prototype._init=function(t){var e=this;e._uid=Vn++,e._isVue=!0,e.__v_skip=!0,e._scope=new Ft(!0),e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=$n(Hn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Ke(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=le(e._renderChildren,o),t.$scopedSlots=n?de(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return Oe(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return Oe(t,e,n,r,o,!0)};var i=n&&n.data;Tt(t,"$attrs",i&&i.attrs||r,null,!0),Tt(t,"$listeners",e._parentListeners||r,null,!0)}(e),Ye(e,"beforeCreate",void 0,!1),function(t){var e=pn(t.$options.inject,t);e&&(St(!1),Object.keys(e).forEach((function(n){Tt(t,n,e[n])})),St(!0))}(e),Dn(e),function(t){var e=t.$options.provide;if(e){var n=u(e)?e.call(t):e;if(!l(n))return;for(var r=Ut(t),o=ut?Reflect.ownKeys(n):Object.keys(n),i=0;i1?T(n):n;for(var r=T(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;iparseInt(this.max)&&Jn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Jn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Gn(t,(function(t){return Zn(e,t)}))})),this.$watch("exclude",(function(e){Gn(t,(function(t){return!Zn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=we(t),n=e&&e.componentOptions;if(n){var r=Kn(n),o=this.include,i=this.exclude;if(o&&(!r||!Zn(o,r))||i&&r&&Zn(i,r))return e;var a=this.cache,s=this.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[c]?(e.componentInstance=a[c].componentInstance,_(s,c),s.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return z}};Object.defineProperty(t,"config",e),t.util={warn:xn,extend:A,mergeOptions:$n,defineReactive:Tt},t.set=At,t.delete=Pt,t.nextTick=De,t.observable=function(t){return jt(t),t},t.options=Object.create(null),F.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,A(t.options.components,Yn),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=T(arguments,1);return n.unshift(this),u(t.install)?t.install.apply(t,n):u(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=$n(this.options,t),this}}(t),Wn(t),function(t){F.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&p(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&u(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(qn),Object.defineProperty(qn.prototype,"$isServer",{get:it}),Object.defineProperty(qn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(qn,"FunctionalRenderContext",{value:dn}),qn.version="2.7.10";var Qn=y("style,class"),tr=y("input,textarea,option,select,progress"),er=y("contenteditable,draggable,spellcheck"),nr=y("events,caret,typing,plaintext-only"),rr=y("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),or="http://www.w3.org/1999/xlink",ir=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},ar=function(t){return ir(t)?t.slice(6,t.length):""},sr=function(t){return null==t||!1===t};function cr(t){for(var e=t.data,n=t,r=t;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=ur(r.data,e));for(;a(n=n.parent);)n&&n.data&&(e=ur(e,n.data));return function(t,e){if(a(t)||a(e))return lr(t,fr(e));return""}(e.staticClass,e.class)}function ur(t,e){return{staticClass:lr(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function lr(t,e){return t?e?t+" "+e:t:e||""}function fr(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?Mr(t,e,n):rr(e)?sr(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):er(e)?t.setAttribute(e,function(t,e){return sr(e)||"false"===e?"false":"contenteditable"===t&&nr(e)?e:"true"}(e,n)):ir(e)?sr(n)?t.removeAttributeNS(or,ar(e)):t.setAttributeNS(or,e,n):Mr(t,e,n)}function Mr(t,e,n){if(sr(n))t.removeAttribute(e);else{if(J&&!X&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Br={create:Lr,update:Lr};function Dr(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=cr(e),c=n._transitionClasses;a(c)&&(s=lr(s,fr(c))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Ir,Nr={create:Dr,update:Dr};function Fr(t,e,n){var r=Ir;return function o(){var i=e.apply(null,arguments);null!==i&&Vr(t,o,n,r)}}var Ur=je&&!(et&&Number(et[1])<=53);function zr(t,e,n,r){if(Ur){var o=an,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Ir.addEventListener(t,e,rt?{capture:n,passive:r}:n)}function Vr(t,e,n,r){(r||Ir).removeEventListener(t,e._wrapper||e,n)}function Hr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Ir=e.elm||t.elm,function(t){if(a(t.__r)){var e=J?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),Ht(n,r,zr,Vr,Fr,e.context),Ir=void 0}}var qr,Wr={create:Hr,update:Hr,destroy:function(t){return Hr(t,wr)}};function Kr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,c=t.data.domProps||{},u=e.data.domProps||{};for(n in(a(u.__ob__)||s(u._v_attr_proxy))&&(u=e.data.domProps=A({},u)),c)n in u||(o[n]="");for(n in u){if(r=u[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===c[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var l=i(r)?"":String(r);Zr(o,l)&&(o.value=l)}else if("innerHTML"===n&&hr(o.tagName)&&i(o.innerHTML)){(qr=qr||document.createElement("div")).innerHTML="".concat(r,"");for(var f=qr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;f.firstChild;)o.appendChild(f.firstChild)}else if(r!==c[n])try{o[n]=r}catch(t){}}}}function Zr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return g(n)!==g(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Gr={create:Kr,update:Kr},Jr=O((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Xr(t){var e=Yr(t.style);return t.staticStyle?A(t.staticStyle,e):e}function Yr(t){return Array.isArray(t)?P(t):"string"==typeof t?Jr(t):t}var Qr,to=/^--/,eo=/\s*!important$/,no=function(t,e,n){if(to.test(e))t.style.setProperty(e,n);else if(eo.test(n))t.style.setProperty($(e),n.replace(eo,""),"important");else{var r=oo(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(so).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function uo(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(so).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function lo(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&A(e,fo(t.name||"v")),A(e,t),e}return"string"==typeof t?fo(t):void 0}}var fo=O((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),po=Z&&!X,ho="transition",vo="transitionend",mo="animation",go="animationend";po&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ho="WebkitTransition",vo="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(mo="WebkitAnimation",go="webkitAnimationEnd"));var yo=Z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function bo(t){yo((function(){yo(t)}))}function _o(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),co(t,e))}function xo(t,e){t._transitionClasses&&_(t._transitionClasses,e),uo(t,e)}function wo(t,e,n){var r=Co(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?vo:go,c=0,u=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++c>=a&&u()};setTimeout((function(){c0&&(n="transition",l=a,f=i.length):"animation"===e?u>0&&(n="animation",l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?"transition":"animation":null)?"transition"===n?i.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:"transition"===n&&Oo.test(r[ho+"Property"])}}function ko(t,e){for(;t.length1}function Ao(t,e){!0!==e.data.show&&Eo(e)}var Po=function(t){var e,n,r={},u=t.modules,l=t.nodeOps;for(e=0;eh?_(t,i(n[g+1])?null:n[g+1].elm,n,d,g,r):d>g&&w(e,f,h)}(f,v,g,n,u):a(g)?(a(t.text)&&l.setTextContent(f,""),_(f,null,g,0,g.length-1,n)):a(v)?w(v,0,v.length-1):a(t.text)&&l.setTextContent(f,""):t.text!==e.text&&l.setTextContent(f,e.text),a(h)&&a(d=h.hook)&&a(d=d.postpatch)&&d(t,e)}}}function S(t,e,n){if(s(n)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(B(Do(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Bo(t,e){return e.every((function(e){return!B(e,t)}))}function Do(t){return"_value"in t?t._value:t.value}function Io(t){t.target.composing=!0}function No(t){t.target.composing&&(t.target.composing=!1,Fo(t.target,"input"))}function Fo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Uo(t){return!t.componentInstance||t.data&&t.data.transition?t:Uo(t.componentInstance._vnode)}var zo={model:Lo,show:{bind:function(t,e,n){var r=e.value,o=(n=Uo(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,Eo(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=Uo(n)).data&&n.data.transition?(n.data.show=!0,r?Eo(n,(function(){t.style.display=t.__vOriginalDisplay})):$o(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},Vo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ho(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Ho(we(e.children)):t}function qo(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[k(r)]=o[r];return e}function Wo(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Ko=function(t){return t.tag||pe(t)},Zo=function(t){return"show"===t.name},Go={name:"transition",props:Vo,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Ko)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=Ho(o);if(!i)return o;if(this._leaving)return Wo(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:c(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=qo(this),u=this._vnode,l=Ho(u);if(i.data.directives&&i.data.directives.some(Zo)&&(i.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,l)&&!pe(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},s);if("out-in"===r)return this._leaving=!0,qt(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Wo(t,o);if("in-out"===r){if(pe(i))return u;var p,d=function(){p()};qt(s,"afterEnter",d),qt(s,"enterCancelled",d),qt(f,"delayLeave",(function(t){p=t}))}}return o}}},Jo=A({tag:String,moveClass:String},Vo);function Xo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Yo(t){t.data.newPos=t.elm.getBoundingClientRect()}function Qo(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Jo.mode;var ti={Transition:Go,TransitionGroup:{props:Jo,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Ge(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=qo(this),s=0;s-1?mr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:mr[t]=/HTMLUnknownElement/.test(e.toString())},A(qn.options.directives,zo),A(qn.options.components,ti),qn.prototype.__patch__=Z?Po:L,qn.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=dt),Ye(t,"beforeMount"),r=function(){t._update(t._render(),n)},new Ve(t,r,L,{before:function(){t._isMounted&&!t._isDestroyed&&Ye(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),u=e&&e.path||"/",l=c.path?xi(c.path,u,n||o.append):u,f=function(t,e,n){void 0===e&&(e={});var r,o=n||ci;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(si):si(a)}return r}(c.query,o.query,r&&r.options.parseQuery),p=o.hash||c.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:l,query:f,hash:p}}var zi,Vi=function(){},Hi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,c={},u=n.options.linkActiveClass,l=n.options.linkExactActiveClass,f=null==u?"router-link-active":u,p=null==l?"router-link-exact-active":l,d=null==this.activeClass?f:this.activeClass,h=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?fi(null,Ui(a.redirectedFrom),null,n):a;c[h]=mi(r,v,this.exactPath),c[d]=this.exact||this.exactPath?c[h]:function(t,e){return 0===t.path.replace(li,"/").indexOf(e.path.replace(li,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var m=c[h]?this.ariaCurrentValue:null,g=function(t){qi(t)&&(e.replace?n.replace(i,Vi):n.push(i,Vi))},y={click:qi};Array.isArray(this.event)?this.event.forEach((function(t){y[t]=g})):y[this.event]=g;var b={class:c},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:g,isActive:c[d],isExactActive:c[h]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?t():t("span",{},_)}if("a"===this.tag)b.on=y,b.attrs={href:s,"aria-current":m};else{var x=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=Fi(l.path,s.params),c(l,s,a)}if(s.path){s.params={};for(var d=0;d-1}function wa(t,e){return xa(t)&&t._isRouter&&(null==e||t.type===e)}function Oa(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function Ca(t){return function(e,n,r){var o=!1,i=0,a=null;ka(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var c,u=$a((function(e){var o;((o=e).__esModule||Ea&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:zi.extend(e),n.components[s]=e,--i<=0&&r()})),l=$a((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=xa(t)?t:new Error(e),r(a))}));try{c=t(u,l)}catch(t){l(t)}if(c)if("function"==typeof c.then)c.then(u,l);else{var f=c.component;f&&"function"==typeof f.then&&f.then(u,l)}}})),o||r()}}function ka(t,e){return Sa(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Sa(t){return Array.prototype.concat.apply([],t)}var Ea="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function $a(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var ja=function(t,e){this.router=t,this.base=function(t){if(!t)if(Wi){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=di,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Ta(t,e,n,r){var o=ka(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=zi.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return Sa(r?o.reverse():o)}function Aa(t,e){if(e)return function(){return t.apply(e,arguments)}}ja.prototype.listen=function(t){this.cb=t},ja.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},ja.prototype.onError=function(t){this.errorCbs.push(t)},ja.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(wa(t,ma.redirected)&&i===di||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},ja.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!wa(t)&&xa(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},c=t.matched.length-1,u=o.matched.length-1;if(mi(t,o)&&c===u&&t.matched[c]===o.matched[u])return this.ensureURL(),t.hash&&oa(this.router,o,t,!1),s(((a=ba(i=o,t,ma.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var l=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=da&&n;r&&this.listeners.push(ra());var o=function(){var n=t.current,o=La(t.base);t.current===di&&o===t._startLocation||t.transitionTo(o,(function(t){r&&oa(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ha(wi(r.base+t.fullPath)),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){va(wi(r.base+t.fullPath)),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(La(this.base)!==this.current.fullPath){var e=wi(this.base+this.current.fullPath);t?ha(e):va(e)}},e.prototype.getCurrentLocation=function(){return La(this.base)},e}(ja);function La(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(wi(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Ra=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=La(t);if(!/^\/#/.test(e))return window.location.replace(wi(t+"/#"+e)),!0}(this.base)||Ma()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=da&&e;n&&this.listeners.push(ra());var r=function(){var e=t.current;Ma()&&t.transitionTo(Ba(),(function(r){n&&oa(t.router,r,e,!0),da||Na(r.fullPath)}))},o=da?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Ia(t.fullPath),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Na(t.fullPath),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ba()!==e&&(t?Ia(e):Na(e))},e.prototype.getCurrentLocation=function(){return Ba()},e}(ja);function Ma(){var t=Ba();return"/"===t.charAt(0)||(Na("/"+t),!1)}function Ba(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Da(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Ia(t){da?ha(Da(t)):window.location.hash=t}function Na(t){da?va(Da(t)):window.location.replace(Da(t))}var Fa=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){wa(t,ma.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(ja),Ua=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Gi(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!da&&!1!==t.fallback,this.fallback&&(e="hash"),Wi||(e="abstract"),this.mode=e,e){case"history":this.history=new Pa(this,t.base);break;case"hash":this.history=new Ra(this,t.base,this.fallback);break;case"abstract":this.history=new Fa(this,t.base);break;default:0}},za={currentRoute:{configurable:!0}};Ua.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},za.currentRoute.get=function(){return this.history&&this.history.current},Ua.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Pa||n instanceof Ra){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;da&&o&&"fullPath"in t&&oa(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Ua.prototype.beforeEach=function(t){return Ha(this.beforeHooks,t)},Ua.prototype.beforeResolve=function(t){return Ha(this.resolveHooks,t)},Ua.prototype.afterEach=function(t){return Ha(this.afterHooks,t)},Ua.prototype.onReady=function(t,e){this.history.onReady(t,e)},Ua.prototype.onError=function(t){this.history.onError(t)},Ua.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Ua.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Ua.prototype.go=function(t){this.history.go(t)},Ua.prototype.back=function(){this.go(-1)},Ua.prototype.forward=function(){this.go(1)},Ua.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Ua.prototype.resolve=function(t,e,n){var r=Ui(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?wi(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Ua.prototype.getRoutes=function(){return this.matcher.getRoutes()},Ua.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==di&&this.history.transitionTo(this.history.getCurrentLocation())},Ua.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==di&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Ua.prototype,za);var Va=Ua;function Ha(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Ua.install=function t(e){if(!t.installed||zi!==e){t.installed=!0,zi=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",bi),e.component("RouterLink",Hi);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Ua.version="3.6.5",Ua.isNavigationFailure=wa,Ua.NavigationFailureType=ma,Ua.START_LOCATION=di,Wi&&window.Vue&&window.Vue.use(Ua);n(99);n(25),n(131);var qa={NotFound:()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,314)),Layout:()=>Promise.all([n.e(0),n.e(2)]).then(n.bind(null,313))},Wa={"v-16b10f50":()=>n.e(5).then(n.bind(null,315)),"v-7b9a7c5a":()=>n.e(6).then(n.bind(null,316)),"v-5b451820":()=>n.e(7).then(n.bind(null,317)),"v-59c36237":()=>n.e(9).then(n.bind(null,318)),"v-06e9c36b":()=>n.e(8).then(n.bind(null,319)),"v-3da3ae5d":()=>n.e(10).then(n.bind(null,320)),"v-9cca47c6":()=>n.e(11).then(n.bind(null,321)),"v-f78db56a":()=>n.e(12).then(n.bind(null,322)),"v-30f6adb4":()=>n.e(13).then(n.bind(null,323)),"v-a4995476":()=>n.e(14).then(n.bind(null,324)),"v-230344b6":()=>n.e(15).then(n.bind(null,325)),"v-4b3c25d2":()=>n.e(16).then(n.bind(null,326)),"v-347360e8":()=>n.e(17).then(n.bind(null,327)),"v-45155516":()=>n.e(18).then(n.bind(null,328)),"v-d340f370":()=>n.e(19).then(n.bind(null,329)),"v-e06ea972":()=>n.e(21).then(n.bind(null,330)),"v-f0f626ba":()=>n.e(20).then(n.bind(null,331)),"v-2c8875ee":()=>n.e(22).then(n.bind(null,332)),"v-12830482":()=>n.e(23).then(n.bind(null,333)),"v-50fec7bc":()=>n.e(24).then(n.bind(null,334)),"v-0061927c":()=>n.e(25).then(n.bind(null,335)),"v-f5c43be8":()=>n.e(26).then(n.bind(null,336))};function Ka(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Za=/-(\w)/g,Ga=Ka(t=>t.replace(Za,(t,e)=>e?e.toUpperCase():"")),Ja=/\B([A-Z])/g,Xa=Ka(t=>t.replace(Ja,"-$1").toLowerCase()),Ya=Ka(t=>t.charAt(0).toUpperCase()+t.slice(1));function Qa(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(Ya(Ga(e))):t(Ya(e))||t(Xa(e))}const ts=Object.assign({},qa,Wa),es=t=>ts[t],ns=t=>Wa[t],rs=t=>qa[t],os=t=>qn.component(t);function is(t){return Qa(ns,t)}function as(t){return Qa(rs,t)}function ss(t){return Qa(es,t)}function cs(t){return Qa(os,t)}function us(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!cs(t)&&ss(t)){const e=await ss(t)();qn.component(t,e.default)}}))}function ls(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var fs=n(92),ps=n.n(fs),ds=n(93),hs=n.n(ds),vs={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${hs()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=gs(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=ys(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return ps()([{name:"description",content:this.$description}],t,this.siteMeta,bs)},updateCanonicalLink(){ms(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",gs(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){ys(null,this.currentMetaTags),ms()}};function ms(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function gs(t=""){return t?``:""}function ys(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function bs(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var _s=n(47),xs={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(_s)()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},ws=n(24),Os=n.n(ws),Cs=[vs,xs,{mounted(){Os.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||qn.component(t.name)||Os.a.start(),n()}),this.$router.afterEach(()=>{Os.a.done(),this.isSidebarOpen=!1})}}],ks={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return ls("layout",t),qn.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},Ss=n(7),Es=Object(Ss.a)(ks,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(Es,"mixins",Cs);const $s=[{name:"v-16b10f50",path:"/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-16b10f50").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-7b9a7c5a",path:"/guide/introduce/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-7b9a7c5a").then(n)}},{path:"/guide/introduce/index.html",redirect:"/guide/introduce/"},{path:"/guide/00.概述/00.introduce.html",redirect:"/guide/introduce/"},{name:"v-5b451820",path:"/guide/structure/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-5b451820").then(n)}},{path:"/guide/structure/index.html",redirect:"/guide/structure/"},{path:"/guide/00.概述/01.structure.html",redirect:"/guide/structure/"},{name:"v-59c36237",path:"/guide/install/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-59c36237").then(n)}},{path:"/guide/install/index.html",redirect:"/guide/install/"},{path:"/guide/01.开始使用/01.install.html",redirect:"/guide/install/"},{name:"v-06e9c36b",path:"/guide/start/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-06e9c36b").then(n)}},{path:"/guide/start/index.html",redirect:"/guide/start/"},{path:"/guide/01.开始使用/00.start.html",redirect:"/guide/start/"},{name:"v-3da3ae5d",path:"/guide/provider/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-3da3ae5d").then(n)}},{path:"/guide/provider/index.html",redirect:"/guide/provider/"},{path:"/guide/01.开始使用/02.provider.html",redirect:"/guide/provider/"},{name:"v-9cca47c6",path:"/guide/func/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-9cca47c6").then(n)}},{path:"/guide/func/index.html",redirect:"/guide/func/"},{path:"/guide/01.开始使用/03.tunnel.html",redirect:"/guide/func/"},{name:"v-f78db56a",path:"/guide/service/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-f78db56a").then(n)}},{path:"/guide/service/index.html",redirect:"/guide/service/"},{path:"/guide/01.开始使用/04.proxy.html",redirect:"/guide/service/"},{name:"v-30f6adb4",path:"/guide/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-30f6adb4").then(n)}},{path:"/guide/index.html",redirect:"/guide/"},{path:"/guide/01.开始使用/",redirect:"/guide/"},{name:"v-a4995476",path:"/guide/paas/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-a4995476").then(n)}},{path:"/guide/paas/index.html",redirect:"/guide/paas/"},{path:"/guide/02.高级进阶/00.paas.html",redirect:"/guide/paas/"},{name:"v-230344b6",path:"/guide/faas/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-230344b6").then(n)}},{path:"/guide/faas/index.html",redirect:"/guide/faas/"},{path:"/guide/02.高级进阶/01.faas.html",redirect:"/guide/faas/"},{name:"v-4b3c25d2",path:"/guide/advance/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-4b3c25d2").then(n)}},{path:"/guide/advance/index.html",redirect:"/guide/advance/"},{path:"/guide/02.高级进阶/",redirect:"/guide/advance/"},{name:"v-347360e8",path:"/guide/client/tor/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-347360e8").then(n)}},{path:"/guide/client/tor/index.html",redirect:"/guide/client/tor/"},{path:"/guide/03.其他客户端支持/01.tor.html",redirect:"/guide/client/tor/"},{name:"v-45155516",path:"/guide/gost/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-45155516").then(n)}},{path:"/guide/gost/index.html",redirect:"/guide/gost/"},{path:"/guide/03.其他客户端支持/02.gost.html",redirect:"/guide/gost/"},{name:"v-d340f370",path:"/guide/v2ray/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-d340f370").then(n)}},{path:"/guide/v2ray/index.html",redirect:"/guide/v2ray/"},{path:"/guide/03.其他客户端支持/03.v2ray.html",redirect:"/guide/v2ray/"},{name:"v-e06ea972",path:"/tech/position/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-e06ea972").then(n)}},{path:"/tech/position/index.html",redirect:"/tech/position/"},{path:"/tech/00.写在前面/00.position.html",redirect:"/tech/position/"},{name:"v-f0f626ba",path:"/guide/support/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-f0f626ba").then(n)}},{path:"/guide/support/index.html",redirect:"/guide/support/"},{path:"/guide/03.其他客户端支持/",redirect:"/guide/support/"},{name:"v-2c8875ee",path:"/tech/feature/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-2c8875ee").then(n)}},{path:"/tech/feature/index.html",redirect:"/tech/feature/"},{path:"/tech/00.写在前面/01.feature.html",redirect:"/tech/feature/"},{name:"v-12830482",path:"/tech/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-12830482").then(n)}},{path:"/tech/index.html",redirect:"/tech/"},{path:"/tech/00.写在前面/",redirect:"/tech/"},{name:"v-50fec7bc",path:"/tech/net/http/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-50fec7bc").then(n)}},{path:"/tech/net/http/index.html",redirect:"/tech/net/http/"},{path:"/tech/01.网络/01.HTTP.html",redirect:"/tech/net/http/"},{name:"v-0061927c",path:"/tech/net/socks5/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-0061927c").then(n)}},{path:"/tech/net/socks5/index.html",redirect:"/tech/net/socks5/"},{path:"/tech/01.网络/02.SOCKS5.html",redirect:"/tech/net/socks5/"},{name:"v-f5c43be8",path:"/tech/net/tor/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-f5c43be8").then(n)}},{path:"/tech/net/tor/index.html",redirect:"/tech/net/tor/"},{path:"/tech/01.网络/03.TOR.html",redirect:"/tech/net/tor/"},{path:"*",component:Es}],js={title:"SeaMoon",description:"月海(Sea Moon) 是一款 FaaS/BaaS 实现的 Serverless 网络工具集,期望利用云原生的优势,实现更简单、更便宜的网络功能。",base:"/",headTags:[["link",{rel:"icon",href:"/img/favicon.ico"}],["meta",{name:"keywords",content:"serverless,proxy,pentest,seamoon"}],["meta",{name:"baidu-site-verification",content:"codeva-vXPumeNBPL"}],["script",{},'\n var _hmt = _hmt || [];\n (function() {\n var hm = document.createElement("script");\n hm.src = "https://hm.baidu.com/hm.js?7dac4248d29ddaacd4b3c0b71d9b2015";\n var s = document.getElementsByTagName("script")[0]; \n s.parentNode.insertBefore(hm, s);\n })();\n <\/script> \n ']],pages:[{title:"Home",frontmatter:{home:!0,heroImage:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/logo.png",heroText:"SeaMoon - 月海",tagline:"🌕 月出于云却隐于海",actionText:"快速上手 →",actionLink:"/guide/introduce/",bannerBg:"none",postList:"none",features:[{title:"🫥 隐匿",details:"基于 FaaS/BaaS 实现动态IP代理,支持Tor网络,云上无痕。"},{title:"🗃️ 集成",details:"适配大量云服务商与知名客户端,拒绝服务绑架。"},{title:"🚀 便携",details:"内置各类 SDK,支持一键部署,可视化多云管控。"}]},regularPath:"/",relativePath:"README.md",key:"v-16b10f50",path:"/"},{title:"简介",frontmatter:{title:"简介",titleTag:"2.0.0",date:"2022-09-28T22:39:36.000Z",permalink:"/guide/introduce",article:!1},regularPath:"/guide/00.%E6%A6%82%E8%BF%B0/00.introduce.html",relativePath:"guide/00.概述/00.introduce.md",key:"v-7b9a7c5a",path:"/guide/introduce/",headers:[{level:2,title:"☁️ 什么是月海",slug:"☁️-什么是月海"},{level:2,title:"🌟 月海能做什么",slug:"🌟-月海能做什么"},{level:2,title:"🧭 支持平台",slug:"🧭-支持平台"},{level:2,title:"🕹开始使用",slug:"🕹开始使用"},{level:2,title:"❗免责声明",slug:"❗免责声明"}]},{title:"项目结构",frontmatter:{title:"项目结构",date:"2022-09-30T00:30:21.000Z",permalink:"/guide/structure",article:!1},regularPath:"/guide/00.%E6%A6%82%E8%BF%B0/01.structure.html",relativePath:"guide/00.概述/01.structure.md",key:"v-5b451820",path:"/guide/structure/",headers:[{level:2,title:"服务端",slug:"服务端"},{level:2,title:"客户端",slug:"客户端"}]},{title:"客户端安装",frontmatter:{title:"客户端安装",date:"2024-04-02T18:42:45.000Z",permalink:"/guide/install/",article:!1},regularPath:"/guide/01.%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/01.install.html",relativePath:"guide/01.开始使用/01.install.md",key:"v-59c36237",path:"/guide/install/",headers:[{level:3,title:"Docker",slug:"docker"},{level:3,title:"Binary",slug:"binary"}]},{title:"快速开始",frontmatter:{title:"快速开始",date:"2022-09-28T00:27:13.000Z",permalink:"/guide/start/",article:!1},regularPath:"/guide/01.%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/00.start.html",relativePath:"guide/01.开始使用/00.start.md",key:"v-06e9c36b",path:"/guide/start/",headers:[{level:3,title:"事前准备",slug:"事前准备"},{level:3,title:"启动服务",slug:"启动服务"},{level:3,title:"修改默认密码",slug:"修改默认密码"},{level:3,title:"配置账户",slug:"配置账户"},{level:3,title:"创建服务",slug:"创建服务"},{level:3,title:"开始使用",slug:"开始使用"}]},{title:"云账户管理",frontmatter:{title:"云账户管理",date:"2024-04-02T18:44:26.000Z",permalink:"/guide/provider/",article:!1},regularPath:"/guide/01.%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/02.provider.html",relativePath:"guide/01.开始使用/02.provider.md",key:"v-3da3ae5d",path:"/guide/provider/",headers:[{level:3,title:"阿里云",slug:"阿里云"},{level:3,title:"腾讯云",slug:"腾讯云"},{level:3,title:"Sealos",slug:"sealos"}]},{title:"函数实例",frontmatter:{title:"函数实例",date:"2024-04-02T18:44:43.000Z",permalink:"/guide/func/",article:!1},regularPath:"/guide/01.%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/03.tunnel.html",relativePath:"guide/01.开始使用/03.tunnel.md",key:"v-9cca47c6",path:"/guide/func/",headers:[{level:3,title:"创建函数实例",slug:"创建函数实例"},{level:3,title:"停用函数实例",slug:"停用函数实例"},{level:3,title:"删除函数实例",slug:"删除函数实例"},{level:3,title:"导入其他客户端",slug:"导入其他客户端"}]},{title:"服务",frontmatter:{title:"服务",date:"2024-04-02T18:44:49.000Z",permalink:"/guide/service/",article:!1},regularPath:"/guide/01.%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/04.proxy.html",relativePath:"guide/01.开始使用/04.proxy.md",key:"v-f78db56a",path:"/guide/service/",headers:[{level:3,title:"创建服务",slug:"创建服务"},{level:3,title:"修改服务",slug:"修改服务"},{level:3,title:"测速",slug:"测速"},{level:3,title:"停止服务",slug:"停止服务"},{level:3,title:"删除服务",slug:"删除服务"}]},{title:"开始使用",frontmatter:{title:"开始使用",date:"2024-04-02T18:47:03.000Z",permalink:"/guide/",article:!1},regularPath:"/guide/01.%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/",relativePath:"guide/01.开始使用/README.md",key:"v-30f6adb4",path:"/guide/"},{title:"PaaS 平台部署",frontmatter:{title:"PaaS 平台部署",date:"2024-04-02T18:40:46.000Z",permalink:"/guide/paas",article:!1},regularPath:"/guide/02.%E9%AB%98%E7%BA%A7%E8%BF%9B%E9%98%B6/00.paas.html",relativePath:"guide/02.高级进阶/00.paas.md",key:"v-a4995476",path:"/guide/paas/",headers:[{level:2,title:"部署到Sealos: 拥抱更便宜、更舒适、更优美可控的云服务平台",slug:"部署到sealos-拥抱更便宜、更舒适、更优美可控的云服务平台"},{level:3,title:"如何部署",slug:"如何部署"},{level:3,title:"效果展示",slug:"效果展示"},{level:2,title:"部署到Render: ~~免费的永远是最好的~~去**的免费的,号没了",slug:"部署到render-免费的永远是最好的去-的免费的-号没了"},{level:3,title:"如何部署",slug:"如何部署-2"},{level:3,title:"测试效果",slug:"测试效果"},{level:3,title:"一些小细节问题",slug:"一些小细节问题"}]},{title:"BaaS/FaaS 手动部署",frontmatter:{title:"BaaS/FaaS 手动部署",date:"2024-04-08T08:25:37.000Z",permalink:"/guide/faas",article:!1},regularPath:"/guide/02.%E9%AB%98%E7%BA%A7%E8%BF%9B%E9%98%B6/01.faas.html",relativePath:"guide/02.高级进阶/01.faas.md",key:"v-230344b6",path:"/guide/faas/",headers:[{level:2,title:"步部署到阿里云",slug:"步部署到阿里云"},{level:3,title:"如何部署",slug:"如何部署"},{level:3,title:"效果展示",slug:"效果展示"},{level:2,title:"叹息的腾讯云",slug:"叹息的腾讯云"},{level:3,title:"如何部署",slug:"如何部署-2"},{level:3,title:"效果展示",slug:"效果展示-2"}]},{title:"高级进阶",frontmatter:{title:"高级进阶",date:"2023-07-18T00:27:13.000Z",permalink:"/guide/advance",article:!1},regularPath:"/guide/02.%E9%AB%98%E7%BA%A7%E8%BF%9B%E9%98%B6/",relativePath:"guide/02.高级进阶/README.md",key:"v-4b3c25d2",path:"/guide/advance/"},{title:"tor",frontmatter:{title:"tor",date:"2022-09-29T23:45:03.000Z",permalink:"/guide/client/tor",article:!1},regularPath:"/guide/03.%E5%85%B6%E4%BB%96%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%94%AF%E6%8C%81/01.tor.html",relativePath:"guide/03.其他客户端支持/01.tor.md",key:"v-347360e8",path:"/guide/client/tor/",headers:[{level:2,title:"🧅 Tor 网络开启",slug:"🧅-tor-网络开启"}]},{title:"gost",frontmatter:{title:"gost",date:"2023-01-26T13:58:21.000Z",permalink:"/guide/gost",article:!1},regularPath:"/guide/03.%E5%85%B6%E4%BB%96%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%94%AF%E6%8C%81/02.gost.html",relativePath:"guide/03.其他客户端支持/02.gost.md",key:"v-45155516",path:"/guide/gost/",headers:[{level:2,title:"GOST - 优雅的 golang 代理",slug:"gost-优雅的-golang-代理"},{level:3,title:"websocket 隧道",slug:"websocket-隧道"},{level:3,title:"grpc 隧道",slug:"grpc-隧道"}]},{title:"v2ray",frontmatter:{title:"v2ray",date:"2024-04-02T17:46:56.000Z",permalink:"/guide/v2ray",article:!1},regularPath:"/guide/03.%E5%85%B6%E4%BB%96%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%94%AF%E6%8C%81/03.v2ray.html",relativePath:"guide/03.其他客户端支持/03.v2ray.md",key:"v-d340f370",path:"/guide/v2ray/"},{title:"月海的定位",frontmatter:{title:"月海的定位",date:"2022-09-30T00:08:14.000Z",permalink:"/tech/position/",article:!1},regularPath:"/tech/00.%E5%86%99%E5%9C%A8%E5%89%8D%E9%9D%A2/00.position.html",relativePath:"tech/00.写在前面/00.position.md",key:"v-e06ea972",path:"/tech/position/",headers:[{level:2,title:"一些想法上的改动",slug:"一些想法上的改动"},{level:2,title:"前言: 为什么要写月海这个工具? (Why Sea Moon)",slug:"前言-为什么要写月海这个工具-why-sea-moon"}]},{title:"其他客户端支持",frontmatter:{title:"其他客户端支持",date:"2023-07-18T23:45:03.000Z",permalink:"/guide/support",article:!1},regularPath:"/guide/03.%E5%85%B6%E4%BB%96%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%94%AF%E6%8C%81/",relativePath:"guide/03.其他客户端支持/README.md",key:"v-f0f626ba",path:"/guide/support/",headers:[{level:2,title:"其他客户端支持",slug:"其他客户端支持"}]},{title:"月海的特性",frontmatter:{title:"月海的特性",date:"2022-09-28T00:27:13.000Z",permalink:"/tech/feature/",article:!1},regularPath:"/tech/00.%E5%86%99%E5%9C%A8%E5%89%8D%E9%9D%A2/01.feature.html",relativePath:"tech/00.写在前面/01.feature.md",key:"v-2c8875ee",path:"/tech/feature/",headers:[{level:2,title:"SeaMoon 1.2.0-beta.2",slug:"seamoon-1-2-0-beta-2"},{level:3,title:"❤️ What's New",slug:"❤️-what-s-new"},{level:3,title:"What's Changed",slug:"what-s-changed"},{level:2,title:"SeaMoon 1.2.0-beta.1",slug:"seamoon-1-2-0-beta-1"},{level:3,title:"❤️ What's New",slug:"❤️-what-s-new-2"},{level:2,title:"SeaMoon 1.1.3",slug:"seamoon-1-1-3"},{level:3,title:"❤️ What's New",slug:"❤️-what-s-new-3"},{level:2,title:"SeaMoon 1.1.2",slug:"seamoon-1-1-2"},{level:3,title:"❤️ What's New",slug:"❤️-what-s-new-4"},{level:2,title:"SeaMoon 1.1.1",slug:"seamoon-1-1-1"},{level:3,title:"❤️ What's New",slug:"❤️-what-s-new-5"},{level:3,title:"🌈 Small Talk",slug:"🌈-small-talk"},{level:2,title:"1.1.0 (2022-09-27)",slug:"_1-1-0-2022-09-27"},{level:3,title:"Bug Fixes",slug:"bug-fixes"},{level:2,title:"1.0.0 (2022-09-09)",slug:"_1-0-0-2022-09-09"},{level:3,title:"Features",slug:"features"},{level:2,title:"SeaMoon 1.1.0",slug:"seamoon-1-1-0"},{level:2,title:"SeaMoon 1.0.0",slug:"seamoon-1-0-0"}]},{title:"SeaMoon-技术分享",frontmatter:{title:"SeaMoon-技术分享",date:"2023-07-21T23:47:06.000Z",permalink:"/tech/",article:!1},regularPath:"/tech/00.%E5%86%99%E5%9C%A8%E5%89%8D%E9%9D%A2/",relativePath:"tech/00.写在前面/README.md",key:"v-12830482",path:"/tech/",headers:[{level:2,title:"SeaMoon 技术Blog",slug:"seamoon-技术blog"},{level:2,title:"📒 参考文献与项目",slug:"📒-参考文献与项目"}]},{title:"HTTP",frontmatter:{title:"HTTP",date:"2022-08-30T19:47:20.000Z",permalink:"/tech/net/http/",article:!1},regularPath:"/tech/01.%E7%BD%91%E7%BB%9C/01.HTTP.html",relativePath:"tech/01.网络/01.HTTP.md",key:"v-50fec7bc",path:"/tech/net/http/",headers:[{level:2,title:"效果",slug:"效果"},{level:2,title:"原理",slug:"原理"},{level:3,title:"HOST 路由问题",slug:"host-路由问题"},{level:3,title:"HTTPS 请求认证问题",slug:"https-请求认证问题"},{level:3,title:"链式代理",slug:"链式代理"},{level:3,title:"底层逻辑问题",slug:"底层逻辑问题"}]},{title:"SOCKS5",frontmatter:{title:"SOCKS5",date:"2022-08-30T19:47:32.000Z",permalink:"/tech/net/socks5/",article:!1},regularPath:"/tech/01.%E7%BD%91%E7%BB%9C/02.SOCKS5.html",relativePath:"tech/01.网络/02.SOCKS5.md",key:"v-0061927c",path:"/tech/net/socks5/",headers:[{level:2,title:"SOCKS5 效果",slug:"socks5-效果"},{level:2,title:"SOCKS5 原理",slug:"socks5-原理"},{level:3,title:"SOCKS5",slug:"socks5-2"}]},{title:"TOR",frontmatter:{title:"TOR",date:"2024-01-29T11:05:23.000Z",permalink:"/tech/net/tor/",article:!1},regularPath:"/tech/01.%E7%BD%91%E7%BB%9C/03.TOR.html",relativePath:"tech/01.网络/03.TOR.md",key:"v-f5c43be8",path:"/tech/net/tor/"}],themeConfig:{defaultMode:"dark",bodyBgImgOpacity:1,nav:[{text:"首页",link:"/"},{text:"使用手册",link:"/guide/introduce/"},{text:"技术博客",link:"/tech/"}],archive:!1,category:!1,tag:!1,updateBar:{showToArticle:!1},sidebar:{"/guide/":[{title:"概述",collapsable:!0,children:[["00.概述/00.introduce.md","简介","/guide/introduce","2.0.0"],["00.概述/01.structure.md","项目结构","/guide/structure"]]},{title:"开始使用",collapsable:!0,children:[["01.开始使用/00.start.md","快速开始","/guide/start/"],["01.开始使用/01.install.md","客户端安装","/guide/install/"],["01.开始使用/02.provider.md","云账户管理","/guide/provider/"],["01.开始使用/03.tunnel.md","函数实例","/guide/func/"],["01.开始使用/04.proxy.md","服务","/guide/service/"]]},{title:"高级进阶",collapsable:!0,children:[["02.高级进阶/00.paas.md","PaaS 平台部署","/guide/paas"],["02.高级进阶/01.faas.md","BaaS/FaaS 手动部署","/guide/faas"]]},{title:"其他客户端支持",collapsable:!0,children:[["03.其他客户端支持/01.tor.md","tor","/guide/client/tor"],["03.其他客户端支持/02.gost.md","gost","/guide/gost"],["03.其他客户端支持/03.v2ray.md","v2ray","/guide/v2ray"]]}],catalogue:{},"/tech/":[{title:"写在前面",collapsable:!0,children:[["00.写在前面/00.position.md","月海的定位","/tech/position/"],["00.写在前面/01.feature.md","月海的特性","/tech/feature/"]]},{title:"网络",collapsable:!0,children:[["01.网络/01.HTTP.md","HTTP","/tech/net/http/"],["01.网络/02.SOCKS5.md","SOCKS5","/tech/net/socks5/"],["01.网络/03.TOR.md","TOR","/tech/net/tor/"]]}]},sidebarOpen:!0,searchMaxSuggestions:10,repo:"Dvkunion/SeaMoon",author:{name:"DVKunion",href:"https://github.com/DVKunion"},social:{icons:[{iconClass:"icon-youjian",title:"发邮件",link:"mailto:dvkunion@gmail.com"},{iconClass:"icon-mao",title:"放一只猫",link:"https://github.com/DVKunion/SeaMoon"},{iconClass:"icon-github",title:"GitHub",link:"https://github.com/Dvkunion"},{iconClass:"icon-weixin",title:"weixin",link:""}]},footer:{createYear:2022,copyrightInfo:"DVKunion | MIT License"},extendFrontmatter:{article:!1}}};var Ts=n(94),As=n(95),Ps=n(11);var Ls={computed:{$filterPosts(){return this.$site.pages.filter(t=>{const{frontmatter:{pageComponent:e,article:n,home:r}}=t;return!(e||!1===n||!0===r)})},$sortPosts(){return(t=this.$filterPosts).sort((t,e)=>{const n=t.frontmatter.sticky,r=e.frontmatter.sticky;return n&&r?n==r?Object(Ps.a)(t,e):n-r:n&&!r?-1:!n&&r?1:Object(Ps.a)(t,e)}),t;var t},$sortPostsByDate(){return(t=this.$filterPosts).sort((t,e)=>Object(Ps.a)(t,e)),t;var t},$groupPosts(){return function(t){const e={},n={};for(let r=0,o=t.length;r{n&&(e[n]||(e[n]=[]),e[n].push(t[r]))}),"array"===Object(Ps.n)(i)&&i.forEach(e=>{e&&(n[e]||(n[e]=[]),n[e].push(t[r]))})}return{categories:e,tags:n}}(this.$sortPosts)},$categoriesAndTags(){return function(t){const e=[],n=[];for(let n in t.categories)e.push({key:n,length:t.categories[n].length});for(let e in t.tags)n.push({key:e,length:t.tags[e].length});return{categories:e,tags:n}}(this.$groupPosts)}}};qn.component(Ts.default),qn.component(As.default);function Rs(t){return t.toString().padStart(2,"0")}n(239);qn.component("Badge",()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,337))),qn.component("CodeGroup",()=>Promise.resolve().then(n.bind(null,95))),qn.component("CodeBlock",()=>Promise.resolve().then(n.bind(null,94)));n(240);var Ms=[({Vue:t,options:e,router:n,siteData:r})=>{r.pages.map(t=>{const{frontmatter:{date:e,author:n}}=t;"string"==typeof e&&"Z"===e.charAt(e.length-1)&&(t.frontmatter.date=function(t){t instanceof Date||(t=new Date(t));return`${t.getUTCFullYear()}-${Rs(t.getUTCMonth()+1)}-${Rs(t.getUTCDate())} ${Rs(t.getUTCHours())}:${Rs(t.getUTCMinutes())}:${Rs(t.getUTCSeconds())}`}(e)),n?t.author=n:r.themeConfig.author&&(t.author=r.themeConfig.author)}),t.mixin(Ls)},{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{}],Bs=[];class Ds extends class{constructor(){this.store=new qn({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){qn.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(Ds.prototype,{getPageAsyncComponent:is,getLayoutAsyncComponent:as,getAsyncComponent:ss,getVueComponent:cs});var Is={install(t){const e=new Ds;t.$vuepress=e,t.prototype.$vuepress=e}};function Ns(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var Fs={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return ls("pageKey",e),qn.component(e)||qn.component(e,is(e)),qn.component(e)?t(e):t("")}},Us={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},zs={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},Vs=(n(241),n(242),Object(Ss.a)(zs,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),Hs={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};qn.config.productionTip=!1,qn.use(Va),qn.use(Is),qn.mixin(function(t,e,n=qn){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!qn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Ns(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Ns(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Ns(t,o)?r(o):Ns(t,n)?r(n):r()}})}(n);const r={};try{await Promise.all(Ms.filter(t=>"function"==typeof t).map(e=>e({Vue:qn,options:r,router:n,siteData:js,isServer:t})))}catch(t){console.error(t)}return{app:new qn(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Bs.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file +var r=Object.freeze({}),o=Array.isArray;function i(t){return null==t}function a(t){return null!=t}function s(t){return!0===t}function c(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function u(t){return"function"==typeof t}function l(t){return null!==t&&"object"==typeof t}var f=Object.prototype.toString;function p(t){return"[object Object]"===f.call(t)}function d(t){return"[object RegExp]"===f.call(t)}function h(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function v(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||p(t)&&t.toString===f?JSON.stringify(t,null,2):String(t)}function g(t){var e=parseFloat(t);return isNaN(e)?t:e}function y(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(n,1)}}var x=Object.prototype.hasOwnProperty;function w(t,e){return x.call(t,e)}function O(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var C=/-(\w)/g,k=O((function(t){return t.replace(C,(function(t,e){return e?e.toUpperCase():""}))})),S=O((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),E=/\B([A-Z])/g,$=O((function(t){return t.replace(E,"-$1").toLowerCase()}));var j=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function T(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function A(t,e){for(var n in e)t[n]=e[n];return t}function P(t){for(var e={},n=0;n0,Y=G&&G.indexOf("edge/")>0;G&&G.indexOf("android");var Q=G&&/iphone|ipad|ipod|ios/.test(G);G&&/chrome\/\d+/.test(G),G&&/phantomjs/.test(G);var tt,et=G&&G.match(/firefox\/(\d+)/),nt={}.watch,rt=!1;if(Z)try{var ot={};Object.defineProperty(ot,"passive",{get:function(){rt=!0}}),window.addEventListener("test-passive",null,ot)}catch(t){}var it=function(){return void 0===tt&&(tt=!Z&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),tt},at=Z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function st(t){return"function"==typeof t&&/native code/.test(t.toString())}var ct,ut="undefined"!=typeof Symbol&&st(Symbol)&&"undefined"!=typeof Reflect&&st(Reflect.ownKeys);ct="undefined"!=typeof Set&&st(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var lt=null;function ft(t){void 0===t&&(t=null),t||lt&<._scope.off(),lt=t,t&&t._scope.on()}var pt=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),dt=function(t){void 0===t&&(t="");var e=new pt;return e.text=t,e.isComment=!0,e};function ht(t){return new pt(void 0,void 0,void 0,String(t))}function vt(t){var e=new pt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var mt=0,gt=function(){function t(){this.id=mt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){_(this.subs,t)},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){var e=this.subs.slice();for(var n=0,r=e.length;n0&&(Zt((u=t(u,"".concat(n||"","_").concat(r)))[0])&&Zt(f)&&(p[l]=ht(f.text+u[0].text),u.shift()),p.push.apply(p,u)):c(u)?Zt(f)?p[l]=ht(f.text+u):""!==u&&p.push(ht(u)):Zt(u)&&Zt(f)?p[l]=ht(f.text+u.text):(s(e._isVList)&&a(u.tag)&&i(u.key)&&a(n)&&(u.key="__vlist".concat(n,"_").concat(r,"__")),p.push(u)));return p}(t):void 0}function Zt(t){return a(t)&&a(t.text)&&!1===t.isComment}function Gt(t,e){var n,r,i,s,c=null;if(o(t)||"string"==typeof t)for(c=new Array(t.length),n=0,r=t.length;n0,s=e?!!e.$stable:!a,c=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&o&&o!==r&&c===o.$key&&!a&&!o.$hasNormal)return o;for(var u in i={},e)e[u]&&"$"!==u[0]&&(i[u]=he(t,n,u,e[u]))}else i={};for(var l in n)l in i||(i[l]=ve(n,l));return e&&Object.isExtensible(e)&&(e._normalized=i),q(i,"$stable",s),q(i,"$key",c),q(i,"$hasNormal",a),i}function he(t,e,n,r){var i=function(){var e=lt;ft(t);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Kt(n))&&n[0];return ft(e),n&&(!i||1===n.length&&i.isComment&&!pe(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function ve(t,e){return function(){return t[e]}}function me(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};q(e,"_v_attr_proxy",!0),ge(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||ge(t._listenersProxy={},t.$listeners,r,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||be(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:j(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return It(t,e,n)}))}}}function ge(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,ye(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function ye(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function be(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var _e=null;function xe(t,e){return(t.__esModule||ut&&"Module"===t[Symbol.toStringTag])&&(t=t.default),l(t)?e.extend(t):t}function we(t){if(o(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(sn=function(){return cn.now()})}var un=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function ln(){var t,e;for(an=sn(),rn=!0,Qe.sort(un),on=0;onon&&Qe[n].id>t.id;)n--;Qe.splice(n+1,0,t)}else Qe.push(t);nn||(nn=!0,De(ln))}}function pn(t,e){if(t){for(var n=Object.create(null),r=ut?Reflect.ownKeys(t):Object.keys(t),o=0;o-1)if(i&&!w(o,"default"))a=!1;else if(""===a||a===$(t)){var c=Rn(String,o.type);(c<0||s-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!d(t)&&t.test(e)}function Gn(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=a.name;s&&!e(s)&&Jn(n,i,r,o)}}}function Jn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,_(n,e)}qn.prototype._init=function(t){var e=this;e._uid=Vn++,e._isVue=!0,e.__v_skip=!0,e._scope=new Ft(!0),e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=$n(Hn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Ke(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=le(e._renderChildren,o),t.$scopedSlots=n?de(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return Oe(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return Oe(t,e,n,r,o,!0)};var i=n&&n.data;Tt(t,"$attrs",i&&i.attrs||r,null,!0),Tt(t,"$listeners",e._parentListeners||r,null,!0)}(e),Ye(e,"beforeCreate",void 0,!1),function(t){var e=pn(t.$options.inject,t);e&&(St(!1),Object.keys(e).forEach((function(n){Tt(t,n,e[n])})),St(!0))}(e),Dn(e),function(t){var e=t.$options.provide;if(e){var n=u(e)?e.call(t):e;if(!l(n))return;for(var r=Ut(t),o=ut?Reflect.ownKeys(n):Object.keys(n),i=0;i1?T(n):n;for(var r=T(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;iparseInt(this.max)&&Jn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Jn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Gn(t,(function(t){return Zn(e,t)}))})),this.$watch("exclude",(function(e){Gn(t,(function(t){return!Zn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=we(t),n=e&&e.componentOptions;if(n){var r=Kn(n),o=this.include,i=this.exclude;if(o&&(!r||!Zn(o,r))||i&&r&&Zn(i,r))return e;var a=this.cache,s=this.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[c]?(e.componentInstance=a[c].componentInstance,_(s,c),s.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return z}};Object.defineProperty(t,"config",e),t.util={warn:xn,extend:A,mergeOptions:$n,defineReactive:Tt},t.set=At,t.delete=Pt,t.nextTick=De,t.observable=function(t){return jt(t),t},t.options=Object.create(null),F.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,A(t.options.components,Yn),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=T(arguments,1);return n.unshift(this),u(t.install)?t.install.apply(t,n):u(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=$n(this.options,t),this}}(t),Wn(t),function(t){F.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&p(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&u(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(qn),Object.defineProperty(qn.prototype,"$isServer",{get:it}),Object.defineProperty(qn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(qn,"FunctionalRenderContext",{value:dn}),qn.version="2.7.10";var Qn=y("style,class"),tr=y("input,textarea,option,select,progress"),er=y("contenteditable,draggable,spellcheck"),nr=y("events,caret,typing,plaintext-only"),rr=y("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),or="http://www.w3.org/1999/xlink",ir=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},ar=function(t){return ir(t)?t.slice(6,t.length):""},sr=function(t){return null==t||!1===t};function cr(t){for(var e=t.data,n=t,r=t;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=ur(r.data,e));for(;a(n=n.parent);)n&&n.data&&(e=ur(e,n.data));return function(t,e){if(a(t)||a(e))return lr(t,fr(e));return""}(e.staticClass,e.class)}function ur(t,e){return{staticClass:lr(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function lr(t,e){return t?e?t+" "+e:t:e||""}function fr(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?Mr(t,e,n):rr(e)?sr(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):er(e)?t.setAttribute(e,function(t,e){return sr(e)||"false"===e?"false":"contenteditable"===t&&nr(e)?e:"true"}(e,n)):ir(e)?sr(n)?t.removeAttributeNS(or,ar(e)):t.setAttributeNS(or,e,n):Mr(t,e,n)}function Mr(t,e,n){if(sr(n))t.removeAttribute(e);else{if(J&&!X&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Br={create:Lr,update:Lr};function Dr(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=cr(e),c=n._transitionClasses;a(c)&&(s=lr(s,fr(c))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Ir,Nr={create:Dr,update:Dr};function Fr(t,e,n){var r=Ir;return function o(){var i=e.apply(null,arguments);null!==i&&Vr(t,o,n,r)}}var Ur=je&&!(et&&Number(et[1])<=53);function zr(t,e,n,r){if(Ur){var o=an,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Ir.addEventListener(t,e,rt?{capture:n,passive:r}:n)}function Vr(t,e,n,r){(r||Ir).removeEventListener(t,e._wrapper||e,n)}function Hr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Ir=e.elm||t.elm,function(t){if(a(t.__r)){var e=J?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),Ht(n,r,zr,Vr,Fr,e.context),Ir=void 0}}var qr,Wr={create:Hr,update:Hr,destroy:function(t){return Hr(t,wr)}};function Kr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,c=t.data.domProps||{},u=e.data.domProps||{};for(n in(a(u.__ob__)||s(u._v_attr_proxy))&&(u=e.data.domProps=A({},u)),c)n in u||(o[n]="");for(n in u){if(r=u[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===c[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var l=i(r)?"":String(r);Zr(o,l)&&(o.value=l)}else if("innerHTML"===n&&hr(o.tagName)&&i(o.innerHTML)){(qr=qr||document.createElement("div")).innerHTML="".concat(r,"");for(var f=qr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;f.firstChild;)o.appendChild(f.firstChild)}else if(r!==c[n])try{o[n]=r}catch(t){}}}}function Zr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return g(n)!==g(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Gr={create:Kr,update:Kr},Jr=O((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Xr(t){var e=Yr(t.style);return t.staticStyle?A(t.staticStyle,e):e}function Yr(t){return Array.isArray(t)?P(t):"string"==typeof t?Jr(t):t}var Qr,to=/^--/,eo=/\s*!important$/,no=function(t,e,n){if(to.test(e))t.style.setProperty(e,n);else if(eo.test(n))t.style.setProperty($(e),n.replace(eo,""),"important");else{var r=oo(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(so).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function uo(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(so).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function lo(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&A(e,fo(t.name||"v")),A(e,t),e}return"string"==typeof t?fo(t):void 0}}var fo=O((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),po=Z&&!X,ho="transition",vo="transitionend",mo="animation",go="animationend";po&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ho="WebkitTransition",vo="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(mo="WebkitAnimation",go="webkitAnimationEnd"));var yo=Z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function bo(t){yo((function(){yo(t)}))}function _o(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),co(t,e))}function xo(t,e){t._transitionClasses&&_(t._transitionClasses,e),uo(t,e)}function wo(t,e,n){var r=Co(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?vo:go,c=0,u=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++c>=a&&u()};setTimeout((function(){c0&&(n="transition",l=a,f=i.length):"animation"===e?u>0&&(n="animation",l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?"transition":"animation":null)?"transition"===n?i.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:"transition"===n&&Oo.test(r[ho+"Property"])}}function ko(t,e){for(;t.length1}function Ao(t,e){!0!==e.data.show&&Eo(e)}var Po=function(t){var e,n,r={},u=t.modules,l=t.nodeOps;for(e=0;eh?_(t,i(n[g+1])?null:n[g+1].elm,n,d,g,r):d>g&&w(e,f,h)}(f,v,g,n,u):a(g)?(a(t.text)&&l.setTextContent(f,""),_(f,null,g,0,g.length-1,n)):a(v)?w(v,0,v.length-1):a(t.text)&&l.setTextContent(f,""):t.text!==e.text&&l.setTextContent(f,e.text),a(h)&&a(d=h.hook)&&a(d=d.postpatch)&&d(t,e)}}}function S(t,e,n){if(s(n)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(B(Do(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Bo(t,e){return e.every((function(e){return!B(e,t)}))}function Do(t){return"_value"in t?t._value:t.value}function Io(t){t.target.composing=!0}function No(t){t.target.composing&&(t.target.composing=!1,Fo(t.target,"input"))}function Fo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Uo(t){return!t.componentInstance||t.data&&t.data.transition?t:Uo(t.componentInstance._vnode)}var zo={model:Lo,show:{bind:function(t,e,n){var r=e.value,o=(n=Uo(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,Eo(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=Uo(n)).data&&n.data.transition?(n.data.show=!0,r?Eo(n,(function(){t.style.display=t.__vOriginalDisplay})):$o(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},Vo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ho(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Ho(we(e.children)):t}function qo(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[k(r)]=o[r];return e}function Wo(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Ko=function(t){return t.tag||pe(t)},Zo=function(t){return"show"===t.name},Go={name:"transition",props:Vo,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Ko)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=Ho(o);if(!i)return o;if(this._leaving)return Wo(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:c(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=qo(this),u=this._vnode,l=Ho(u);if(i.data.directives&&i.data.directives.some(Zo)&&(i.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,l)&&!pe(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},s);if("out-in"===r)return this._leaving=!0,qt(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Wo(t,o);if("in-out"===r){if(pe(i))return u;var p,d=function(){p()};qt(s,"afterEnter",d),qt(s,"enterCancelled",d),qt(f,"delayLeave",(function(t){p=t}))}}return o}}},Jo=A({tag:String,moveClass:String},Vo);function Xo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Yo(t){t.data.newPos=t.elm.getBoundingClientRect()}function Qo(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Jo.mode;var ti={Transition:Go,TransitionGroup:{props:Jo,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Ge(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=qo(this),s=0;s-1?mr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:mr[t]=/HTMLUnknownElement/.test(e.toString())},A(qn.options.directives,zo),A(qn.options.components,ti),qn.prototype.__patch__=Z?Po:L,qn.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=dt),Ye(t,"beforeMount"),r=function(){t._update(t._render(),n)},new Ve(t,r,L,{before:function(){t._isMounted&&!t._isDestroyed&&Ye(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),u=e&&e.path||"/",l=c.path?xi(c.path,u,n||o.append):u,f=function(t,e,n){void 0===e&&(e={});var r,o=n||ci;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(si):si(a)}return r}(c.query,o.query,r&&r.options.parseQuery),p=o.hash||c.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:l,query:f,hash:p}}var zi,Vi=function(){},Hi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,c={},u=n.options.linkActiveClass,l=n.options.linkExactActiveClass,f=null==u?"router-link-active":u,p=null==l?"router-link-exact-active":l,d=null==this.activeClass?f:this.activeClass,h=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?fi(null,Ui(a.redirectedFrom),null,n):a;c[h]=mi(r,v,this.exactPath),c[d]=this.exact||this.exactPath?c[h]:function(t,e){return 0===t.path.replace(li,"/").indexOf(e.path.replace(li,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var m=c[h]?this.ariaCurrentValue:null,g=function(t){qi(t)&&(e.replace?n.replace(i,Vi):n.push(i,Vi))},y={click:qi};Array.isArray(this.event)?this.event.forEach((function(t){y[t]=g})):y[this.event]=g;var b={class:c},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:g,isActive:c[d],isExactActive:c[h]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?t():t("span",{},_)}if("a"===this.tag)b.on=y,b.attrs={href:s,"aria-current":m};else{var x=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=Fi(l.path,s.params),c(l,s,a)}if(s.path){s.params={};for(var d=0;d-1}function wa(t,e){return xa(t)&&t._isRouter&&(null==e||t.type===e)}function Oa(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function Ca(t){return function(e,n,r){var o=!1,i=0,a=null;ka(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var c,u=$a((function(e){var o;((o=e).__esModule||Ea&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:zi.extend(e),n.components[s]=e,--i<=0&&r()})),l=$a((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=xa(t)?t:new Error(e),r(a))}));try{c=t(u,l)}catch(t){l(t)}if(c)if("function"==typeof c.then)c.then(u,l);else{var f=c.component;f&&"function"==typeof f.then&&f.then(u,l)}}})),o||r()}}function ka(t,e){return Sa(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Sa(t){return Array.prototype.concat.apply([],t)}var Ea="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function $a(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var ja=function(t,e){this.router=t,this.base=function(t){if(!t)if(Wi){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=di,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Ta(t,e,n,r){var o=ka(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=zi.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return Sa(r?o.reverse():o)}function Aa(t,e){if(e)return function(){return t.apply(e,arguments)}}ja.prototype.listen=function(t){this.cb=t},ja.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},ja.prototype.onError=function(t){this.errorCbs.push(t)},ja.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(wa(t,ma.redirected)&&i===di||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},ja.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!wa(t)&&xa(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},c=t.matched.length-1,u=o.matched.length-1;if(mi(t,o)&&c===u&&t.matched[c]===o.matched[u])return this.ensureURL(),t.hash&&oa(this.router,o,t,!1),s(((a=ba(i=o,t,ma.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var l=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=da&&n;r&&this.listeners.push(ra());var o=function(){var n=t.current,o=La(t.base);t.current===di&&o===t._startLocation||t.transitionTo(o,(function(t){r&&oa(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ha(wi(r.base+t.fullPath)),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){va(wi(r.base+t.fullPath)),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(La(this.base)!==this.current.fullPath){var e=wi(this.base+this.current.fullPath);t?ha(e):va(e)}},e.prototype.getCurrentLocation=function(){return La(this.base)},e}(ja);function La(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(wi(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Ra=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=La(t);if(!/^\/#/.test(e))return window.location.replace(wi(t+"/#"+e)),!0}(this.base)||Ma()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=da&&e;n&&this.listeners.push(ra());var r=function(){var e=t.current;Ma()&&t.transitionTo(Ba(),(function(r){n&&oa(t.router,r,e,!0),da||Na(r.fullPath)}))},o=da?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Ia(t.fullPath),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Na(t.fullPath),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ba()!==e&&(t?Ia(e):Na(e))},e.prototype.getCurrentLocation=function(){return Ba()},e}(ja);function Ma(){var t=Ba();return"/"===t.charAt(0)||(Na("/"+t),!1)}function Ba(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Da(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Ia(t){da?ha(Da(t)):window.location.hash=t}function Na(t){da?va(Da(t)):window.location.replace(Da(t))}var Fa=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){wa(t,ma.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(ja),Ua=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Gi(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!da&&!1!==t.fallback,this.fallback&&(e="hash"),Wi||(e="abstract"),this.mode=e,e){case"history":this.history=new Pa(this,t.base);break;case"hash":this.history=new Ra(this,t.base,this.fallback);break;case"abstract":this.history=new Fa(this,t.base);break;default:0}},za={currentRoute:{configurable:!0}};Ua.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},za.currentRoute.get=function(){return this.history&&this.history.current},Ua.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Pa||n instanceof Ra){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;da&&o&&"fullPath"in t&&oa(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Ua.prototype.beforeEach=function(t){return Ha(this.beforeHooks,t)},Ua.prototype.beforeResolve=function(t){return Ha(this.resolveHooks,t)},Ua.prototype.afterEach=function(t){return Ha(this.afterHooks,t)},Ua.prototype.onReady=function(t,e){this.history.onReady(t,e)},Ua.prototype.onError=function(t){this.history.onError(t)},Ua.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Ua.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Ua.prototype.go=function(t){this.history.go(t)},Ua.prototype.back=function(){this.go(-1)},Ua.prototype.forward=function(){this.go(1)},Ua.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Ua.prototype.resolve=function(t,e,n){var r=Ui(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?wi(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Ua.prototype.getRoutes=function(){return this.matcher.getRoutes()},Ua.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==di&&this.history.transitionTo(this.history.getCurrentLocation())},Ua.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==di&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Ua.prototype,za);var Va=Ua;function Ha(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Ua.install=function t(e){if(!t.installed||zi!==e){t.installed=!0,zi=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",bi),e.component("RouterLink",Hi);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Ua.version="3.6.5",Ua.isNavigationFailure=wa,Ua.NavigationFailureType=ma,Ua.START_LOCATION=di,Wi&&window.Vue&&window.Vue.use(Ua);n(99);n(25),n(131);var qa={NotFound:()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,314)),Layout:()=>Promise.all([n.e(0),n.e(2)]).then(n.bind(null,313))},Wa={"v-16b10f50":()=>n.e(5).then(n.bind(null,315)),"v-5b451820":()=>n.e(7).then(n.bind(null,316)),"v-06e9c36b":()=>n.e(8).then(n.bind(null,317)),"v-59c36237":()=>n.e(9).then(n.bind(null,318)),"v-7b9a7c5a":()=>n.e(6).then(n.bind(null,319)),"v-3da3ae5d":()=>n.e(10).then(n.bind(null,320)),"v-f78db56a":()=>n.e(12).then(n.bind(null,321)),"v-9cca47c6":()=>n.e(11).then(n.bind(null,322)),"v-30f6adb4":()=>n.e(13).then(n.bind(null,323)),"v-a4995476":()=>n.e(14).then(n.bind(null,324)),"v-230344b6":()=>n.e(15).then(n.bind(null,325)),"v-347360e8":()=>n.e(17).then(n.bind(null,326)),"v-45155516":()=>n.e(18).then(n.bind(null,327)),"v-d340f370":()=>n.e(19).then(n.bind(null,328)),"v-4b3c25d2":()=>n.e(16).then(n.bind(null,329)),"v-f0f626ba":()=>n.e(20).then(n.bind(null,330)),"v-e06ea972":()=>n.e(21).then(n.bind(null,331)),"v-2c8875ee":()=>n.e(22).then(n.bind(null,332)),"v-50fec7bc":()=>n.e(24).then(n.bind(null,333)),"v-12830482":()=>n.e(23).then(n.bind(null,334)),"v-0061927c":()=>n.e(25).then(n.bind(null,335)),"v-f5c43be8":()=>n.e(26).then(n.bind(null,336))};function Ka(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Za=/-(\w)/g,Ga=Ka(t=>t.replace(Za,(t,e)=>e?e.toUpperCase():"")),Ja=/\B([A-Z])/g,Xa=Ka(t=>t.replace(Ja,"-$1").toLowerCase()),Ya=Ka(t=>t.charAt(0).toUpperCase()+t.slice(1));function Qa(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(Ya(Ga(e))):t(Ya(e))||t(Xa(e))}const ts=Object.assign({},qa,Wa),es=t=>ts[t],ns=t=>Wa[t],rs=t=>qa[t],os=t=>qn.component(t);function is(t){return Qa(ns,t)}function as(t){return Qa(rs,t)}function ss(t){return Qa(es,t)}function cs(t){return Qa(os,t)}function us(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!cs(t)&&ss(t)){const e=await ss(t)();qn.component(t,e.default)}}))}function ls(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var fs=n(92),ps=n.n(fs),ds=n(93),hs=n.n(ds),vs={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${hs()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=gs(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=ys(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return ps()([{name:"description",content:this.$description}],t,this.siteMeta,bs)},updateCanonicalLink(){ms(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",gs(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){ys(null,this.currentMetaTags),ms()}};function ms(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function gs(t=""){return t?``:""}function ys(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function bs(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var _s=n(47),xs={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(_s)()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},ws=n(24),Os=n.n(ws),Cs=[vs,xs,{mounted(){Os.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||qn.component(t.name)||Os.a.start(),n()}),this.$router.afterEach(()=>{Os.a.done(),this.isSidebarOpen=!1})}}],ks={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return ls("layout",t),qn.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},Ss=n(7),Es=Object(Ss.a)(ks,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(Es,"mixins",Cs);const $s=[{name:"v-16b10f50",path:"/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-16b10f50").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-5b451820",path:"/guide/structure/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-5b451820").then(n)}},{path:"/guide/structure/index.html",redirect:"/guide/structure/"},{path:"/guide/00.概述/01.structure.html",redirect:"/guide/structure/"},{name:"v-06e9c36b",path:"/guide/start/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-06e9c36b").then(n)}},{path:"/guide/start/index.html",redirect:"/guide/start/"},{path:"/guide/01.开始使用/00.start.html",redirect:"/guide/start/"},{name:"v-59c36237",path:"/guide/install/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-59c36237").then(n)}},{path:"/guide/install/index.html",redirect:"/guide/install/"},{path:"/guide/01.开始使用/01.install.html",redirect:"/guide/install/"},{name:"v-7b9a7c5a",path:"/guide/introduce/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-7b9a7c5a").then(n)}},{path:"/guide/introduce/index.html",redirect:"/guide/introduce/"},{path:"/guide/00.概述/00.introduce.html",redirect:"/guide/introduce/"},{name:"v-3da3ae5d",path:"/guide/provider/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-3da3ae5d").then(n)}},{path:"/guide/provider/index.html",redirect:"/guide/provider/"},{path:"/guide/01.开始使用/02.provider.html",redirect:"/guide/provider/"},{name:"v-f78db56a",path:"/guide/service/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-f78db56a").then(n)}},{path:"/guide/service/index.html",redirect:"/guide/service/"},{path:"/guide/01.开始使用/04.proxy.html",redirect:"/guide/service/"},{name:"v-9cca47c6",path:"/guide/func/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-9cca47c6").then(n)}},{path:"/guide/func/index.html",redirect:"/guide/func/"},{path:"/guide/01.开始使用/03.tunnel.html",redirect:"/guide/func/"},{name:"v-30f6adb4",path:"/guide/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-30f6adb4").then(n)}},{path:"/guide/index.html",redirect:"/guide/"},{path:"/guide/01.开始使用/",redirect:"/guide/"},{name:"v-a4995476",path:"/guide/paas/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-a4995476").then(n)}},{path:"/guide/paas/index.html",redirect:"/guide/paas/"},{path:"/guide/02.高级进阶/00.paas.html",redirect:"/guide/paas/"},{name:"v-230344b6",path:"/guide/faas/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-230344b6").then(n)}},{path:"/guide/faas/index.html",redirect:"/guide/faas/"},{path:"/guide/02.高级进阶/01.faas.html",redirect:"/guide/faas/"},{name:"v-347360e8",path:"/guide/client/tor/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-347360e8").then(n)}},{path:"/guide/client/tor/index.html",redirect:"/guide/client/tor/"},{path:"/guide/03.其他客户端支持/01.tor.html",redirect:"/guide/client/tor/"},{name:"v-45155516",path:"/guide/gost/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-45155516").then(n)}},{path:"/guide/gost/index.html",redirect:"/guide/gost/"},{path:"/guide/03.其他客户端支持/02.gost.html",redirect:"/guide/gost/"},{name:"v-d340f370",path:"/guide/v2ray/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-d340f370").then(n)}},{path:"/guide/v2ray/index.html",redirect:"/guide/v2ray/"},{path:"/guide/03.其他客户端支持/03.v2ray.html",redirect:"/guide/v2ray/"},{name:"v-4b3c25d2",path:"/guide/advance/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-4b3c25d2").then(n)}},{path:"/guide/advance/index.html",redirect:"/guide/advance/"},{path:"/guide/02.高级进阶/",redirect:"/guide/advance/"},{name:"v-f0f626ba",path:"/guide/support/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-f0f626ba").then(n)}},{path:"/guide/support/index.html",redirect:"/guide/support/"},{path:"/guide/03.其他客户端支持/",redirect:"/guide/support/"},{name:"v-e06ea972",path:"/tech/position/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-e06ea972").then(n)}},{path:"/tech/position/index.html",redirect:"/tech/position/"},{path:"/tech/00.写在前面/00.position.html",redirect:"/tech/position/"},{name:"v-2c8875ee",path:"/tech/feature/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-2c8875ee").then(n)}},{path:"/tech/feature/index.html",redirect:"/tech/feature/"},{path:"/tech/00.写在前面/01.feature.html",redirect:"/tech/feature/"},{name:"v-50fec7bc",path:"/tech/net/http/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-50fec7bc").then(n)}},{path:"/tech/net/http/index.html",redirect:"/tech/net/http/"},{path:"/tech/01.网络/01.HTTP.html",redirect:"/tech/net/http/"},{name:"v-12830482",path:"/tech/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-12830482").then(n)}},{path:"/tech/index.html",redirect:"/tech/"},{path:"/tech/00.写在前面/",redirect:"/tech/"},{name:"v-0061927c",path:"/tech/net/socks5/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-0061927c").then(n)}},{path:"/tech/net/socks5/index.html",redirect:"/tech/net/socks5/"},{path:"/tech/01.网络/02.SOCKS5.html",redirect:"/tech/net/socks5/"},{name:"v-f5c43be8",path:"/tech/net/tor/",component:Es,beforeEnter:(t,e,n)=>{us("Layout","v-f5c43be8").then(n)}},{path:"/tech/net/tor/index.html",redirect:"/tech/net/tor/"},{path:"/tech/01.网络/03.TOR.html",redirect:"/tech/net/tor/"},{path:"*",component:Es}],js={title:"SeaMoon",description:"月海(Sea Moon) 是一款 FaaS/BaaS 实现的 Serverless 网络工具集,期望利用云原生的优势,实现更简单、更便宜的网络功能。",base:"/",headTags:[["link",{rel:"icon",href:"/img/favicon.ico"}],["meta",{name:"keywords",content:"serverless,proxy,pentest,seamoon"}],["meta",{name:"baidu-site-verification",content:"codeva-vXPumeNBPL"}],["script",{},'\n var _hmt = _hmt || [];\n (function() {\n var hm = document.createElement("script");\n hm.src = "https://hm.baidu.com/hm.js?7dac4248d29ddaacd4b3c0b71d9b2015";\n var s = document.getElementsByTagName("script")[0]; \n s.parentNode.insertBefore(hm, s);\n })();\n <\/script> \n ']],pages:[{title:"Home",frontmatter:{home:!0,heroImage:"https://seamoon.oss-cn-hangzhou.aliyuncs.com/logo.png",heroText:"SeaMoon - 月海",tagline:"🌕 月出于云却隐于海",actionText:"快速上手 →",actionLink:"/guide/introduce/",bannerBg:"none",postList:"none",features:[{title:"🫥 隐匿",details:"基于 FaaS/BaaS 实现动态IP代理,支持Tor网络,云上无痕。"},{title:"🗃️ 集成",details:"适配大量云服务商与知名客户端,拒绝服务绑架。"},{title:"🚀 便携",details:"内置各类 SDK,支持一键部署,可视化多云管控。"}]},regularPath:"/",relativePath:"README.md",key:"v-16b10f50",path:"/"},{title:"项目结构",frontmatter:{title:"项目结构",date:"2022-09-30T00:30:21.000Z",permalink:"/guide/structure",article:!1},regularPath:"/guide/00.%E6%A6%82%E8%BF%B0/01.structure.html",relativePath:"guide/00.概述/01.structure.md",key:"v-5b451820",path:"/guide/structure/",headers:[{level:2,title:"服务端",slug:"服务端"},{level:2,title:"客户端",slug:"客户端"}]},{title:"快速开始",frontmatter:{title:"快速开始",date:"2022-09-28T00:27:13.000Z",permalink:"/guide/start/",article:!1},regularPath:"/guide/01.%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/00.start.html",relativePath:"guide/01.开始使用/00.start.md",key:"v-06e9c36b",path:"/guide/start/",headers:[{level:3,title:"事前准备",slug:"事前准备"},{level:3,title:"启动服务",slug:"启动服务"},{level:3,title:"修改默认密码",slug:"修改默认密码"},{level:3,title:"配置账户",slug:"配置账户"},{level:3,title:"创建服务",slug:"创建服务"},{level:3,title:"开始使用",slug:"开始使用"}]},{title:"客户端安装",frontmatter:{title:"客户端安装",date:"2024-04-02T18:42:45.000Z",permalink:"/guide/install/",article:!1},regularPath:"/guide/01.%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/01.install.html",relativePath:"guide/01.开始使用/01.install.md",key:"v-59c36237",path:"/guide/install/",headers:[{level:3,title:"Docker",slug:"docker"},{level:3,title:"Binary",slug:"binary"}]},{title:"简介",frontmatter:{title:"简介",titleTag:"2.0.0",date:"2022-09-28T22:39:36.000Z",permalink:"/guide/introduce",article:!1},regularPath:"/guide/00.%E6%A6%82%E8%BF%B0/00.introduce.html",relativePath:"guide/00.概述/00.introduce.md",key:"v-7b9a7c5a",path:"/guide/introduce/",headers:[{level:2,title:"☁️ 什么是月海",slug:"☁️-什么是月海"},{level:2,title:"🌟 月海能做什么",slug:"🌟-月海能做什么"},{level:2,title:"🧭 支持平台",slug:"🧭-支持平台"},{level:2,title:"🕹开始使用",slug:"🕹开始使用"},{level:2,title:"❗免责声明",slug:"❗免责声明"}]},{title:"云账户管理",frontmatter:{title:"云账户管理",date:"2024-04-02T18:44:26.000Z",permalink:"/guide/provider/",article:!1},regularPath:"/guide/01.%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/02.provider.html",relativePath:"guide/01.开始使用/02.provider.md",key:"v-3da3ae5d",path:"/guide/provider/",headers:[{level:3,title:"阿里云",slug:"阿里云"},{level:3,title:"腾讯云",slug:"腾讯云"},{level:3,title:"Sealos",slug:"sealos"}]},{title:"服务",frontmatter:{title:"服务",date:"2024-04-02T18:44:49.000Z",permalink:"/guide/service/",article:!1},regularPath:"/guide/01.%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/04.proxy.html",relativePath:"guide/01.开始使用/04.proxy.md",key:"v-f78db56a",path:"/guide/service/",headers:[{level:3,title:"创建服务",slug:"创建服务"},{level:3,title:"修改服务",slug:"修改服务"},{level:3,title:"测速",slug:"测速"},{level:3,title:"停止服务",slug:"停止服务"},{level:3,title:"删除服务",slug:"删除服务"}]},{title:"函数实例",frontmatter:{title:"函数实例",date:"2024-04-02T18:44:43.000Z",permalink:"/guide/func/",article:!1},regularPath:"/guide/01.%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/03.tunnel.html",relativePath:"guide/01.开始使用/03.tunnel.md",key:"v-9cca47c6",path:"/guide/func/",headers:[{level:3,title:"创建函数实例",slug:"创建函数实例"},{level:3,title:"停用函数实例",slug:"停用函数实例"},{level:3,title:"删除函数实例",slug:"删除函数实例"},{level:3,title:"导入其他客户端",slug:"导入其他客户端"}]},{title:"开始使用",frontmatter:{title:"开始使用",date:"2024-04-02T18:47:03.000Z",permalink:"/guide/",article:!1},regularPath:"/guide/01.%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8/",relativePath:"guide/01.开始使用/README.md",key:"v-30f6adb4",path:"/guide/"},{title:"PaaS 平台部署",frontmatter:{title:"PaaS 平台部署",date:"2024-04-02T18:40:46.000Z",permalink:"/guide/paas",article:!1},regularPath:"/guide/02.%E9%AB%98%E7%BA%A7%E8%BF%9B%E9%98%B6/00.paas.html",relativePath:"guide/02.高级进阶/00.paas.md",key:"v-a4995476",path:"/guide/paas/",headers:[{level:2,title:"部署到Sealos: 拥抱更便宜、更舒适、更优美可控的云服务平台",slug:"部署到sealos-拥抱更便宜、更舒适、更优美可控的云服务平台"},{level:3,title:"如何部署",slug:"如何部署"},{level:3,title:"效果展示",slug:"效果展示"},{level:2,title:"部署到Render: ~~免费的永远是最好的~~去**的免费的,号没了",slug:"部署到render-免费的永远是最好的去-的免费的-号没了"},{level:3,title:"如何部署",slug:"如何部署-2"},{level:3,title:"测试效果",slug:"测试效果"},{level:3,title:"一些小细节问题",slug:"一些小细节问题"}]},{title:"BaaS/FaaS 手动部署",frontmatter:{title:"BaaS/FaaS 手动部署",date:"2024-04-08T08:25:37.000Z",permalink:"/guide/faas",article:!1},regularPath:"/guide/02.%E9%AB%98%E7%BA%A7%E8%BF%9B%E9%98%B6/01.faas.html",relativePath:"guide/02.高级进阶/01.faas.md",key:"v-230344b6",path:"/guide/faas/",headers:[{level:2,title:"步部署到阿里云",slug:"步部署到阿里云"},{level:3,title:"如何部署",slug:"如何部署"},{level:3,title:"效果展示",slug:"效果展示"},{level:2,title:"叹息的腾讯云",slug:"叹息的腾讯云"},{level:3,title:"如何部署",slug:"如何部署-2"},{level:3,title:"效果展示",slug:"效果展示-2"}]},{title:"tor",frontmatter:{title:"tor",date:"2022-09-29T23:45:03.000Z",permalink:"/guide/client/tor",article:!1},regularPath:"/guide/03.%E5%85%B6%E4%BB%96%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%94%AF%E6%8C%81/01.tor.html",relativePath:"guide/03.其他客户端支持/01.tor.md",key:"v-347360e8",path:"/guide/client/tor/",headers:[{level:2,title:"🧅 Tor 网络开启",slug:"🧅-tor-网络开启"}]},{title:"gost",frontmatter:{title:"gost",date:"2023-01-26T13:58:21.000Z",permalink:"/guide/gost",article:!1},regularPath:"/guide/03.%E5%85%B6%E4%BB%96%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%94%AF%E6%8C%81/02.gost.html",relativePath:"guide/03.其他客户端支持/02.gost.md",key:"v-45155516",path:"/guide/gost/",headers:[{level:2,title:"GOST - 优雅的 golang 代理",slug:"gost-优雅的-golang-代理"},{level:3,title:"websocket 隧道",slug:"websocket-隧道"},{level:3,title:"grpc 隧道",slug:"grpc-隧道"}]},{title:"v2ray",frontmatter:{title:"v2ray",date:"2024-04-02T17:46:56.000Z",permalink:"/guide/v2ray",article:!1},regularPath:"/guide/03.%E5%85%B6%E4%BB%96%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%94%AF%E6%8C%81/03.v2ray.html",relativePath:"guide/03.其他客户端支持/03.v2ray.md",key:"v-d340f370",path:"/guide/v2ray/"},{title:"高级进阶",frontmatter:{title:"高级进阶",date:"2023-07-18T00:27:13.000Z",permalink:"/guide/advance",article:!1},regularPath:"/guide/02.%E9%AB%98%E7%BA%A7%E8%BF%9B%E9%98%B6/",relativePath:"guide/02.高级进阶/README.md",key:"v-4b3c25d2",path:"/guide/advance/"},{title:"其他客户端支持",frontmatter:{title:"其他客户端支持",date:"2023-07-18T23:45:03.000Z",permalink:"/guide/support",article:!1},regularPath:"/guide/03.%E5%85%B6%E4%BB%96%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%94%AF%E6%8C%81/",relativePath:"guide/03.其他客户端支持/README.md",key:"v-f0f626ba",path:"/guide/support/",headers:[{level:2,title:"其他客户端支持",slug:"其他客户端支持"}]},{title:"月海的定位",frontmatter:{title:"月海的定位",date:"2022-09-30T00:08:14.000Z",permalink:"/tech/position/",article:!1},regularPath:"/tech/00.%E5%86%99%E5%9C%A8%E5%89%8D%E9%9D%A2/00.position.html",relativePath:"tech/00.写在前面/00.position.md",key:"v-e06ea972",path:"/tech/position/",headers:[{level:2,title:"一些想法上的改动",slug:"一些想法上的改动"},{level:2,title:"前言: 为什么要写月海这个工具? (Why Sea Moon)",slug:"前言-为什么要写月海这个工具-why-sea-moon"}]},{title:"月海的特性",frontmatter:{title:"月海的特性",date:"2022-09-28T00:27:13.000Z",permalink:"/tech/feature/",article:!1},regularPath:"/tech/00.%E5%86%99%E5%9C%A8%E5%89%8D%E9%9D%A2/01.feature.html",relativePath:"tech/00.写在前面/01.feature.md",key:"v-2c8875ee",path:"/tech/feature/",headers:[{level:2,title:"SeaMoon 1.2.0-beta.2",slug:"seamoon-1-2-0-beta-2"},{level:3,title:"❤️ What's New",slug:"❤️-what-s-new"},{level:3,title:"What's Changed",slug:"what-s-changed"},{level:2,title:"SeaMoon 1.2.0-beta.1",slug:"seamoon-1-2-0-beta-1"},{level:3,title:"❤️ What's New",slug:"❤️-what-s-new-2"},{level:2,title:"SeaMoon 1.1.3",slug:"seamoon-1-1-3"},{level:3,title:"❤️ What's New",slug:"❤️-what-s-new-3"},{level:2,title:"SeaMoon 1.1.2",slug:"seamoon-1-1-2"},{level:3,title:"❤️ What's New",slug:"❤️-what-s-new-4"},{level:2,title:"SeaMoon 1.1.1",slug:"seamoon-1-1-1"},{level:3,title:"❤️ What's New",slug:"❤️-what-s-new-5"},{level:3,title:"🌈 Small Talk",slug:"🌈-small-talk"},{level:2,title:"1.1.0 (2022-09-27)",slug:"_1-1-0-2022-09-27"},{level:3,title:"Bug Fixes",slug:"bug-fixes"},{level:2,title:"1.0.0 (2022-09-09)",slug:"_1-0-0-2022-09-09"},{level:3,title:"Features",slug:"features"},{level:2,title:"SeaMoon 1.1.0",slug:"seamoon-1-1-0"},{level:2,title:"SeaMoon 1.0.0",slug:"seamoon-1-0-0"}]},{title:"HTTP",frontmatter:{title:"HTTP",date:"2022-08-30T19:47:20.000Z",permalink:"/tech/net/http/",article:!1},regularPath:"/tech/01.%E7%BD%91%E7%BB%9C/01.HTTP.html",relativePath:"tech/01.网络/01.HTTP.md",key:"v-50fec7bc",path:"/tech/net/http/",headers:[{level:2,title:"效果",slug:"效果"},{level:2,title:"原理",slug:"原理"},{level:3,title:"HOST 路由问题",slug:"host-路由问题"},{level:3,title:"HTTPS 请求认证问题",slug:"https-请求认证问题"},{level:3,title:"链式代理",slug:"链式代理"},{level:3,title:"底层逻辑问题",slug:"底层逻辑问题"}]},{title:"SeaMoon-技术分享",frontmatter:{title:"SeaMoon-技术分享",date:"2023-07-21T23:47:06.000Z",permalink:"/tech/",article:!1},regularPath:"/tech/00.%E5%86%99%E5%9C%A8%E5%89%8D%E9%9D%A2/",relativePath:"tech/00.写在前面/README.md",key:"v-12830482",path:"/tech/",headers:[{level:2,title:"SeaMoon 技术Blog",slug:"seamoon-技术blog"},{level:2,title:"📒 参考文献与项目",slug:"📒-参考文献与项目"}]},{title:"SOCKS5",frontmatter:{title:"SOCKS5",date:"2022-08-30T19:47:32.000Z",permalink:"/tech/net/socks5/",article:!1},regularPath:"/tech/01.%E7%BD%91%E7%BB%9C/02.SOCKS5.html",relativePath:"tech/01.网络/02.SOCKS5.md",key:"v-0061927c",path:"/tech/net/socks5/",headers:[{level:2,title:"SOCKS5 效果",slug:"socks5-效果"},{level:2,title:"SOCKS5 原理",slug:"socks5-原理"},{level:3,title:"SOCKS5",slug:"socks5-2"}]},{title:"TOR",frontmatter:{title:"TOR",date:"2024-01-29T11:05:23.000Z",permalink:"/tech/net/tor/",article:!1},regularPath:"/tech/01.%E7%BD%91%E7%BB%9C/03.TOR.html",relativePath:"tech/01.网络/03.TOR.md",key:"v-f5c43be8",path:"/tech/net/tor/"}],themeConfig:{defaultMode:"dark",bodyBgImgOpacity:1,nav:[{text:"首页",link:"/"},{text:"使用手册",link:"/guide/introduce/"},{text:"技术博客",link:"/tech/"}],archive:!1,category:!1,tag:!1,updateBar:{showToArticle:!1},sidebar:{"/guide/":[{title:"概述",collapsable:!0,children:[["00.概述/00.introduce.md","简介","/guide/introduce","2.0.0"],["00.概述/01.structure.md","项目结构","/guide/structure"]]},{title:"开始使用",collapsable:!0,children:[["01.开始使用/00.start.md","快速开始","/guide/start/"],["01.开始使用/01.install.md","客户端安装","/guide/install/"],["01.开始使用/02.provider.md","云账户管理","/guide/provider/"],["01.开始使用/03.tunnel.md","函数实例","/guide/func/"],["01.开始使用/04.proxy.md","服务","/guide/service/"]]},{title:"高级进阶",collapsable:!0,children:[["02.高级进阶/00.paas.md","PaaS 平台部署","/guide/paas"],["02.高级进阶/01.faas.md","BaaS/FaaS 手动部署","/guide/faas"]]},{title:"其他客户端支持",collapsable:!0,children:[["03.其他客户端支持/01.tor.md","tor","/guide/client/tor"],["03.其他客户端支持/02.gost.md","gost","/guide/gost"],["03.其他客户端支持/03.v2ray.md","v2ray","/guide/v2ray"]]}],catalogue:{},"/tech/":[{title:"写在前面",collapsable:!0,children:[["00.写在前面/00.position.md","月海的定位","/tech/position/"],["00.写在前面/01.feature.md","月海的特性","/tech/feature/"]]},{title:"网络",collapsable:!0,children:[["01.网络/01.HTTP.md","HTTP","/tech/net/http/"],["01.网络/02.SOCKS5.md","SOCKS5","/tech/net/socks5/"],["01.网络/03.TOR.md","TOR","/tech/net/tor/"]]}]},sidebarOpen:!0,searchMaxSuggestions:10,repo:"Dvkunion/SeaMoon",author:{name:"DVKunion",href:"https://github.com/DVKunion"},social:{icons:[{iconClass:"icon-youjian",title:"发邮件",link:"mailto:dvkunion@gmail.com"},{iconClass:"icon-mao",title:"放一只猫",link:"https://github.com/DVKunion/SeaMoon"},{iconClass:"icon-github",title:"GitHub",link:"https://github.com/Dvkunion"},{iconClass:"icon-weixin",title:"weixin",link:""}]},footer:{createYear:2022,copyrightInfo:"DVKunion | MIT License"},extendFrontmatter:{article:!1}}};var Ts=n(94),As=n(95),Ps=n(11);var Ls={computed:{$filterPosts(){return this.$site.pages.filter(t=>{const{frontmatter:{pageComponent:e,article:n,home:r}}=t;return!(e||!1===n||!0===r)})},$sortPosts(){return(t=this.$filterPosts).sort((t,e)=>{const n=t.frontmatter.sticky,r=e.frontmatter.sticky;return n&&r?n==r?Object(Ps.a)(t,e):n-r:n&&!r?-1:!n&&r?1:Object(Ps.a)(t,e)}),t;var t},$sortPostsByDate(){return(t=this.$filterPosts).sort((t,e)=>Object(Ps.a)(t,e)),t;var t},$groupPosts(){return function(t){const e={},n={};for(let r=0,o=t.length;r{n&&(e[n]||(e[n]=[]),e[n].push(t[r]))}),"array"===Object(Ps.n)(i)&&i.forEach(e=>{e&&(n[e]||(n[e]=[]),n[e].push(t[r]))})}return{categories:e,tags:n}}(this.$sortPosts)},$categoriesAndTags(){return function(t){const e=[],n=[];for(let n in t.categories)e.push({key:n,length:t.categories[n].length});for(let e in t.tags)n.push({key:e,length:t.tags[e].length});return{categories:e,tags:n}}(this.$groupPosts)}}};qn.component(Ts.default),qn.component(As.default);function Rs(t){return t.toString().padStart(2,"0")}n(239);qn.component("Badge",()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,337))),qn.component("CodeBlock",()=>Promise.resolve().then(n.bind(null,94))),qn.component("CodeGroup",()=>Promise.resolve().then(n.bind(null,95)));n(240);var Ms=[({Vue:t,options:e,router:n,siteData:r})=>{r.pages.map(t=>{const{frontmatter:{date:e,author:n}}=t;"string"==typeof e&&"Z"===e.charAt(e.length-1)&&(t.frontmatter.date=function(t){t instanceof Date||(t=new Date(t));return`${t.getUTCFullYear()}-${Rs(t.getUTCMonth()+1)}-${Rs(t.getUTCDate())} ${Rs(t.getUTCHours())}:${Rs(t.getUTCMinutes())}:${Rs(t.getUTCSeconds())}`}(e)),n?t.author=n:r.themeConfig.author&&(t.author=r.themeConfig.author)}),t.mixin(Ls)},{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{}],Bs=[];class Ds extends class{constructor(){this.store=new qn({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){qn.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(Ds.prototype,{getPageAsyncComponent:is,getLayoutAsyncComponent:as,getAsyncComponent:ss,getVueComponent:cs});var Is={install(t){const e=new Ds;t.$vuepress=e,t.prototype.$vuepress=e}};function Ns(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var Fs={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return ls("pageKey",e),qn.component(e)||qn.component(e,is(e)),qn.component(e)?t(e):t("")}},Us={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},zs={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},Vs=(n(241),n(242),Object(Ss.a)(zs,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),Hs={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};qn.config.productionTip=!1,qn.use(Va),qn.use(Is),qn.mixin(function(t,e,n=qn){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!qn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Ns(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Ns(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Ns(t,o)?r(o):Ns(t,n)?r(n):r()}})}(n);const r={};try{await Promise.all(Ms.filter(t=>"function"==typeof t).map(e=>e({Vue:qn,options:r,router:n,siteData:js,isServer:t})))}catch(t){console.error(t)}return{app:new qn(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Bs.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file diff --git a/guide/advance/index.html b/guide/advance/index.html index 6d5ed2f..ebefbea 100644 --- a/guide/advance/index.html +++ b/guide/advance/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)
- + diff --git a/guide/client/tor/index.html b/guide/client/tor/index.html index 510c0f7..ef12d36 100644 --- a/guide/client/tor/index.html +++ b/guide/client/tor/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)
目录

tor

# 🧅 Tor 网络开启

注意

tor 服务比较吃内存,经测试 内存至少需要配置在 100MB 以上才能发挥稳定的效果。

为了防止普通流量过 Tor 导致的速率下降,在客户端做了个开关。

客户端会根据这个这个开关来选择是否给服务端发送 Tor 代理标识。

服务端接收到 Tor 代理标识后,会将流量直接转发给本地服务。

tor

注意,tor 网络目前仅支持: 本地 socks5 代理 + websocket 隧道 的模式。

然后本地的 socks5 代理即可访问一些 .onion 结尾的域名了。如:

https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion/

onion

提示

在当前版本内,seamoon 实现了最简单的 tor 接入方式 -- 通过 tor cli 自带的 s5 协议做了一层转发,因为 v2ray 也是这样玩的。

实际上,这种方案,有很多不足,出去开头的资源占用较高 warning,通过 binary 的集成力度也不是非常合适,但是在这个阶段暂时用该方案来减少代码开发的工作量。

因此,此方案仅用于证明 seamoon 的扩展性,距离真正 "便宜" 可能还需要一段的距离。

- + diff --git a/guide/faas/index.html b/guide/faas/index.html index c1882e4..d950593 100644 --- a/guide/faas/index.html +++ b/guide/faas/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)
目录

BaaS/FaaS 手动部署

# 步部署到阿里云

阿里云是使用上最为规范、标准化场景下的serverless部署方式。

如果你对serverless的运作感兴趣,并希望寻找更多的玩法,阿里云是一个不错的选择,各种选项可以帮助你更好地理解和配置serverless。

# 如何部署

如果你了解云函数,可以使用自定义镜像 / 自定义运行时 / 二进制等等方式部署。

下文是基于对完全不了解云函数的同学给出的最简单的部署方式。

# Step.1

  • 阿里云首先要开通函数计算服务。
  • fork 该仓库(https://github.com/DVKunion/SeaMoon.git)到您自己的 github 账户下
  • 进入阿里云控制台,点击应用 -> 创建应用

aliyun-create-app

# Step.2

选择 通过仓库导入应用 , 授权Github账户后,选择fork好的仓库,如果您之前没有使用过阿里云,在角色权限处还需要进行一次授权。

aliyun-app-import

# Step.3

点击创建,等待服务部署成功

# 效果展示

speed

# 叹息的腾讯云

注意

由于腾讯云 grpc 也没调研,加上拉胯不推荐使用,所以此处的文档依旧为 v1.1.3 版本,非最新版本文档。 + (opens new window)

目录

BaaS/FaaS 手动部署

# 步部署到阿里云

阿里云是使用上最为规范、标准化场景下的serverless部署方式。

如果你对serverless的运作感兴趣,并希望寻找更多的玩法,阿里云是一个不错的选择,各种选项可以帮助你更好地理解和配置serverless。

# 如何部署

如果你了解云函数,可以使用自定义镜像 / 自定义运行时 / 二进制等等方式部署。

下文是基于对完全不了解云函数的同学给出的最简单的部署方式。

# Step.1

  • 阿里云首先要开通函数计算服务。
  • fork 该仓库(https://github.com/DVKunion/SeaMoon.git)到您自己的 github 账户下
  • 进入阿里云控制台,点击应用 -> 创建应用

aliyun-create-app

# Step.2

选择 通过仓库导入应用 , 授权Github账户后,选择fork好的仓库,如果您之前没有使用过阿里云,在角色权限处还需要进行一次授权。

aliyun-app-import

# Step.3

点击创建,等待服务部署成功

# 效果展示

speed

# 叹息的腾讯云

注意

由于腾讯云 grpc 也没调研,加上拉胯不推荐使用,所以此处的文档依旧为 v1.1.3 版本,非最新版本文档。 如果要使用最新版本,请看上两篇的部署方式。

先说结论,个人不建议腾讯云部署,原因众多:

  • 腾讯云go代码部署仅支持代码上传,这种过时的部署方式完全不符合devops的生态。
  • 如此必须依赖自定义镜像部署,腾讯云又不支持公网镜像部署,还需要手动将镜像推送至个人腾讯云仓库(虽然个人版免费)
  • 最最最最最重要的一点:腾讯云SFC不免费了,没有了免费调度的礼包,必须得买套餐,不买套餐TMD血贵,只是测了个速花了我4毛钱!

tencent-billing

因此使用腾讯云的用户请先考虑下钱包,虽然最低配置的流量包9.9一个月。

# 如何部署

步骤很多,一步一步操作吧。。。大概对比一下就知道为什么不推荐腾讯云部署了。

# Step.1

结论也提到了,腾讯云不支持go代码级别部署,所以我们为了方便,只能通过自定义镜像部署模式,函数类型选择web类型:

tencent-app

在填写部署参数之前,需要先手动来上传server镜像到个人仓库(个人镜像仓库10个以内免费)

tencent-images

点击选择镜像,将会跳转至个人镜像仓库:

tencent-registry

创建个人镜像仓库,先要创建命名空间,这个随便起个名字就好。

tencent-registry-create

然后需要创建镜像仓库,镜像仓库的名称必须为:seamoon-server

tencent-registry-images

然后点击快捷操作,会出现命令提示:

tencent-registry-login

复杂的步骤来了。现在需要找一台i386/amd64架构、且有docker的电脑......如果不懂如何查看电脑架构/不知道如何安装docker,建议还是放弃腾讯云。

执行以下命令

# 拉取dockerhub 服务镜像
 $ docker pull dvkunion/seamoon-server:latest
 
@@ -56,6 +56,6 @@
         
  • 阅读模式
  • - + diff --git a/guide/func/index.html b/guide/func/index.html index 3282ae4..d6e4889 100644 --- a/guide/func/index.html +++ b/guide/func/index.html @@ -20,7 +20,7 @@ - + @@ -45,6 +45,6 @@
  • 阅读模式
  • - + diff --git a/guide/gost/index.html b/guide/gost/index.html index 26b213a..649cc51 100644 --- a/guide/gost/index.html +++ b/guide/gost/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)
    目录

    gost

    # GOST - 优雅的 golang 代理

    Seamoon 对接 Gost (opens new window) 十分简单。原因也很简单,2.0 迭代的代码改造中"借鉴"(copy)了很多 gost 的设计和原封不动的代码结构。对协议的理解和代码设计上参考了很多师傅的模式。在此表示感谢无私的开源和分享。

    GOST 是一款基于 golang 的简单隧道,具体的介绍可以访问其官网 (opens new window)

    在技术博客里,我们也分享了 GOST 的一些设计架构代码,我们可以这样理解: Seamoon 服务端就是一个 websocket / grpc 的 gost 转发节点,但是只实现了 http / socks5 的处理模块,由此目前还支持值了这两种协议的转发。

    gost 的客户端更强大,因为模块拆分的很细致,所以能实现很多好玩的玩法各种组合, 理论来讲, gost 支持的 listen 都可以通过 seamoon 的隧道转发过来。

    gost 还支持了 metrics 等数据统计、代理认证、限速等等客户端实现的功能,适合长期挂在本地作为一个持久化的服务使用。

    我们给出一些demo示例,来看一下 seamoon 如何对接 gost。这里免去了 gost 安装相关教程,默认用户已安装了 gost,提供的是具体的启动脚本配置。

    # websocket 隧道

      # 通过 gost 启动一个 http 代理,利用 websocket 转发,转发的流量 以 http 形式(默认不指定的话,流量都将以 http 形式进行传递)。
      +     (opens new window)    
      目录

      gost

      # GOST - 优雅的 golang 代理

      Seamoon 对接 Gost (opens new window) 十分简单。原因也很简单,2.0 迭代的代码改造中"借鉴"(copy)了很多 gost 的设计和原封不动的代码结构。对协议的理解和代码设计上参考了很多师傅的模式。在此表示感谢无私的开源和分享。

      GOST 是一款基于 golang 的简单隧道,具体的介绍可以访问其官网 (opens new window)

      在技术博客里,我们也分享了 GOST 的一些设计架构代码,我们可以这样理解: Seamoon 服务端就是一个 websocket / grpc 的 gost 转发节点,但是只实现了 http / socks5 的处理模块,由此目前还支持值了这两种协议的转发。

      gost 的客户端更强大,因为模块拆分的很细致,所以能实现很多好玩的玩法各种组合, 理论来讲, gost 支持的 listen 都可以通过 seamoon 的隧道转发过来。

      gost 还支持了 metrics 等数据统计、代理认证、限速等等客户端实现的功能,适合长期挂在本地作为一个持久化的服务使用。

      我们给出一些demo示例,来看一下 seamoon 如何对接 gost。这里免去了 gost 安装相关教程,默认用户已安装了 gost,提供的是具体的启动脚本配置。

      # websocket 隧道

        # 通过 gost 启动一个 http 代理,利用 websocket 转发,转发的流量 以 http 形式(默认不指定的话,流量都将以 http 形式进行传递)。
         gost -L http://:1080 -F wss://<seamoon-server>:<seamoon-port>?path=/http
         
        # 通过 gost 启动一个 http 代理,利用 websocket 转发,并指定转发的流量 以 socks5 形式
         gost -L http://:1080 -F socks5+wss://<seamoon-server>:<seamoon-port>?path=/socks5
        @@ -57,6 +57,6 @@
                 
      • 阅读模式
      • - + diff --git a/guide/index.html b/guide/index.html index 8b7302a..ec320ee 100644 --- a/guide/index.html +++ b/guide/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)

        开始使用

        - + diff --git a/guide/install/index.html b/guide/install/index.html index 478aa3c..e343c98 100644 --- a/guide/install/index.html +++ b/guide/install/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)
        目录

        客户端安装

        # 客户端安装

        # Docker

        推荐使用 docker 一键部署client

        $ docker run -it -d --net=host dvkunion/seamoon:latest client proxy
        +     (opens new window)    
        目录

        客户端安装

        # 客户端安装

        # Docker

        推荐使用 docker 一键部署client

        $ docker run -it -d --net=host dvkunion/seamoon:latest client proxy
         

        默认使用--net=host模式,这样比较简单易懂。为了更高的安全性、可控性,你也可以自己选择映射:

        $ docker run -it -d -p 127.0.0.1:7777:7777 -p 1080:1080 dvkunion/seamoon:latest client proxy
         

        这样可以将管理端口限制只能通过本地 127.0.0.1 访问,如果你需要限制为其他 IP,可以自行修改。

        然后浏览器打开:

        localhost:7777

        即可开启客户端

        # Binary

        # 客户端下载

        Github Release (opens new window) 界面。在最新版本列表哪,选择您对应系统型号的client 包下载。

        release

        - + diff --git a/guide/introduce/index.html b/guide/introduce/index.html index c1c8197..7f38d0d 100644 --- a/guide/introduce/index.html +++ b/guide/introduce/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)
        目录

        简介2.0.0

        # SeaMoon - 月海

        go-report language download license start

        # ☁️ 什么是月海

        🌕 月出于云却隐于海

        月海(Sea Moon) 是一款 FaaS/BaaS 实现的 Serverless 网络工具集,期望利用云原生的优势,实现更简单、更便宜的网络工具。

        月海之名取自于苏轼的《西江月·顷在黄州》,寓意月海取自于传统工具,用之于云,最终达到隐匿于海的效果。

        月海基于 Serverless 的动态与无状态的特性,从网络层实现了一个基于 Serverless 的网络工具集,包括代理、转发、隧道等等常见网络功能; + (opens new window)

        目录

        简介2.0.0

        # SeaMoon - 月海

        go-report language download license start

        # ☁️ 什么是月海

        🌕 月出于云却隐于海

        月海(Sea Moon) 是一款 FaaS/BaaS 实现的 Serverless 网络工具集,期望利用云原生的优势,实现更简单、更便宜的网络工具。

        月海之名取自于苏轼的《西江月·顷在黄州》,寓意月海取自于传统工具,用之于云,最终达到隐匿于海的效果。

        月海基于 Serverless 的动态与无状态的特性,从网络层实现了一个基于 Serverless 的网络工具集,包括代理、转发、隧道等等常见网络功能; 同时在客户端集成了大量云厂商,实现快捷的一键式部署和跨厂商与平台操作。

        觉得项目不错的话,还请给一个star ✨ (opens new window), 你的支持是更新的最大动力~

        # 🌟 月海能做什么

        Serverless 的动态实例不同的出口IP,从而获取到了干净(非威胁情报黑名单)、随机的外网IP代理、用后即销毁的无痕状态等。

        网络代理

        代理类型 技术文档 Seamoon 客户端支持 其他客户端支持
        HTTP(S) HTTP.md (opens new window)
        Socks5 Socks5.md (opens new window)
        Socks4
        Vmess
        Vless
        shadowsocks

        网络隧道

        隧道类型 技术文档 支持情况
        websockst
        grpc
        oss 🐷调研中

        其他

        更多特性相关请移步: 技术文档 (opens new window)

        # 🧭 支持平台

        平台名称 免费力度 是否支持
        阿里云 新用户三个月
        腾讯云 🈚️
        Sealos 五元余额
        华为云
        百度云
        🙅Render 每月750小时免费 + 100G流量但是封号
        AWS 🐷调研中
        Google 🐷调研中

        # 🕹开始使用

        继续阅读: 快速开始 (opens new window)

        # ❗免责声明

        本工具仅用于学习 serverless 以及云原生相关技术,请勿用于其他用途。

        如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。

        - + diff --git a/guide/paas/index.html b/guide/paas/index.html index 444add6..d5dad72 100644 --- a/guide/paas/index.html +++ b/guide/paas/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)
        目录

        PaaS 平台部署

        # PaaS 平台部署

        SeaMoon 的服务端其实支持部署到多种 PaaS 类型的平台

        # 部署到Sealos: 拥抱更便宜、更舒适、更优美可控的云服务平台

        Sealos公有云地址 (opens new window)

        先说下我喜欢Sealos的原因:

        简单的页面,适合新手小白,无需了解过多的云服务相关知识

        操作起来和操作一个os一样,点击、配置、部署,一气呵成。 对比各大厂的balabala一堆限制,sealos的门槛更低,更适合小白上手。

        sealos-dashboard

        简单易懂的计费方式:花费更低,效果不变

        对比各大厂花里胡哨的各项计费指标(尤其是流量也要收费),sealos的计费方式真正的做到按照计算量计费,费用透明,整体使用下来价格更低。

        sealos-app

        配置更加灵活:不用了pause、用的时候start、想要多少的IP自行可控

        sealos支持快速弹性扩容,当需求高时,可以调低扩容触发点,获取到更多IP 当不需要使用时,可以快速的pause停止;下次使用时又能快速的恢复。

        sealos-container

        # 如何部署

        sealos上部署seamoon服务将更加简单,只需要鼠标点击操作:

        # Step.1 注册账户

        注册并登陆cloud.sealos.io (opens new window), 点击App Launchpad

        sealos-applanch

        # Step.2 部署

        注意

        sealos 并不是部署一个服务 就带着两种类型的隧道。因此,如果你希望使用 websocket 隧道, 需要部署 websocket 类型的服务。

        同样的,如果你需要 grpc 隧道,选择部署 grpc 服务。

        点击右上角create application, 如下填写参数:

        sealos-config

        提示

        此处,如果你部署的是 grpc 隧道的话,请将端口改为 8089,协议选择 grpc, 如下图: + (opens new window)

        目录

        PaaS 平台部署

        # PaaS 平台部署

        SeaMoon 的服务端其实支持部署到多种 PaaS 类型的平台

        # 部署到Sealos: 拥抱更便宜、更舒适、更优美可控的云服务平台

        Sealos公有云地址 (opens new window)

        先说下我喜欢Sealos的原因:

        简单的页面,适合新手小白,无需了解过多的云服务相关知识

        操作起来和操作一个os一样,点击、配置、部署,一气呵成。 对比各大厂的balabala一堆限制,sealos的门槛更低,更适合小白上手。

        sealos-dashboard

        简单易懂的计费方式:花费更低,效果不变

        对比各大厂花里胡哨的各项计费指标(尤其是流量也要收费),sealos的计费方式真正的做到按照计算量计费,费用透明,整体使用下来价格更低。

        sealos-app

        配置更加灵活:不用了pause、用的时候start、想要多少的IP自行可控

        sealos支持快速弹性扩容,当需求高时,可以调低扩容触发点,获取到更多IP 当不需要使用时,可以快速的pause停止;下次使用时又能快速的恢复。

        sealos-container

        # 如何部署

        sealos上部署seamoon服务将更加简单,只需要鼠标点击操作:

        # Step.1 注册账户

        注册并登陆cloud.sealos.io (opens new window), 点击App Launchpad

        sealos-applanch

        # Step.2 部署

        注意

        sealos 并不是部署一个服务 就带着两种类型的隧道。因此,如果你希望使用 websocket 隧道, 需要部署 websocket 类型的服务。

        同样的,如果你需要 grpc 隧道,选择部署 grpc 服务。

        点击右上角create application, 如下填写参数:

        sealos-config

        提示

        此处,如果你部署的是 grpc 隧道的话,请将端口改为 8089,协议选择 grpc, 如下图: sealos-config-grpc

        往下拉,还有高级配置里面的启动命令:

        sealos-config-2

        提示

        此处,如果你部署的是 grpc 隧道的话,请修改此处的启动命令为: /app/seamoon server -p 8089 -t grpc , 如下图: sealos-config-grpc-2

        你也可以直接选择yaml文件,参考如下:

        注意,下面的 yaml 仅供参考,我隐去了一些身份相关的字段,没有展示出来,只列出了一些关键的项目。 @@ -145,6 +145,6 @@

      • 阅读模式
      • - + diff --git a/guide/provider/index.html b/guide/provider/index.html index 007170f..31a6225 100644 --- a/guide/provider/index.html +++ b/guide/provider/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)
        目录

        云账户管理

        # 云账户管理

        # 阿里云

        阿里云账户需要三个信息:AccessID/AccessKey/SecretKey。

        AccountId 可在主页右上角个人信息处获取 accountId

        aliyun-account

        AccessKeyId/AccessKeySecret 可在 IAM (opens new window) 页面添加子用户生成密钥。

        注意

        创建的 AK/SK 请确保拥有账单权限和函数相关权限

        # 腾讯云

        腾讯云账户只需要两个信息: SecretID/SecretKey

        可在 IAM (opens new window) 页面添加子用户生成密钥

        # Sealos

        Sealos 只需要一个 kubeconfig 凭证即可。我们登录 cloud.sealos.io:

        sealos

        点击复制粘贴过来即可。

        - + diff --git a/guide/service/index.html b/guide/service/index.html index e5358c4..6557f9e 100644 --- a/guide/service/index.html +++ b/guide/service/index.html @@ -20,7 +20,7 @@ - + @@ -44,6 +44,6 @@
      • 阅读模式
      • - + diff --git a/guide/start/index.html b/guide/start/index.html index 7868a06..149cf49 100644 --- a/guide/start/index.html +++ b/guide/start/index.html @@ -20,7 +20,7 @@ - + @@ -46,6 +46,6 @@
      • 阅读模式
      • - + diff --git a/guide/structure/index.html b/guide/structure/index.html index d0fc99b..cc97dab 100644 --- a/guide/structure/index.html +++ b/guide/structure/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)
        目录

        项目结构

        # 项目结构

        月海主要分为两部分:

        • 部署在云端的服务端
        • 客户端

        # 服务端

        服务端为实际部署在云厂商的代码。负责实际计算的功能模块, 主要实现各类的隧道与协议解析。

        # 客户端

        为了方便管理和使用,月海提供了一个 B/S 架构的客户端,主要包括了以下内容:

        • 系统配置: 客户端相关配置
        • 云账户管理: 用于管控所有部署的云账户信息
        • 函数实例: 用于展示和管理所有已经部署的 Serverless 函数
        • 服务: 当没有使用其他的客户端时,月海还提供了一个简易的服务功能来提供一些网络服务,来实现对外的开放。

        除了使用 seamoon 自身的客户端代理功能之外,还可以使用其他支持隧道模式的 客户端工具,如 clash/v2ray/gost, 可以实现在本地落地更多协议的代理。

        - + diff --git a/guide/support/index.html b/guide/support/index.html index 2ada4db..956d62f 100644 --- a/guide/support/index.html +++ b/guide/support/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)
        目录

        其他客户端支持

        # 其他客户端支持

        SeaMoon 继承了云原生的开放思想,不局限于一种/一个平台,尽可能的适配各种客户端的模式,使用已有的成品客户端。

        成品客户端通常会支持更多协议类型,比如 gost,基本上所有可以监听的类型都可以通过 seamoon 隧道协议转发出来。

        Seamoon 客户端还支持了 Tor 网桥的接入

        - + diff --git a/guide/v2ray/index.html b/guide/v2ray/index.html index 9c93b9e..9d4f85d 100644 --- a/guide/v2ray/index.html +++ b/guide/v2ray/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)

        v2ray

        seamoon 完美兼容 v2ray 系列客户端。

        - + diff --git a/index.html b/index.html index 0e7e30c..243cdfc 100644 --- a/index.html +++ b/index.html @@ -20,7 +20,7 @@ - + @@ -45,6 +45,6 @@
      • 阅读模式
      • - + diff --git a/tech/feature/index.html b/tech/feature/index.html index b1b36c3..896d1b7 100644 --- a/tech/feature/index.html +++ b/tech/feature/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)
        目录

        月海的特性

        # FEATURE

        # SeaMoon 1.2.0-beta.2

        # ❤️ What's New

        • 📝 docs: 订正手册 (#49)
        • 📝 docs: 手册增加了 gost (opens new window) 作为本地客户端的使用方式 (#57)
        • 🔧 fix(client): 修复 ISSUE 提到的连接缓慢问题 (#48)(#23)(#44)

        # What's Changed

        • fix: use release binary instead of self compiling by @DVKunion in https://github.com/DVKunion/SeaMoon/pull/24
        • fix: client error && websocket compress error by @DVKunion in https://github.com/DVKunion/SeaMoon/pull/48
        • docs: update manual && update yarn && fix a little bug by @DVKunion in https://github.com/DVKunion/SeaMoon/pull/49
        • fix: roll back vdoing by @DVKunion in https://github.com/DVKunion/SeaMoon/pull/50

        Full Changelog: https://github.com/DVKunion/SeaMoon/compare/1.2.0-beta.1...1.2.0-beta.2

        # SeaMoon 1.2.0-beta.1

        1.2.0 是一个临时版本,由于想要加入一些新的功能与适配,整体代码改动量较大。因此先拆分了部分功能代码。 + (opens new window)

        目录

        月海的特性

        # FEATURE

        # SeaMoon 1.2.0-beta.2

        # ❤️ What's New

        • 📝 docs: 订正手册 (#49)
        • 📝 docs: 手册增加了 gost (opens new window) 作为本地客户端的使用方式 (#57)
        • 🔧 fix(client): 修复 ISSUE 提到的连接缓慢问题 (#48)(#23)(#44)

        # What's Changed

        • fix: use release binary instead of self compiling by @DVKunion in https://github.com/DVKunion/SeaMoon/pull/24
        • fix: client error && websocket compress error by @DVKunion in https://github.com/DVKunion/SeaMoon/pull/48
        • docs: update manual && update yarn && fix a little bug by @DVKunion in https://github.com/DVKunion/SeaMoon/pull/49
        • fix: roll back vdoing by @DVKunion in https://github.com/DVKunion/SeaMoon/pull/50

        Full Changelog: https://github.com/DVKunion/SeaMoon/compare/1.2.0-beta.1...1.2.0-beta.2

        # SeaMoon 1.2.0-beta.1

        1.2.0 是一个临时版本,由于想要加入一些新的功能与适配,整体代码改动量较大。因此先拆分了部分功能代码。 整体的稳定性上会有所欠缺,更多的是下一个版本的新功能尝试

        # ❤️ What's New

        • 📝 docs: 修正了首页的一些图床丢失 (#18)
        • ✨ feat(server): 新增隧道协议:grpc (#19)
        • ⚡️ zap(server): 将协议解码转移在服务端处理,轻量化客户端 (#17)
        • 🎨 refartor(server): 重构服务端模式,参考 gost 代理项目优化网络传输 (#15)
        • 🎨 refartor(client): 减轻客户端传递功能,做更多兼容性适配,配合server重构 (#20)
        • 🔧 fix(ci): 修正一些重构导致的ci错误(#16)(#21)(#22)

        Full Changelog: https://github.com/DVKunion/SeaMoon/compare/1.1.3...1.2.0-beta.1

        • 75db770 feat: support grpc tunnel (#19)
        • 122435f fix: Dockerfile (#22)
        • ae49ee0 fix: page ci dir changes (#16)
        • be04fa1 fix: tag ci error (#21)
        • f40e8f0 refactor: client (#20)
        • 22bc49c refactor: server code && upgrade go mod (#15)
        • ef2bf71 zap: change socks handle from client to server. (#17)

        # SeaMoon 1.1.3

        # ❤️ What's New

        • 📝 docs: 增加手册页面sitemap站点地图(#7)(#8)
        • ✨ feat(server): 修改了阿里云默认的部署资源类型(vcpu 0.1/mem 128),来降低普通用户使用的价格消费 (#10)
        • ✨ feat(server): 增加了sealos部署方案,用更加便宜的价格使用seamoon (#11)
        • ✨ feat(server): 增加了docker server, 现在可以通过docker来启动服务端 (#12)
        • 🔧 fix(config): 用更友好的方式来使用config,不再单一的通过域名特征来判断服务端地址类型。(#13)

        Full Changelog: https://github.com/DVKunion/SeaMoon/compare/1.1.2...1.1.3

        • 41c5ce8 feat(docker): add docker server (#12)
        • 1414293 feat: low cpu && mem cost (#10)
        • 99c98fd fix(client): use more friendly config (#13)

        # SeaMoon 1.1.2

        # ❤️ What's New

        • 🔧 fix(websocket): 修正了protocol error detect 时仍挂起gorouting导致卡死的问题 (#6)
        • ✨ feat(dockerfile): 增加了docker client, 现在可以通过docker来启动客户端 (#6)

        Full Changelog: https://github.com/DVKunion/SeaMoon/compare/1.1.1...1.1.2

        # SeaMoon 1.1.1

        # ❤️ What's New

        • 🔧 fix(websocket): 修正了 websocket 在超出 32768 slice导致的 panic。 (#4)
        • 🔧 fix(websocket): 修整了 websocket 在 close 时写入 message 导致的 panic。 (#4)
        • 🔧 fix(websocket): 忽略了大量 websocket 链接导致的 1006 abnormal close 报错。 (#4)
        • 🔧 fix(s.yaml): 修整了 serverless-devs 工具编排文件,目前可以通过 serverless-devs 工具s deploy一件部署至阿里云。 (#4)
        • 🔧 fix(ci): 修整了 go-releaser ci 配置 (#3)
        • 🔧 fix(docs): 更新了 README.md 较为过时的使用手册。

        # 🌈 Small Talk

        Hi,各位,SeaMoon成功挤入2023Kcon兵器谱,使得整个项目获得了一批关注;在此感谢大家对SeaMoon项目的浓厚兴趣与支持,谢谢各位🙏
        由于工作原因,以及个人的一些想法枯竭,项目于去年创建,直到现在目前也仅支持了阿里云一个demo QAQ,因此整体给人并不是一个较为完善的使用效果。1.1.1 版本后,我会尽量保证一些活跃性质的更新,以及一些比较有意思的想法demo迭代。
        也欢迎对serverless感兴趣的安全小伙伴留言来交个朋友~

        Full Changelog: https://github.com/DVKunion/SeaMoon/compare/1.1.0...1.1.1

        • bc209a9 doc: update README.md
        • a2e7360 fix: go-releaser ci config (#3)
        • 8f51e63 fix: readme.md
        • fe658ff fix: some websocket error optimization (#4)
        • c316527 hotfix: some docs and code format

        # 1.1.0 (2022-09-27)

        # Bug Fixes

        # 1.0.0 (2022-09-09)

        # Features

        • ci: add build @@ -50,6 +50,6 @@
        • 阅读模式
        - + diff --git a/tech/index.html b/tech/index.html index 62ca01c..0052ae5 100644 --- a/tech/index.html +++ b/tech/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)
        - + diff --git a/tech/net/http/index.html b/tech/net/http/index.html index 940f833..42522a8 100644 --- a/tech/net/http/index.html +++ b/tech/net/http/index.html @@ -20,7 +20,7 @@ - + @@ -45,6 +45,6 @@
      • 阅读模式
      • - + diff --git a/tech/net/socks5/index.html b/tech/net/socks5/index.html index 0196758..8e8428c 100644 --- a/tech/net/socks5/index.html +++ b/tech/net/socks5/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)
        目录

        SOCKS5

        # SOCKS5

        # SOCKS5 效果

        相比http代理更稳定,速度更快。

        speed

        # SOCKS5 原理

        # SOCKS5

        基础理论: 浅谈云函数的利用面 (opens new window)

        在云函数(FC)的限制下,大佬提出了一种通过vps建立起socks5隧道的模式,从模式上来看,更像是一种反向连接。

        但是这种模式,需要一台VPS。对于穷逼的脚本小子的我,实在是不够优雅。

        FC的不成熟的确限制了大部分的玩法,比如触发器种类,比如协议,比如端口限制等等。

        在这种大环境下,我们无力去变更云函数的生态(其实也有可能云函数并没有为我们这种使用方式进行设计),只能自寻出路。

        想要优雅的正向连接,只能在HTTP上做文章。

        突然联想到早些年,做安全服务时拿到了WebShell后如何进行内网渗透?这就想起了一个利器工具,也是我们今天的主角:

        reGeorg (opens new window)

        这个工具提供了各种语言的脚本,能够通过HTTP隧道的方式,结合本地客户端,建立socks连接代理。

        他的原理其实是依赖于,socks属于一种建立在TCP层的接口,是对TCP/IP协议的封装,而在应用层的HTTP协议也是同样属于对TCP/IP协议的封装。

        通俗来说,socks就是爸爸,而HTTP只是他众多的接口调用实现方而已,相互之间的转化是存在某种方式的。

        举个例子,如python中的urllib库,底层就是使用sockets实现的HTTP。

        因此,我们云函数socks代理的模型就可以画出来了:

        用户 -> socks -> client -> 转化为HTTP -> FC云函数 -> 解析HTTP -> 发送socks

        用户 <- 转化为socks <- client <- 转化为HTTP <- FC云函数 <- socks数据

        我们的client开启一个socks的监听,然后将监听到的数据转化为http请求发给fc处理, fc根据http提供的数据发起socks连接,获取数据。之后fc函数再将数据通过http + (opens new window)

        目录

        SOCKS5

        # SOCKS5

        # SOCKS5 效果

        相比http代理更稳定,速度更快。

        speed

        # SOCKS5 原理

        # SOCKS5

        基础理论: 浅谈云函数的利用面 (opens new window)

        在云函数(FC)的限制下,大佬提出了一种通过vps建立起socks5隧道的模式,从模式上来看,更像是一种反向连接。

        但是这种模式,需要一台VPS。对于穷逼的脚本小子的我,实在是不够优雅。

        FC的不成熟的确限制了大部分的玩法,比如触发器种类,比如协议,比如端口限制等等。

        在这种大环境下,我们无力去变更云函数的生态(其实也有可能云函数并没有为我们这种使用方式进行设计),只能自寻出路。

        想要优雅的正向连接,只能在HTTP上做文章。

        突然联想到早些年,做安全服务时拿到了WebShell后如何进行内网渗透?这就想起了一个利器工具,也是我们今天的主角:

        reGeorg (opens new window)

        这个工具提供了各种语言的脚本,能够通过HTTP隧道的方式,结合本地客户端,建立socks连接代理。

        他的原理其实是依赖于,socks属于一种建立在TCP层的接口,是对TCP/IP协议的封装,而在应用层的HTTP协议也是同样属于对TCP/IP协议的封装。

        通俗来说,socks就是爸爸,而HTTP只是他众多的接口调用实现方而已,相互之间的转化是存在某种方式的。

        举个例子,如python中的urllib库,底层就是使用sockets实现的HTTP。

        因此,我们云函数socks代理的模型就可以画出来了:

        用户 -> socks -> client -> 转化为HTTP -> FC云函数 -> 解析HTTP -> 发送socks

        用户 <- 转化为socks <- client <- 转化为HTTP <- FC云函数 <- socks数据

        我们的client开启一个socks的监听,然后将监听到的数据转化为http请求发给fc处理, fc根据http提供的数据发起socks连接,获取数据。之后fc函数再将数据通过http 返回byte字节码,client端接收到响应,再根据协议降级为socks。

        理论存在,实践开始。 根据原理分析,我们要做的事情就比较明显了:

        • 在云函数部署好一个接受HTTP响应,并转化为socks连接的服务
        • 在本地启动client端,监听一个socks端口,将该端口的数据按照协议转化为HTTP请求发送给云函数

        参考reGeorg (opens new window) 和他的的重构版Neo-reGeorg (opens new window), 复制了一个GO版本的客户端和服务端。

        也就是说,你也可以选择连接 reGeorg 的shell作为http代理,启动一个本地的socks连接。

        以PHP为例,reGeorg将状态、IO全部存储在了session内。

        我们的云函数是没有状态的,所以不能够通过这种断开连接的方式再重新找到状态进行读取,要重新寻找出路。

        经过一周的改写,我发现虽然思路可行,但是reGeorg的项目实在太老了,而重构版Neo-reGeorg又因为各种加密等原因离谱的乱,导致最终socks建立起的连接无法再次read的相应的socks。

        终于在苦找下,发现了大佬做了这样的事情:将客户端socks5升级至http/https/websocket等应用层协议,同时还提供了UDP的解决方案!

        subsocks (opens new window)

        但是测试发现,http触发器存在最大连接超时时间,虽然阿里云已经把这个数值调整到了24小时,依旧存在隐患,不够完美。

        于是,替换者websockets触发器完美出现,解决了所有的问题。

        因为本身websockets就是一种类sockets的http连接,现在我们只要通过 io.copy 将双端的输入输出绑定,即可构成通信信道。

        最后就是处理好断开连接问题,来防止异常断开导致的panic,和节约云函数计费成本。

        最终达成上图效果。

        - + diff --git a/tech/net/tor/index.html b/tech/net/tor/index.html index c8d889d..0bf5d95 100644 --- a/tech/net/tor/index.html +++ b/tech/net/tor/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)

        TOR

        # TOR

        - + diff --git a/tech/position/index.html b/tech/position/index.html index 3149fd9..11f7585 100644 --- a/tech/position/index.html +++ b/tech/position/index.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ GitHub (opens new window)
        目录

        月海的定位

        # Position

        # 一些想法上的改动

        随着版本的迭代,月海已经与我最初的雏形完全偏离

        # 前言: 为什么要写月海这个工具? (Why Sea Moon)

        • 随着云原生不断地推广,希望渗透测试也能够与时俱进,开启一个新的纪元。不论从测试的手段还是挖掘方向,都应该朝着时代发展的方向跟进。
        • 现有项目模式较为松散,部署还是需要花费一些经历来理解和操作。而类似阿里云已经上升到serverless应用的层级,相应的部署方式和玩法更新颖。
        • 如果将这些项目比作是概念性工具,那么月海致力于打造的是一个较为成熟化的,能够快速简易应用的工具集产品。
        • 月海希望能够抛砖引玉,提出一个简易的框架和模式,将现有的大部分可迁移至云端操作的攻击手段集成进来,最终达到随手拿来的一台崭新电脑,5分钟即可进入攻击状态(理想)。
        - +