Reading view

There are new articles available, click to refresh the page.

AI Graph Maker – 免费不登录 AI 生成统计图表,简单美观的数据可视化工具

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

AI Graph Maker 是一个帮助用户快速生成图表的在线工具,通过 AI 整理输入的数据和提示词,再将数据以图表方式输出,在几秒钟快速生成专业的图表,同时还能调整不同的图表配色,如果发现生成的图表有些小问题也能通过编辑功能调整数据。

依照说明 AI Graph Maker 可以制作各种类型的图表,包括扇形图、折线图、条形图、流程图、时间轴、ER 图、思维导图和甘特图等等,默认情况会自动识别、选择最合适的类型,有需要也能手动指定。

最后可以将图表快速下载为 PNG 格式,整个过程无需注册账户,无论是新手或是专业人士都能轻松上手。

使用 AI 图表生成器轻松创建各类图表。将您的数据转换为定制的柱状图、折线图、流程图、饼图和散点图。

进入 AI Graph Maker 后会看到功能介绍、可通过 AI 图表制作工具生成的图表类型,要注意目前不同语言版本的制作工具不一样,使用英文或简体中文的版本功能会比较多,而且制作出来的图表更好看。

AI Graph Maker – 免费不登录 AI 生成统计图表,简单美观的数据可视化工具

点击 AI 图表生成器下方的示例,可以快速带入测试用的内容,例如生成销售数据条形图、网站流量分析折线图、部门员工人数扇形图或是比较学生学习表现的雷达对比图。

右下角有一个「图表类型选择」栏位,默认情况下会「自动」判断,用户可依照需求手动选择,AI Graph Maker 当前支持的类型包括折线图、条形图、雷达图、扇形图、树形图、散布图、关系图、桑奇图、漏斗图。

下图就是使用 AI Graph Maker 示例制作出来的图表,用户只需要将相关数据直接贴上,AI 就会进行后续处理并生成图片,整个过程几秒钟就完成了,可以说非常强大。

我也试着去找一些数据作为示例,搭配上提示词〔要求 AI 将内容制作为图表〕,点击右下角「AI 生成」。

AI Graph Maker 就将条形图制作出来,还能依照用户需求更改单位、显示名称或其他呈现方式。

从图表右下角按钮找到「调色盘」选项,快速将图表切换为不一样的配色组合。

使用不同语言版本生成的图表文字会转成相应语言,可以点击一下右下角「编辑图表数据」按钮就能修改,编辑图表中每个项目的显示文字和数字。

最后,找到图表右下角的「下载」按钮即可将图表保存为 PNG 格式。

Image to Prompt – 免费 AI 图片转提示词工具,一键生成 Midjourney、Stable Diffusion 关键词

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

Image to Prompt」是免费的图片转文字工具,将图片上传、几秒钟就能准确识别转为提示词,将生成内容复制后使用在其他的 AI 图片生成器,例如 Flux1、Stable Diffusion 和 Midjourney 等应用程序,识别速度很快,转换后图片就会删除,服务器不会储存用户上传识别的图片资料。

Image to Prompt 网站宗旨是帮助用户撰写更好的图片提示词,从而让用户能够更好的使用图片 AI 工具生成各种图片,如果有需要获取图片提示词灵感,从图片直接转换文字、稍作修改调整应该是最快的方法。

Upload your image, and it will be convert image to prompt in just seconds.

进入「Image to Prompt」网站后直接把要转换为文字的图片拖曳到左侧上传栏位〔或是点击下方的示例图片直接带入进行测试〕,接着点击右上角「Start convert」就会开始识别、转换。

几秒钟后右侧就会显示英文的图片提示词,将这段文字使用在其他 AI 图片生成器就能生成近似的图片,有需要也可以修改部分内容,相较于从零开始撰写提示词先使用生成器转换会是更快的方法。

如果图片的主题是人物,Image to Prompt 也能正确识别并提供相关信息。

Image to Prompt – 免费 AI 图片转提示词工具,一键生成 Midjourney、Stable Diffusion 关键词

Stirling PDF – 免费开源的 PDF 编辑工具,拥有超过 30 个的全面功能

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

Stirling PDF 是一站式的 PDF 编辑,让用户能对 PDF 文件进行各种编辑操作,包括分割、合并、转换、重新组合、新增影像、旋转、压缩等等,特色是免费、开源GitHub〕,过程中文件只会存在用户的设备上,若在处理时有暂存于服务器的内容在下载后会即时从服务器删除,不会记录保存或追踪任何资料,相较于在线工具来说是更安全、的解决方案。

1 Locally hosted web application that allows you to perform various operations on PDF files – Stirling-Tools/Stirling-PDF

Stirling PDF 提供多元的 PDF 编辑功能,涵盖文件组织、格式转换、安全性、检视与编辑等工具,满足各类文件处理需求,用户无需额外下载、安装软件,只要通过即可进行操作,Stirling PDF 有中文在内等多国语言界面〔在我写这篇文章时中文字串翻译率已达 93%〕,进入、找到对应的功能后就能直接进行编辑。

这项服务目前可以做到的功能包括:

1. 文件组织

2. 格式转换

3. 签名与安全性

4. 检视与编辑

5. 进阶功能

顺带一提,Stirling PDF 还有提供 Windows 版本,可以在没有连上的情况下使用,如果有兴趣的朋友可以在 GitHub 找到下载链接,原则上两者功能差不多,无论在线版或 Windows 程序都不用付费、也无广告干扰。

Stirling PDF

进入 Stirling PDF 网站后先从右上角语言选择「中文」。

Stirling PDF – 免费开源的 PDF 编辑工具,拥有超过 30 个的全面功能

接着从上方「工具」就能看到完整功能,依照类型分为:组织、转换为 PDF、从 PDF 转换、签名与安全性、检视与编辑和进阶工具,也可以直接从首页输入功能名称列出相关工具。

有一个 PDF 万用工具是整合旋转、裁切、分割、移除、新增图片等功能,进入后先点击左下角新增要编辑的 PDF 文件。

加入后 PDF 页面预览就会显示于下方,每一页都可单独旋转、删除或调整页数,将光标到页面中间时还会出现其他编辑选项,例如裁切或是加入图片,其实操作上很直觉,稍微摸索一下就会。

编辑完成别忘记点击右上角「下载」保存新的 PDF 文件。

另一个压缩 PDF 也是很常在在线工具看到的功能,选择文件、设置压缩比或是自动模式〔自动调整质量以使 PDF 达到指定大小〕,就能快速压缩 PDF 以获得更小的文件容量。

点击压缩后就会开始处理,完成后自动跳出下载提示,我以大约 9 MB 的 PDF 文件、手动模式 3 级测试后获取一个约 2.5 MB 的新文件,压缩成效相当好,而且图片并没有失真或模糊等情形。

另一个也很常用到的功能是「分割 PDF」,可以将 PDF 指定页面删除、或只是留下需要的页面,使用方法也很简单就不多加赘述,Stirling PDF 会有预先设置的示例提示,用户照着格式稍作修改后就能完成相关编辑任务。

如果要说 Stirling PDF 有没有比较特殊、少见的功能,有一个「自动涂黑」工具很有用,用户只要输入要涂黑的文字,选择 PDF 后就会自动将识别到的文字涂黑,确保隐私和安全性,同时也省去手动编辑文件的时间,操作上更有效率哦!

下图就是使用自动涂黑工具识别、涂黑的 PDF 文件示例,指定文字就会被涂黑处理。

ChatGPT Canvas 全新 AI 写作、源码、文本编辑工具,功能测试

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

最近推出会主动思考推理的「 o1-preview 」,以及更即时、自然的「高级语音对话模式」后,今天又再次推出新功能:ChatGPT Canvas」,这是基于 GPT-4o 架构开发的全新 写作、源码编辑界面。让 ChatGPT 不再只能对话,而可以进行更深入、准确的内容创作工作。

第一波更新中,ChatGPT Plus 和 Team 用户会先获得 Canvas 功能,而全球的企业和版用户将会在下周获得使用权限。并且 还计划在 Canvas 正式发布后,向所有 ChatGPT 用户开放这项新的人机协作界面。

实际测试后,我觉得可以把「ChatGPT Canvas」想象成一种 AI 文本、源码,在这个中,人和 AI 可以更有效率的协作,共同编辑更好的内容成果。

以前的 ChatGPT 是即时通,一切内容要在对话中生成,也只能用对话引导 AI 去生成、修改,这很多时候会有点麻烦,常常在问答的过程偏离主题,难以指定要修改的部分,容易愈改愈乱,再也回不去之前更好的版本。

但是「ChatGPT Canvas」能够解决上述问题,它让人与 AI 在一个类似文本编辑的界面中讨论,就像多人一起编辑一份在线文件那样,可以一起处理文字、源码内容,可以针对任何指定段落修改,能够整合人与 AI 各自编写的内容,最后一起合作完成一份文本。

于是, ChatGPT 不再只是「对话软件」,而可以当作真正的「AI 文本内容、源码内容编辑器」,你可以利用来处理下面的工作流程:

在这篇文章中,我通过一个完整的写作实测案例,带大家了解 Canvas 的操作流程、快捷功能以及它如何帮助创作者解决具体问题。

ChatGPT 的 AI 模型中切换到「GPT-4o with canvas」模式,下面我测试看看利用这个新界面编写一篇文章。

首先,我先利用原本常用的 AI 指令结构,结合我的想法草稿,请 ChatGPT 改写成一篇完整的文章内容。

ChatGPT Canvas 全新 AI 写作、源码、文本编辑工具,功能测试

当 AI 开始编写文章草稿,或是源码时,「GPT-4o with canvas」就会像是下图这样,进入独立的文件编辑界面。

进入独立的 Canvas 编辑界面后,最大的优点就是,我们甚至可以直接在上面修改 AI 生成的文章内容。

于是这样一来,可以实现更流畅的「人与 AI 的协同写作流程」。

以前 AI 生成的内容,我们有不满意的地方,无法人为的介入修改,只能让 AI 自己去改,而常常愈改愈乱。

现在, AI 生成的草稿,我可以直接在编辑界面介入,修改成我觉得更好的版本,然后再请 AI 接续调整,实现真正的人与 AI 协同合作。

「GPT-4o with canvas」不只可以修改内容,也可以调整粗体、标题样式,就像是一个结合 AI 功能的简易 Word 编辑器,还支持 markdown 编辑格式

以文章写作的 ChatGPT Canvas 界面为例,编辑界面右下方会出现一排「快捷功能菜单」,文章写作、源码编辑会有不同的对应菜单。

「快捷菜单」中有很多默认功能,可以快速修改整篇文章、源码的内容。

例如其中有一个「阅读等级」的调整按钮,可以把文章的内容改成从小孩子到博士等级的不同风格与深度。

下面是一篇我让 AI 改写的、文章,我让 ChatGPT 把原本相对专业的文章内容,改成适合小朋友阅读的版本。

而下面是同一篇第二大脑的教程文章,我让 ChatGPT 把原本相对口语的草稿,改成更精炼、专业的文章风格。〔可以跟上面的小朋友版本进行比较,都是同一篇草稿的不同阅读等级修改。

通过快捷功能,一个按钮就可以快速转换我们需要的文字深度与风格。

以文章编辑界面为例,具备下面几种快捷功能:

下图是按下「建议编辑」后,ChatGPT 针对不同段落提供的编辑建议,我只要按下允许,就可以让 AI 直接进行修改。

这是不是跟以前的对话生成内容有很大的不同?现在 ChatGPT 可以针对一篇长篇文章,提供各种分段的调整、建议与修改。

除了整篇文章的快捷修改、建议外,在「ChatGPT Canvas」的编辑界面中,我可以任意圈选一段觉得有问题的段落,这时候会浮现「Ask ChatGPT」的按钮,点击后,我可以输入这一段的修改建议,让 ChatGPT 去进行指定段落的调整。

这是不是很像我们在 Google 文件上提供伙伴文章修改建议?只是这一次,AI 成为我的伙伴,听从我的指令去修改。

更棒的事,在「ChatGPT Canvas」中不用再怕 AI 修改内容后,回不去之前可能更好的版本。

因为在编辑器中,自带了可以还原之前版本的功能,而且不只可以还原到前一个版本,也可以回到上上版、上上上版,或是跳回最新版本。

经过简单的文章写作实测,我们可以看到 ChatGPT Canvas 的可能性,它突破了传统 AI 对话生成文本的限制,将人机协同的创作流程无缝结合,无论是在写作还是程序设计的应用场景中,Canvas 以更灵活的编辑能力和快捷的功能,帮助用户实现了更精准、有效的工作流程。

对于我相对熟悉的文章创作者而言,ChatGPT Canvas 不仅提供了文稿即时的优化、编辑建议,还能调整文本的阅读等级和风格,帮助你快速针对不同的受众进行调整。而对于程序员,Canvas 的源码、注解添加与错误修正功能,让程序开发过程变得易于维护。

这样的功能让人与 AI 之间的互动变得更具深度,不再只是被动地接受 AI 的生成内容,而是能主动参与其中,实现真正的协同创作。

无论你是需要改进写作的创作者、需要帮助调试的程序员,还是想要在教育中使用 AI 辅助的教师或学生,ChatGPT Canvas 都是一个值得一试的工具。

OCRify – 免费快速 OCR 工具,识别转换图片和 PDF 文字内容

DUN.IM BLOG

DUN.IM BLOG

我们还年轻,可不想看到这个世界处在毫无自由、隐私的边缘。

OCRify 是一个在线,通过文字识别〔〕技术将 转换为可编辑的文字,有鉴于当今的型手机甚至 AI 人工智能都能做到类似功能,对于 OCR 工具的需求可能就没有那么强烈了,但如果手边恰巧没有合适的工具,临时有图片想要复制图片上的文字内容、转存到其他编辑器还是很有帮助。

OCRify 特色是不用安装,打开、把要识别的文件拖曳上去就能自动识别内容,有最大文件 10 MB 和格式限制,支持 PDF、PNG、JPEG、WEBP、TIFF、GIF 和 BMP,PDF 部分最多 10 个页面,对于大多数用户来说应该没什么问题。

OCRify 支持多种语言的文字识别,包括亚洲、欧洲、中东和非洲的语言,例如中文、阿拉伯语、俄语、法语、德语、日语、韩语等一共涵盖了 60 种语言,几乎所有内容丢上去 OCRify 都能正确被识别、转为纯文字,但类似的工具都有可能遇到无法 100% 正确识别的问题〔例如有错字或漏字〕,记得在使用时还是要自己手动检查。

进入 OCRify 网站后可先从右上角切换语言,自带中文界面。

接着直接把要识别的图片或 PDF 文件拖曳到网站上,单文件最大不能超过 10 MB〔PDF 最多不超过 10 页〕。

选好文件后按下「开始识别」,等待几秒钟就会显示结果。

OCRify – 免费快速 OCR 工具,识别转换图片和 PDF 文字内容

以下图的图片为例,OCRify 会标记出有正确识别的文字范围,以红色的框线标注。

点击一下后就会出现纯文字格式,按下右上角「复制」即可保存到剪贴板。

还可以点击上方「仅文字」切换为纯文字内容,这里会显示从图片或 PDF 识别到的所有文字。

前面介绍的是以 OCRify 识别图片的示例,下图是识别 PDF 文件的结果,一样会标注找到的文字内容,很棒的是有些文字如果是直式方式书写,OCRify 一样可以识别、同时转为一段文字内容,不会因为直式而出现错误。

Windows 环境下 Maven 的安装以及代理设置

访问 Maven 的下载页面:https://maven.apache.org/download.cgi (可能需要梯子)

点击 Link 下载 Binary 版本即可。此处我们下载的文件中包含了可执行文件。完成下载之后我们需要将这些文件放到一个较为固定的位置,然后设置环境变量以便于我们在命令行环境能够正常访问这些脚本。

Maven 具有包管理器的作用,这类应用在国内都面 GFW 的问题,因此需要需要将 Maven 接入代理以便其能够正常下载以来资源。设置方式是在当前用户目录下 .m2/settings.xml 文件(如果没有此文件需要手动创建),并在此文件中添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<settings>
<proxies>
<proxy>
<id>local-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>localhost</host>
<port>port</port>
<!-- 如果你的代理需要身份验证,可以取消下面的注释并填写 -->
<!-- <username>your-username</username> -->
<!-- <password>your-password</password> -->
<nonProxyHosts>localhost</nonProxyHosts> <!-- 可选:不使用代理的主机 -->
</proxy>
</proxies>
</settings>

注意将其中的地址和端口设置替换成你自己的 HTTP 代理的地址和端口。

引发 LTO 优化后续错误的一种可能及解决方法

最近开发 C++ 的程序在链接阶段发生了一个 LTO 相关的错误。链接时优化(Link Time Optimization, LTO) 是一种编译优化技术,旨在通过在链接阶段执行全程序优化来提升代码性能和减少二进制文件大小。其主要原理是在链接阶段而不是在编译阶段进行更高级的优化,允许跨文件的全局优化。LTO 的基本原理和过程是:

  • 中间表示:在编译阶段,编译器将每个源文件编译为一种中间表示(如 LLVM bitcode),而不是直接生成目标代码。
  • 全局优化:在链接阶段,链接器将所有中间表示文件合并,生成一个完整的程序表示。此时,优化器可以进行跨文件的全局优化,如函数内联、去除冗余代码和跨模块优化。
  • 生成目标文件:优化完成后,链接器生成最终的可执行文件或库。

我遇到的错误信息中的管件一句是:

1
attempt to add bitcode file after LTO (htons)

可以看到错误信息提示我们链接系统试图在 LTO 优化之后添加 bitcode。并且在后面的括号中链接器提到了一个符号 htons,这是来自 libc 库的一个符号。基于的 https://github.com/emscripten-core/emscripten/issues/16836 这个链接中的启发,我发现了一个 LTO 优化可能面临的普遍性问题。这个问题是 LTO 会尝试移除一些它认为不需要的符号从而减少编译出来的程序的体积,但是这个判断可能会不准确。它可能将一些实际会被使用的符号删除。为了解决这个问题,我们可以为链接器指定链接输入,强制保留指定的符号以避免错误的移除。针对我遇到的情况,为链接器加上 -Wl,-u,htons 的配置即可解决问题。

  • -Wl: 这个标志告诉编译器将接下来的选项传递给链接器(ld)。-Wl,option 是传递给链接器的标准方法。
  • -u,symbol: 这个选项告诉链接器强制包含指定的符号 symbol。在这个情况下,-u,htons 和 -u,htonl 告诉链接器强制包含 htons 和 htonl 函数

Unraid: 解决 12 版本中网页界面无法打开的问题

最近在 Unraid 升级 6.12.x 版本以后会偶发性的产生一个 Bug,其表现为 Unraid 网页无法打开(这里是指访问 Unraid IP 地址无法访问 Web 管理界面)。这个问题实际上是由于 Unraid 上的 Nginx 服务失去响应导致的。这种情况下我们只需要干掉 Nginx 进程并重启就可以了。

首先通过 ps -aux | grep nginx 找到 Nginx 主进程的 PID,然后通过 kill -9 <PID> 干掉进程。要再次启动 Nginx,可以运行

1
2
cd /etc/rc.d/
./rc.nginx start

注意通过 ./rc.nginx restart 在正常情况下可以重启 Nginx 服务,但是在 Nginx 处于无法响应的状态时,这个脚本无法杀死 Nginx 进程,必须要手动终止。

Ubuntu 中如何彻底删除一个用户

在 Ubuntu 中彻底删除一个用户涉及到几个步骤,不仅仅是删除用户,还可能包括删除与用户相关的数据。以下是步骤指南:

  1. 确保用户未登录: 在删除用户之前,最好确保该用户未登录。你可以使用 who 命令来检查哪些用户当前已登录。

    1
    who
  2. 删除用户: 使用 userdel 命令删除用户。如果你还希望删除用户的主目录和邮件池,可以使用 -r 选项。

    1
    sudo userdel -r username

    其中,username 是你想删除的用户的用户名。

    注意:-r 选项会删除用户的主目录(通常是 /home/username)。确保你已经备份了所有重要的数据!

  3. 检查文件系统: 即使删除了用户和其主目录,可能仍然在文件系统上遗留一些属于该用户的文件。你可以使用 find 命令来搜索这些文件:

    1
    sudo find / -user username

    这将列出所有属于 username 的文件。根据你的需要,你可以手动删除这些文件或更改它们的所有权。

  4. 删除用户的 cron 作业: 如果用户配置了任何 cron 作业,你还需要手动删除它们。检查 /var/spool/cron/crontabs/username 是否存在,如果存在,删除它。

    1
    sudo rm /var/spool/cron/crontabs/username
  5. 其他服务或配置: 如果该用户有其他特定的配置,例如在 /etc/sudoers 中的条目或在其他服务中的特殊访问权限,你需要手动检查并删除它们。

请在进行任何删除操作之前确保备份所有重要数据。确保你明确知道正在执行的操作,避免意外删除重要文件或配置。

解决在 Openvpn 客户端中部署的 Web 服务不可用的问题

遇到这样一个蛋疼的问题,我有一台服务器,上面部署了一个 web 服务,同时我也想把这个服务器作为客户端连入一个 OpenVPN 虚拟网络,并且我希望服务器上的程序能够通过 OpenVPN 的网关来访问外部网络,这主要是为了隐藏服务器的身份。但是在 OpenVPN 连接之后,原有的 Web 服务将无法访问。通过调试分析可以法线,造成这一现象的原因是 Web 服务的响应包也被路由配置路由到 OpenVPN 的 tun0 接口中。这导致响应无法返回给原来的请求服务器。如何解决这个问题呢?

如果你在网络上搜索这类问题你会发现各种文章给出的方案一般都是为 OpenVPN 的配置文件添加 route-nopull 选项来阻止 OpenVPN 设置客户端路由,但是这会导致客户端的对外访问无法通过 VPN 进行。事实上,从 IP 路由的角度来看,如果我的服务器是 A,而某个访问 Web 服务的 IP 是 B,同时 B 也可能是 A 试图访问的外部的目标服务提供者。对传输层路由而言,A 给 B 的 Web 服务响应和 A 主动发往 B 的请求是无法区分的。从这个角度来看,要达成 inbound 和 outbound 流量分别路由似乎是不可能的。

但是其实我们有一个突破点:那就是 Web 服务总是在本机使用固定的端口和请求者通信,我们可以通过端口来区分 inbound 和 outbound 流量。首先我们输入下面的命令:

1
iptables -t mangle -A OUTPUT -p tcp -m multiport --sports 80,443 -j MARK --set-mark 1

在这个命令中,我们会让路由表观察从本地的 80 和 443 端口发出的包,并给这些包打上一个特定的标签(--set-mark 1 的作用)。然后输入下面的命令:

1
ip route add default via [gateway addr of eth0] dev eth0 table 100

这个命令会创建一个新的路由表 table 100,然后在这个表中加入一个默认路由,将流量送往原有的网关。然后再运行下面的命令:

1
ip rule add fwmark 1 table 100

这个命令会让带有标记 1 的包使用 table 100 路由表进行路由。运行完上面的配置后,web 服务就可以正常访问呢了。


以上方法是在 ChatGPT 的协助下摸索出来的,我的提问是:

如何通过 iptables 或者 route 命令,让访问 80 与 443 端口的包使用 tun0 接口,而访问其他端口的包使用 eth0 接口?

GPT 的回答是

可以使用iptables和route命令结合起来实现此目的。具体操作如下:

首先需要添加一条规则,将访问80和443端口的包标记为一个特定的标记值(比如"1"),使用tun0接口发送出去。iptables规则如下:

1
iptables -t mangle -A OUTPUT -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1

接着需要添加一条规则,将标记为"1"的包使用tun0接口发送出去。route命令如下:

1
2
ip route add default dev tun0 table 100
ip rule add fwmark 1 table 100

最后需要添加一条规则,将所有未被标记的包使用eth0接口发送出去。route命令如下:

1
ip route add default dev eth0

以上三个步骤分别实现了:将访问80和443端口的包标记,并使用tun0接口发送出去;将标记为"1"的包使用tun0接口发送出去;将所有未被标记的包使用eth0接口发送出去。这样就实现了访问80和443端口的包使用tun0接口,访问其他端口的包使用eth0接口的效果。

介绍一种"新"的隧道技术: spiped

在之前的文章SSH隧道:访问翻墙服务器的临时性手段 的时候介绍了一种使用 SSH 隧道进行端口映射,进而进行手动的流量混淆的技术。就稳定性来说这个方案是经受了考验的。在过去几年里,无论任何时候 SSH 隧道都是能够提供稳定可靠的链接的。不过,SSH 隧道的性能是一个问题。根据 Stackoverflow 上的 这个问题下的回答 来说:“当你通过TCP隧道传输TCP时,性能问题就会出现,因为您有两个层执行自适应纠正”。在这篇文章里面我介绍一个较新的方案。

1 简介

新的方案设计一个新的工具:spiped(github)。spiped是一种安全的、轻量级的加密通信工具,可用于在不安全的网络中传输敏感数据。它的设计目标是提供简单、易于配置和使用的加密通信,而不需要复杂的密钥管理或公钥基础设施。spiped使用对称密钥加密算法,可以在客户端和服务器之间建立加密通道。它可以用于保护各种类型的数据流,包括SSH、Telnet、HTTP和SMTP等协议。spiped的另一个优点是它可以在不同的平台上使用,包括Linux、FreeBSD、OpenBSD和Windows等操作系统。

2 使用方法

spiped 的使用非常简单。在 Ubuntu 上可以通过 apt 来安装。也可以自行编译。在完成安装以后,我们首先进入服务端,运行下面的命令生成一个秘钥:

1
dd if=/dev/urandom bs=32 count=1 of=keyfile

其中 keyfile 是生成的秘钥文件,注意将其保管到合适的位置。然后用下面的服务启动 spiped 服务端服务:

1
spiped -d -s '[0.0.0.0]:8025' -t '[127.0.0.1]:25' -k /path/to/keyfile

注意,不同于 ssh 使用同一个 TCP 链接来走所有的隧道流量,spiped 会为每个流创建一个独立的 TCP 链接。因此在做代理中介使用时,spiped 可能会需要创建数量较多的 TCP 链接。spiped-n 配置可以指定最大链接数量,这个数值默认是 100,对于代理应用来说这是不够的。你可以将其设置为 10000。

其中 -s 后的地址是服务端的监听地址,-t 的转发的目标地址,-d 表示将加密的流量从 -s 后的地址解密后发往 -t 后面的地址。这里我们可以填写 Shadowsocks 服务监听的地址。注意 Host 可以保持成 127.0.0.1 的形式。这样,我们可以在防火墙中把 Shadowssocks 的公网监听端口关闭,仅允许从加密隧道访问,这样可以提升安全性。

上面的命令在输入后会自动进入 Daemon 模式运行。

然后我们来到客户端(一般是跳板机),将服务端生成的秘钥文件下载到客户端,运行

1
spiped -e -s '[127.0.0.1]:25' -t $SERVERNAME:8025 -k /path/to/keyfile

其中 $SERVERNAME 是服务端的 IP 地址。注意用 [] 包裹的形式来填写。如果这里说的客户端也是 Shadowsocks 的机器,那么这里的源地址(-s 后的地址)可以写 127.0.0.1,但是如果是跳板机,那么应该写成 0.0.0.0

在上面的设置中,方括号内可以写入 IPv6 地址,但是注意 IPv6 的全网段监听地址就不能写 [0.0.0.0] 了,而是要写 [::]

客户端的程序也是会自动进入 Daemon 模式运行。

完成设置之后,访问客户端(跳板机)的 25 端口就相当于直接访问服务器的 25 端口。

3 后记

请注意,spiped:

  • 需要一个强密钥文件:通过-k选项指定的文件应该具有至少256位的熵。(dd if=/dev/urandom bs=32 count=1是你的好朋友。)
  • 需要来自/dev/urandom的强熵。(确保您的内核的随机数生成器在引导时被种子化!)
  • 不提供任何防止通过数据包计时泄露信息的保护:在spiped上运行telnet会保护密码不会被直接从网络中读取,但不会掩盖输入节奏。
  • 对于交互式会话,可以显着增加带宽使用:它以1024字节的数据包发送数据,并将较小的消息填充到此长度,因此如果不能与相邻字节合并,则1字节的写操作可能会扩展到1024字节。
  • 使用对称密钥——因此,任何可以连接到spiped“服务器”的人也可以冒充它。

如何使用 Proxifier 来进行流量代理控制

Proxifier 是一款网络工具软件,可以帮助用户通过代理服务器进行网络访问,实现匿名化、翻墙、加速等功能。支持多种代理协议,规则管理,流量监控和日志记录等功能,提高网络连接的灵活性和智能化。注意 Proxifier 本身并不是一个代理软件,也不是一个 VPN 软件,其作用是控制其他其他软件访问代理的方式。

上一篇文章我提到了可以试用 Proxifier 来解决通过 Shadowsocks 代理访问呢 ChatGPT 频繁出现 Something Went Wrong 的问题,在本文中我们来展开讲一下具体的做法。

1 准备工作

1.1 软件下载

Proxifier 的官方网站是 https://www.proxifier.com/,其正版价格较贵,约 40 美元。不过,较早的 2.x 版本存在破解版。读者可以根据自己的经济状况来选择。

1.2 代理准备

如同开头提到,Proxifer 本身不是一个代理程序,读者应该自己提前准备好代理。这些代理中,无论是 Shadowsocks、V2Ray 还是其他常见的代理程序,都会在客户端本地重建一个 Socks5 代理,这一般都可以在代理客户端程序的配置或者服务器设置中看到。下图给出的是 Shadowsocks-NG 客户端在 macOS 中的系统配置,可以看到程序在本地 (localhost) 的 1086 端口创建了一个 Socks5 代理。

这个代理会被进一步转成 http 代理,从而被浏览器使用,这个转换过程是导致 ChatGPT 链接不稳定的元凶。接下来我们要使用 Proxifier 让 ChatGPT 直接使用 Socks5 代理。

2 设置 Proxifier

2.1 添加代理

我们以知乎上这篇文章为范本简要讲一下设置过程。首先我们需要将现有代理软件提供的 Socks5 服务告知 Proxifier,这通过添加代理服务器实现。

注意一般各种代理软件在本地创建的代理都是无需验证的,我们可以取消验证启用。输入设置之后,可以点击检查确认设置是否正确。

3 设置规则

为了让 ChatGPT 的访问能够通过 Proxifier 访问代理,我们需要配置 Proxifier 的代理规则。

添加代理规则的页面如下:

我们有两种方法引导 ChatGPT 的网络访问:

  1. 我们可以选择下载 ChatGPT Desktop 客户端,然后通过代理规则中应用程序过滤规则找到 ChatGPT 程序,然后让目标主机为空(这意味着所有的目标主机都会服从本规则);
  2. 将应用程序部分置空,然后在目标主机中填入 ChatGPT 访问的域名。经过我的试验发现,填入 chat.openai.com; challenges.cloudflare.com; *.openai.com; 即可。

事实上,因为 Proxifier 能够全局性地处理所有网络访问,因此,第二种方法对于使用 ChatGPT Desktop 的用户来说同样有效。下图是完整代理规则。

至此我们就完成了设置,你可能需要重启浏览器才能能让 Proxifier 成功地引导 ChatGPT 的流量。

使用 Shadowsocks 访问 ChatGPT 频繁出现 Something Went Wrong 问题的解决方法

update at 2023.4.27:

Github 上有人做了一个开源的油猴脚本 KeepChatGPT 可以解决这个问题。在浏览器上这个脚本可以正常使用,但是注入到客户端时(尽管内部仍然是一个浏览器)会出现错误。

update at 2023.4.12:

在 Windows 上这套方法存在一定的问题。可能的原因是 Proxifier 的代理权限有时候会被 Shadowsocks 客户端,也就是 Privoxy 争抢。

由于国情原因我们使用使用 ChatGPT 需要使用各种形式的代理,这时我们肯能会发现在与 ChatGPT 对话的过程中可能会出现下面的错误:

Something went wrong. If this issue presists please contact us through our help center at help.openai.com

这种错误一般在我们再让网页空闲一段时间(通常是一分钟)后再次提问时出现。当然,去 OpenAI 的帮助中心是不会搜到什么有用的信息的。如果你去检索这个问题,你能得到的最好答案是在出现这个页面之后刷新页面,然后回到对话窗口继续对话即可。但是刷新后如果再次出现空闲窗口的情况,这个问题会反复出现,因此你在对话中就不得不反复地刷新页面,再加上每次页面重载你都需要去勾选 Cloudflare 的机器人验证框,这就会极大程度上拖慢我们的速度,影响产品体验。

这个问题是否可能是由于我翻墙访问导致的呢?我使用的翻墙软件是 Shadowsocks,经过一番搜索,一个 Github Issue 的讨论给了我灵感。

讨论地址:https://github.com/shadowsocks/shadowsocks-libev/issues/2149

尽管讨论的题目和 ChatGPT 没有直接关系,但是这个回复提到,Shadowsocks 在构建代理管道时,会在客户端使用 Privoxy 来讲 Socks5 代理转换成 http 代理,进而被浏览器使用。Privoxy 的配置中包含了 Socket 连接时长方面的控制。于是我查看了我本地的 Shadowsocks 使用的 Privoxy 的配置文件,这个文件在 MacOS 中位于 /Users/lena/Library/Application Support/ShadowsocksX-NG/privoxy.config 文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
toggle  1
enable-remote-toggle 1
enable-remote-http-toggle 1
enable-edit-actions 0
enforce-blocks 0
buffer-limit 4096
forwarded-connect-retries 0
accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 5
socket-timeout 60

forward 192.168.*.*/ .
forward 10.*.*.*/ .
forward 127.*.*.*/ .
forward [FE80::/64] .
forward [::1] .
forward [FD00::/8] .
forward-socks5 / 127.0.0.1:1086 .

# Put user privoxy config line in this file.
# Ref: https://www.privoxy.org/user-manual/index.html

可以看到 keep-alive-timeoutsocket-timeout 这两个选项设定的超时时间都比较低。我做了下面两个尝试:

  1. 将这两个设置调高,并重启 Shadowsocks,但随后发现 Privoxy 重置了设置文件;
  2. 我手动 kill 掉正在运行的 Privoxy 并且手动使用更新后的 config 文件调起一个新的进程,但是仍然没有解决 Something went wrong 的问题;

至此,我也不想和 Privoxy 纠缠下去,既然问题出在 Socks5 代理转 Http 代理的环节,我们可以使用 Proxifier 这个软件直接使用 Shadowsocks 提供的 Socks5 代理,就可以很好地解决这个问题。

Proxifier 的教程网上非常多,我就不在这篇文章里赘述了。

Proxifier 的使用参加我的文章:如何使用 Proxifier 来进行流量代理控制

三星手机的「捷径」,如今更好用:Bixby 日常程序 +

若想进阶 Power User,一款趁手的自动化工具必不可少,在移动设备上,iOS 快捷指令和 Android 平台的 Tasker 是个中翘楚,少数派已有数不清的文章介绍。对三星用户来说,其实还有另一个选择:Bixby 日常程序。它最初亮相于 2019 年的 Galaxy S10 系列发布会上,经过两年的迭代,易用性和功能性都有长足进步,覆盖了大部分日常情景。

四月底,三星旗下的另一款系统级增强工具 Good Lock 迎来家族新成员 Routine +,为 Bixby 日常程序添加了多项新特性,玩法更丰富的同时,也让它在生产力方面迈出一大步。这结论缘何而来,是否略显夸张,读罢本文,你应该会有答案。

日常程序,是什么?

鉴于 Bixby 日常程序的默认入口较深,也鲜有文章介绍,切入新功能前,我们不妨先熟悉下本体。如果你还不知道这是什么,请前往「设置 → 高级功能」启用「Bixby 日常程序」选项。为了方便日后查找和使用,我建议同时将其图标添加至应用程序屏幕。下拉通知栏,编辑按钮,还可以将开关添加至快捷面板,随时启用或停用。

启用 Bixby 日常程序

打开 Bixby 日常程序,三星已经为我们准备了数款预设的自动化流程,如在家时更改声音模式和快捷方式,连接耳机时读出特定应用的通知,运动时播放音乐并启用定位服务……点击即可预览具体操作,快速编辑或保存。滑至主界面底部,我们还能通过清晨、驾驶、睡前等推荐的生活情景,按提示一步步创建最适合自己的日常程序,掌握它的基础用法。

建议的日常程序

与可编程能力更强的 Tasker 相比,我更愿意将 Bixby 日常程序称为本地版 IFTTT:图形化用户界面,没有高昂的学习成本,逻辑也是最直观的「如果满足触发条件则执行指定操作」。作为一款预置应用,Bixby 日常程序主要覆盖 Android 系统功能,操作的分类和图标与「设置」一致,支持 Samsung DeX 等独占特性,还能与三星自家设备联动,控制智能家居,开启无线耳机的主动式降噪等。

if trigger then action

最简单的日常程序,也可能为我们省下不少时间。拿基础的「打开特定应用程序」触发条件来说,观影时启用杜比全景声、阅读时进入护眼模式、办公时解除屏幕方向锁定等常用操作,都可以交给 Bixby 日常程序处理。如果你始终开启眼睛舒适度保护,也可以设置为打开设计工具时还原屏幕色彩;在启用自适应旋转的平板电脑上,改成打开部分未适配手机应用时保持纵向显示更合适。最关键的是找准手机使用过程中的痛点,因地制宜。

如果应用程序打开

将多种操作组合,较为复杂的工作流程也不在话下,如:

  • 充电时,自动延长锁屏时间,并开启息屏提醒,不影响续航的同时随时查看通知;
  • 打开游戏,智能调整屏幕分辨率和刷新率,顺便开启无线耳机的游戏模式,降低音频延迟;
  • 连接车载蓝牙,则打开导航应用,读出短信通知,拒接来电并回信;
  • 借助「到达或离开指定地点」触发条件,可以在地铁站切换至 NFC 卡片模式或显示支付宝乘车码,在家和公司采用两套完全不同的手机配置方案。

一次触发,多种操作

当然,触发条件也不局限于一个,给我们更多施展空间。检测到睡眠状态且处于夜间,则开启免打扰模式并降低屏幕亮度;若是还忘记充电,再采取其它措施节省电量,以防关键时刻手机掉线。这种情况下,当日常程序结束时,就不必撤销所做的改动了。上课时段,若在教学区连接至校园 Wi-Fi,调整手机为静音,启动专注模式;想对自己更狠一点,「如果工作日打开摸鱼 App,则关闭摸鱼 App」的日常程序或许会有奇效。

更进一步

Bixby 日常程序的最大软肋,是仅支持预设动作。坐拥自定义 Bixby 快捷命令、读取 NFC 标签、过滤信息关键词等潜力巨大的触发条件,却不支持变量传递;「进入网站」操作离跳转 URL Scheme 只差一步,却必须以 http:// 开头,扩展性远不足以满足进阶用户的需求。

入门以上而专业未满,让 Bixby 日常程序的定位略显尴尬。即将介绍的 Routine +,则在维持易用性的前提下,一定程度上弥补了这个缺陷,我们不妨在下文见识一番。

不止多个加号 SAGA

Good Lock 是三星官方推出的系统定制工具,由功能各异的模块组成。从诞生初期的系统界面美化,到逐步添加的诸多实用特性,现已成为集定制主题、导航手势、通知过滤、多任务处理于一身的全能选手,是所有三星用户都值得安装的利器。如果你未曾听说,不妨阅读少数派的这两篇文章:

近期上线的 Routine + 模块,顾名思义,是 Bixby 日常程序专精,目前支持基于 Android 11 的 One UI 3.1。具体来说,它提供三种新触发条件和三种新操作,配合原有功能,实现更强大且精准的自动化流程。

条件

安装 Routine + 后,再次打开 Bixby 日常程序,你会发现触发条件最底部多出了相应分类,可以覆写指纹、按钮和 S Pen 的硬件设置。如遇熊孩子抢手机,兰花指一伸,直接进入与主系统隔离的儿童空间;S Pen 顺时针画个圈,设备便开始播放音乐,顺便启动番茄计时。按钮操作不妨与其它条件结合,例如上文提到的乘车码,改成在地铁站双击侧面按钮时打开,既方便又不用担心误触发。

新触发条件

操作

Bixby 日常程序的操作中,同样新增了 Routine + 类别,分别为触摸宏、模拟方向键和读出文字。后两者的应用面似乎较窄,需要方向键辅助的触屏应用本就少见,文字转语音也算不上高频操作。我暂时能想到的,只有用 S Pen 隔空玩贪吃蛇比较方便,以及收到催稿信息时能知会一声 TACTICAL NUKE INCOMING 了。触摸宏的画风则大不相同,有必要另起几段详细说明。

新操作

触摸宏的作用,是记录我们的点击、滑动等操作的时间、位置和次序,保存后随时调用,有点类似 Windows 平台的按键精灵。创建触摸宏时,需要先抵达目标界面,然后点击浮动工具栏的录制按钮,执行希望模拟的流程,测试成功后,点击保存即可。为规避 App 响应速度等因素带来的影响,我建议留出一定的容错空间;如果途中不慎误操作,可以回溯历史,依次删除上一步。

创建触摸宏

不用说,Bixby 日常程序自然能与 Bixby 快捷命令配合使用,触摸宏的出现,得以了却我长久以来的夙愿:用 Bixby 控制米家设备。提前录制好动作,创建相应的日常程序,指定一则合适的口令,就可以指挥 Bixby 替我们跑腿了。当然,不设置快捷命令,直接对 Bixby 说「启动 XX 日常程序」就行,Android 11 的电源菜单也远比这高效,但生活还是需要一点仪式感的,不是么?

君子动口即动手

触摸宏的真正价值在于重复的机械化行为,打开应用时点击跳过广告、接近公司时钉钉打卡、快速擦亮闲鱼宝贝、商城抢购热门商品、手机游戏挂机等高频操作,都可以用它轻松搞定。另一方面,导航手势也在触控操作范围内,进入其它 App 不影响触摸宏的录制。因此,只要图标的相对位置不变,一键签到多款 App 的日常程序并无理论障碍。实际运用中,需要保证 App 不会更新改版,可行性不高。

触摸宏的应用之一

纵有诸多限制,我仍将触摸宏视为能引发质变的新功能,跳出有限的预设命令,模拟脚本也难以完成的繁琐操作,极大地拓宽了 Bixby 日常程序的应用边界。由于以「录制」而非「编写」的形式呈现,使用门槛维持在较低水平,缺乏编程知识的普通用户也能掌握。如果在后续更新中,能引入简单的变量传递和识别文字点击特性,Bixby 日常程序将真正踏入专业范畴。

最后,有必要在这里提醒各位读者,借助触摸宏自动化抢券、挂机等行为有几率被判定为使用作弊脚本,导致账户遭到限制甚至封禁,还请谨慎设置,不要滥用。

分享

可能是由于此前的操作都比较简单,Bixby 日常程序并不支持同步,在设备间迁移数据成了麻烦事。新操作之余,Routine + 也带来了日常程序的导入与导出功能,分为二维码和 JSON 两种形式,与朋友分享自己的得意之作或者备份到云端都很方便。不过,导出的日常程序会丢失自定义图标信息,触摸宏也无法完整保留,必须在新设备上重新录制,期待进一步完善。

扫一扫,没惊喜

结语

目前来说,如果你有足够的动手能力和编程知识,Tasker 无疑更加强大,指纹解锁和 S Pen 手势等硬件触发条件也能通过 Logcat Entry 功能实现,可以说是 Bixby 日常程序的上位替代。

但对大多数普通三星用户来说,系统自带的 Bixby 日常程序无需另行付费,上手简单,直观易懂,功能也足以满足日常所需,是自动化工具入门的不二之选。

Routine + 和触摸宏的出现,赋予了 Bixby 日常程序更多可能,让它有能力满足一部分生产力需求。同时,得益于友好的录制方式以及对三星自家特性的充分利用,Bixby 日常程序实现了相较于 Tasker 的差异化亮点。两年间的多次改版与更新,证明了三星对它的重视程度,期待 Bixby 日常程序能维持现有的低门槛,加入更多专业功能,成为 One UI 不可不知的「必备应用」。

白嫖Gemini_API搭建个人AI助理

白嫖Gemini_API搭建个人AI助理

发表于|更新于|实用教程
|字数总计:443|阅读时长:1分钟|阅读量:

说明

本次搭建过程分为两步,第一步获取Gemini_API_Key,第二步搭建适用Key的程序,不考虑Key泄露第二步完全可以省略。
示例: https://chat.xml.wiki 访问码: xml.wiki(输入访问码即可直接试用)

Gemini_API_Key

ChatGPT-Next-Web

有许多程序可以使用Gemini_API_Key,在此只介绍ChatGPT-Next-Web的搭建。事实上你也可以直接使用别人搭建好的,在不输入访问码时将自己的Key填入设置即可。ChatGPT-Next-Web可以使用Vercel、Docker和CloudflarePages三种不同的方式搭建,见官方教程,本节复述CloudflarePages搭建教程。ChatGPT-Next-Web也提供了桌面版本,下载点击安装即可使用。

  • 打开https://dash.cloudflare.com,点击左侧Workers和Pages下的概述
  • 点击创建应用程序后点击Pages连接到Git
  • 链接你的Github账号,选择你Fork的项目后开始设置
  • 项目名称和分支一般默认即可,其他未提及项默认即可
  • 框架预设选择Next.js,构建命令填写npx @cloudflare/next-on-pages@1.5.0
  • 点开环境变量(高级),挨个复制以下内容
    1
    2
    3
    4
    5
    6
    7
    CODE = xml.wiki    #访问码,即登录使用的密码
    CUSTOM_MODELS = -all,+gemini-pro #选择使用的模型
    GOOGLE_API_KEY = ****************** #Gemini_API_Key
    NEXT_TELEMETRY_DISABLE = 1
    NODE_VERSION = 20.1
    PHP_VERSION = 7.4
    YARN_VERSION = 1.22.19
  • 点击保存并部署后立即取消部署
  • 来到你部署的这个项目的设置->函数->兼容性标志
  • 分别在配置生产兼容性标志配置预览兼容性标志两项中填写nodejs_compat
  • 点击部署选择重新部署即可,等待部署完成即可访问
文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

macOS完整安装包下载方法

为什么从商店下载的macOS安装包不完整?

怎样才能下载到全量安装包/安装镜像?

自从macOS 10.12 Sierra之后,Mac的官方商店App Store不再为大家保留OS系统的「已购项目」了。也就是说如果你升级后想要降级或者制作U盘安装盘,而这个版本恰好不是该大版本的最后一个版本(比如10.13.6),那么只能通过一些收集镜像的网站下载了,这又存在着可能的安全问题。

因此我建议大家最好安装每个大版本的最后一个release,并且在前文也提供过App Store的下载链接:macOS系统下载。但是最近却发现通过官方商店下载的安装app不再是几个G大小了,而是换成了几十MB的下载安装器(installer)。比如我现在使用的系统是10.13.2,想要升级到10.13.6,需要用这个几十MB的安装器直接升级,颇有一种OTA的感觉。

但是这不是我们所希望的,因为有了完整的系统安装app我们可以制作U盘安装盘,可以制作DMG和ISO镜像。因此本篇文章想和大家探讨一下几种下载完整macOS安装包的方法。

*大版本:指macOS High Sierra、macOS Mojave等

交流群:Newlearnerの水群

《macOS完整安装包下载方法》

校验SHA1值

这是贯穿本文的重要一步,为了保证下载的完整安装包是原版,够清真,我们必须要校验SHA1值。

已经有人帮大家整理好SHA1表了,开源地址:apple-installer-checksums

重点是对于InstallESD.dmg(主安装包)和BaseSystem.dmg(recovery系统)的校验,大家可以在/Applications/Install*OS*.app/Contents/SharedSupport/路径下面找到它们。

校验方法

OSX:

shasum /Applications/InstallOS.app/Contents/SharedSupport/{Base,Install}*.dmg

Linux, etc:

openssl sha1 InstallESD.dmg

Windows 10 (PowerShell 3+):

Get-FileHash -Algorithm SHA1 InstallESD.dmg

官网下载

App Store下载地址:macOS系统下载

这是最清真的办法了,不过你们可能要问:上面不是说现在商店下载的安装包不完整吗?

没错,但是根据我的发现这样的installer只存在于同一个大版本的升级过程中(类似于增量下载)。也就是说,macOS High Sierra的用户想要升级到10.13.6可能会遇到下载一个20多M的installer,但是macOS Mojave商店下载的是完整的安装包,反之亦然。

所以解决思路是:跨大版本下载

首先你需要有跨版本的DMG或者ISO安装镜像一个,并通过pd安装好macOS系统,前文之述备矣这里就不啰嗦了。安装好之后在跨版本的macOS里面下载好之前或者之后的大版本安装包,并移植到物理机使用即可。

e.g. 我用macOS Mojave虚拟机通过商店下载好macOS High Sierra的安装包,并且是完整的

《macOS完整安装包下载方法》

这个办法可能有点强人所难,我只想要下载安装app用于升级或制作安装U盘,却要下载跨版本的镜像和虚拟机软件。

魔改Installer

只有一个20多M的installer也是有办法get到完整的安装包的。首先去商店下载该installer,然后点击安装运行,会看到下载进度条(如果不放心可以分一个宗卷,然后选择安装在该宗卷里):

《macOS完整安装包下载方法》

这个时候前往该宗卷,可以看到已经有了一个名为macOS Install Data的文件夹。耐心等待下载进度条走完,然后不要点击「重启以安装」,而是在左上角的菜单栏点击退出。

让我们来分析一下正常情况下一个安装包的contents结构:

macOS High Sierra.app
             └── Contents
                          ├── _CodeSignature
                          ├── Frameworks
                          ├── Info.plist
                          ├── MacOS
                          ├── version.plist

                          ├── PkgInfo
                          ├── PlugIns
                          ├── Resources
                          └── SharedSupport

                                        ├── AppleDiagnostics.dmg
                                        ├── BaseSystem.chunklist
                                        ├── BaseSystem.dmg
                                        ├── InstallESD.dmg
                                        ├── InstallInfo.plist
                                        └── AppleDiagnostics.chunklist

其中通过Info.plist可以看到安装包的版本号,而installer和安装包有着高度相似的目录结构,只是少了一个SharedSupport文件夹。因此我们可以通过增加installer的contents从而将installer转变为完整的安装包。

/Applications/InstallOS.app/Contents/里面创建一个名为SharedSupport的文件夹,并把刚刚下载好的macOS Install Data文件夹中的所有文件拷贝到新建文件夹,即制作完毕完整安装包。

此时我们可以按照前文所述,利用这个安装包制作U盘安装盘或者镜像。

Mac Downloader

制作方:macmeup.com

下载:传送门  密码:newlearner

支持下载 macOS High Sierra、macOS Mojave 和 macOS Catalina 部分原版安装 APP, 经过抓包都是从苹果官方服务器下载,放心食用

《macOS完整安装包下载方法》

  • 目前支持的系统版本:

– 10.13.6(17G2208)

– 10.13.6(17G65)

– 10.13.6(17G66)

– 10.14 Beta(18A384a)

– 10.14.4 Beta(18E194e)

– 10.14.4(18E2034)

– 10.14.5(18F2059)

– 10.14.6(18G103)

– 10.15(19A602)

– 10.15.1 Beta(19B77a)

个人猜测该软件是直接爬取苹果官方下载服务器链接的,所以只提供部分版本下载,今后可供下载的版本号也可能会变化。

macOS Patcher

官网地址dosdude1.com

用途:本来该Patcher是用来制作特殊的U盘安装盘或者安装镜像以支持旧款Mac,我们这里只用到下载安装包这一功能

下载

macOS Sierra Patcher

macOS High Sierra Patcher

macOS Mojave Patcher

macOS Catalina Patcher

使用

打开该Patcher,在菜单栏点击下载macOS High Sierra即可

下载完毕不要忘记校验SHA1值

《macOS完整安装包下载方法》

根据我的抓包记录,该Patcher和官方途径下载使用的链接并无二致,因此大家可以放心使用。

《macOS完整安装包下载方法》

《macOS完整安装包下载方法》

Python脚本下载

开源地址macadmin-scripts

下载installinstallmacos.py到Mac,然后用python运行,如图:

《macOS完整安装包下载方法》

该脚本的原理是爬取苹果官网下载链接并收集所有可供下载的os,目前可供下载的os如下:

#    ProductID    Version    Build   Post Date  Title
 1    091-95155    10.13.6    17G66  2019-01-08  macOS High Sierra
 2    091-94326    10.13.6    17G65  2018-07-11  macOS High Sierra
 3    041-69971    10.14.5  18F2058  2019-07-09  macOS Mojave
 4    041-47723    10.14.4  18E2034  2019-03-25  macOS Mojave
 5    041-64745    10.14.5   18F203  2019-05-22  macOS Mojave
 6    041-59913    10.14.5   18F132  2019-05-13  macOS Mojave
 7    091-95774    10.13.6  17G2208  2018-07-30  macOS High Sierra

Choose a product to download (1-7):

选择你要下载的镜像并回车即可。该脚本下载使用的链接经过抓包也是官网链接,放心使用。

下载完毕不要忘记校验SHA1值

后记

当然,大家也可以使用论坛或者各大苹果网站分享的完整安装包,这些大多是专门整理收集来的,不过一定要注意校验SHA1值。一些非最终版本的安装包只能通过这种途径下载(比如10.13.2)。因此也提醒大家安装完系统之后一定要备份安装app以备不时之需。

博主在思考下载完整安装包的方法时,也曾经想过使用mas-cli。不过局限于App Store命令行存在商店下架就无法下载等弊端并没有成功,如果大家有其他方法也欢迎交流。

至此,从完整安装包下载到制作DMG和ISO镜像再到安装虚拟机,从U盘安装盘制作到系统安装,本博客已经形成了完整的体系。

参考文章:

dosdude1.com

macadmin-scripts

apple-installer-checksums

一键脚本自动优选Cloudflare_IP解析到免费域名下

一键脚本自动优选Cloudflare_IP解析到免费域名下

发表于|更新于|实用教程
|字数总计:830|阅读时长:4分钟|阅读量:

说明

之前有人免费提供解析Cloudflare_IP的域名,但很快就被DNS污染了,因此此教程适合自己使用不建议分享。实现的原理很简单,第一使用CloudflareSpeedTest程序进行测速,选出质量高的IP地址;第二使用免费ddns将域名解析到优选的IP;第三使用cron定时执行任务。脚本适用amd64、arm64、arm架构的Linux服务器,安卓手机Termux使用需要做一定的修改,请点击目录直接查看内容。

Dynv6

需要借助Dynv6来获取免费域名和ddns,hostname是注册的二级域名,token位于网站首页左上角Documentation-> APIs页面内,空格之后的不要。两项复制之后在脚本执行后按提示输入即可。

自定义

echo "0 0 * * * timeout 10m $path/bestip.sh > /dev/null 2>&1" | crontab -
双引号内的内容是定时执行命令,为每日0时。
$path/CloudflareST -f $path/ip.txt -tl 200 -sl 6 -dn 5 -dt 10 -o "bestip"
CloudflareST的使用可参考,以上为选择时延小于200ms的IP进行测试,每个测试10秒限制6mb/s以上,得到5个合格IP。
ipv6=$(grep -oE "\b([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}\b" $path/bestip | head -1)
如果对ipv6有需求,请将ip.txt改为ipv6.txt,并将脚本内的ipv4改为ipv6。

脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/sh

check_() {
# 检查服务器架构
architecture=$(uname -m)
case $architecture in
x86_64)
platform="amd64"
;;
aarch64)
platform="arm64"
;;
arm*)
platform="armv7"
;;
*)
echo "脚本不支持 $architecture"
exit 1
;;
esac
}

first_() {
# 下载测速工具并定时每日0点执行
mkdir -p $path && cd $path
latest_release=$(curl -s https://api.github.com/repos/XIU2/CloudflareSpeedTest/releases/latest | grep "tag_name" | awk '{print $2}' | tr -d '",')
download_url="https://github.com/XIU2/CloudflareSpeedTest/releases/download/$latest_release/CloudflareST_linux_$platform.tar.gz"
curl -LO $download_url || exit 1
tar -xvf CloudflareST_linux_$platform.tar.gz && rm CloudflareST_linux_$platform.tar.gz && chmod +x CloudflareST
echo "0 0 * * * timeout 10m $path/bestip.sh > /dev/null 2>&1" | crontab -
read -p "请输入 hostname:" hostname
read -p "请输入 token:" token
}

start_() {
# 测速并更新IP
cat <<EOF > $path/bestip.sh
#!/bin/sh

$path/CloudflareST -f $path/ip.txt -tl 200 -sl 6 -dn 5 -dt 10 -o "bestip"
ipv4=\`grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" $path/bestip | head -1\`
curl -Ls "http://dynv6.com/api/update?hostname=$hostname&token=$token&ipv4=\$ipv4"
EOF
chmod +x $path/bestip.sh && timeout 10m $path/bestip.sh
}

path="/opt/CloudflareST"
check_
first_
start_
exit

Termux

手机使用不必设置定时,mkdir bestip && cd bestip后执行脚本即可。之后每次执行cd bestip && ./bestip.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/sh

first_() {
# 下载测速工具
latest_release=$(curl -s https://api.github.com/repos/XIU2/CloudflareSpeedTest/releases/latest | grep "tag_name" | awk '{print $2}' | tr -d '",')
download_url="https://github.com/XIU2/CloudflareSpeedTest/releases/download/$latest_release/CloudflareST_linux_arm64.tar.gz"
curl -LO $download_url || exit 1
tar -xvf CloudflareST_linux_arm64.tar.gz && rm CloudflareST_linux_arm64.tar.gz && chmod +x CloudflareST
read -p "请输入 hostname:" hostname
read -p "请输入 token:" token
}

start_() {
# 测速并更新IP
cat <<EOF > bestip.sh
#!/bin/sh

./CloudflareST -tl 200 -sl 6 -dn 5 -dt 10 -o "bestip"
ipv4=\`grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" bestip | head -1\`
curl -Ls "http://dynv6.com/api/update?hostname=$hostname&token=$token&ipv4=\$ipv4"
EOF
chmod +x bestip.sh && ./bestip.sh
}

first_
start_
exit
文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

从零开始建立自己的域名和企业邮箱

本文将带领你注册属于自己的域名,并获得以自己的域名结尾的专属邮箱。全程仅需不到 10 分钟[1]。你只需要一台可以上网的设备,支付方式(微信/PayPal/银行卡)和一个现有邮箱。通过本文提到的域名注册商注册的 .com 域名价格为 CN¥79.20/年,并且续费不涨价。该域名注册商免费提供企业邮箱服务,因此不需要额外付费。

[1]:由于全球 DNS 服务器同步需要时间,可能需要 24-72 小时后域名上的服务才能够使用。若注册 .cn 等中国域名还需要进行实名认证,需要额外的时间。其他国际域名(如 .com)则不需要实名认证。

注册域名

首先,你需要注册一个属于自己的域名。域名的注册门槛很低,基本在几分钟内就可以完成注册,并且包括 .com 在内的众多域名后缀均不需要进行实名登记。通常,大多数域名都是按年进行购买。

本文推荐的是 氧熙域名注册 (原 TlOxygen)。该注册商是本站站长亲自建立,是全球第 7 大的域名注册商 PDR Ltd. 的最高级代理之一,提供更多的支付方式和更低的价格。从这里购买域名可以帮助本站持续发展。并且本站域名注册提供了域名删除与退款服务、免费企业邮箱和域名锁等服务。

首先,前往 氧熙域名注册主页(也可以浏览器地址输入 yangxi.tech 前往),进行域名搜索。比如,如果想要注册 guozeyu.com,只需要在搜索框里输入这个域名并点击搜索。如果你不确定想要注册什么后缀,那么也可以不输入后缀,如 guozeyu。如果你更习惯英语界面,或者需要以美元计费的结算方式,请前往 International Version

在首页搜索想要注册的域名查看搜索结果

可以看到,咱们心仪的域名已经被注册了。但是页面下方可以看到更多的 “其他可注册的匹配域名”。

选择一个域名

我们这里选择 guozeyu.online。注意划线价为域名续费的价格,为了可以方便地给域名续费,建议选择续费价格较低的域名。比如 .com 域名续费只需 CN¥79.20/年(国际版为 US$12.59/年),而 .online 的续费价为 CN¥270.00。我对域名的价格一向非常透明,我承认这绝不是市面上最低的价格。下表列出了一些注册商 .com 域名的续费价格

注册商美元/年人民币/年
氧熙/TlOxygen13.7987.60
阿里云万网 [2]10.9979.00
DNSPod [2]-72.00
NameCheap14.58-
GoDaddy19.99-
Cloudflare Registrar [3]9.15
NameSilo10.95
Google12.00

[2]:阿里云万网/DNSPod 注册 .com 域名需要实名认证,可能需要几天后域名才能够正常使用
[3]:Cloudflare Registrar 上注册的域名不支持修改 DNS 解析商、NS 记录,以及粘附记录(Glue Record)

完整的价格列表:中国大陆(人民币)International Version (USD)

注意,本文后续的内容仅适用于在氧熙注册的域名。在其他注册商注册的域名配置有所不同。此外,并不是所有注册商都免费提供 DNS、企业邮箱和域名转发服务。

然后进行结账。结账时建议选择免费的 “隐私保护” 功能,这样你的注册信息(包括邮箱、手机号、地址)就不会公开:

开启 “隐私保护” 功能,并选择 “创建账户”

然后填写注册信息。请确保注册信息是有效的(可以通过电子邮件联系到你),否则域名注册可能会失败。注册完成后即可选择支付方式了。目前支持的支付方式有微信支付、银行卡、PayPal

使用英文填写注册信息选择支付方式,这里以微信支付为例

付款完毕后,会自动跳转到支付成功页,点击 “继续管理订单” 进入后台管理页面。

支付成功

此时,你就可以看到你新注册的域名了。

点击你刚刚注册的域名

配置 DNS

点击你刚刚注册的域名,然后前往 DNS 管理菜单,点击 “管理DNS” 以激活 DNS:

点击 “管理DNS” 以激活 DNS

如果你看到 “您即将提交的信息不安全” 提示,请选择 “仍然发送”。随后看到如下页面即说明已经激活了:

DNS 管理界面

配置企业邮箱

此时我们已经拥有了域名,但该域名下还没有任何服务。我们首先配置企业邮箱,实现任何发往 @guozeyu.online 的邮件都转发到自己的邮箱里。这样有很多好处,比如你可以在注册微博的时候使用 weibo@guozeyu.online,在注册 GitHub 时使用 github@guozeyu.online,这样可以区分不同服务商发来的邮件;也可知道是谁卖了自己的邮箱信息,给自己发送垃圾邮件。

前往电子邮件菜单,点击 “管理电子邮件” 以激活企业邮箱:

点击 “管理电子邮件” 以激活企业邮箱

如果看到 “待验证域所有权 (Pending Domain Ownership Verification)”,则说明 DNS 尚未完成激活,请在 24-72 小时后尝试。新注册的域名默认使用我们提供的 DNS 服务器,邮件记录已经自动配置好了,所以无需手动添加记录。同时,你也可以点击 “设置 (Settings)”,选择 “修改语言偏好 (Modify Language Preference)” 然后选择 “Chinese (Simplified)” 以切换语言到简体中文。此外,如果你知道自己在做什么,也可以将域名换到其他 DNS 服务商,手动配置 DNS 记录。

待 24-72 小时,完成域名所有权验证后,你将看到如下页面,这时我们选择 “添加只转发帐户”:

选择 “添加只转发帐户”

这里我们用户名输入字母 i,“转发至” 输入自己的邮箱。这里只是拿我的邮箱演示。

填写必要转发信息

添加成功后,发往 i@guozeyu.online 的邮件就会转发到你刚刚配置的 “转发至” 邮箱了。但发往其他用户名的邮件依然会被拒收。此时我们需要配置 Catch-All:

点击 “邮件” 菜单中的 “管理 Catch-All”

然后选择 “转发到以下用户/账户”,并输入刚刚设置的用户名 i,然后点击 “应用” 即可。

配置 Catch-All

配置域名转发

目前,浏览器里的网站是无法访问的,因为我们还没有配置用于 Web 的服务器,也没有建立自己的网站。但我们可以配置域名转发,将访问到域名的的流量跳转到其他 URL。比如,你可以设置跳转到自己的微博、GitHub 等网站。具体操作如下:

前往域名转发菜单,点击 “管理域名转发” 以激活域名转发:

点击 “管理域名转发” 以激活域名转发

此时,你可以配置要转发的域名和要转发到的地址:

这里以跳转到我的 GitHub 页面为例

同时,也可以选择高级设置。我建议关闭 “URL掩蔽 / 重定向 / URL隐藏”。

建议关闭 “URL掩蔽 / 重定向 / URL隐藏”

同样,该配置需要 24-72 小时后才能生效。

总结

本文介绍了如何注册属于自己的域名,建立以自己域名结尾的的企业邮箱,以及配置域名转发。后续的文章将会更新如何建立属于自己的个人网站。可以点击页面顶部的关于按钮订阅本网站,这样就不会错过后续的内容啦~

如何解决VPS送中问题

如何解决VPS送中问题

发表于|更新于|实用教程
|字数总计:648|阅读时长:1分钟|阅读量:

说明

当你使用脚本检测流媒体解锁时,可能会发现Youtube premium被标记为CN,恭喜你不用买会员也可以享受到无广告的Youtube了。为什么会这样呢?猜测的原因有:使用代理时开启了定位或开启了Google账号位置记录;你的VPS邻居开启了定位导致IP段被标记。以下将说明其他特征与解决方案。

特征

  • Gmail与Youtube会在首页隐藏图标,你可以输入网址访问。
  • 默认开启安全搜索,不显示敏感内容,你可以在设置中关闭安全搜索。
  • 搜索页面下方会显示Google标记你的位置信息,你可以使用虚拟定位更新这一位置。
  • https://google.com会自动跳转到google.com.hk,你可以使用https://google.com/ncr
  • https://www.youtube.com/red显示当前地区不支持会员,你无法购买Youtube会员。

解决方案

解决方案分两种,一种是向Google报告IP问题,但我在报告IPv6时总是提醒我IP地址无效;另一种是模拟定位,让你的位置信息被Goole重新读取。两种方法的快慢因人而定,可能几个小时也可能一天,或许也都需要接近一个月的时间。

报告IP

点击输入IP地址和国家,持续向Google报告即可。

虚拟定位

虚拟定位的方法也有两种,操作得当会立即改变搜索页面下方的位置信息,而这也是最关键的一步。手机只需要下载虚拟定位软件即可,以下详细介绍电脑浏览器更改位置信息的方法。
首先打开地图,搜索城市查找要定位的位置坐标。然后打开Chrome浏览器访问Google首页搜索我的位置,先不要给网站位置权限,鼠标右键打开开发者工具->检查依次点击标红位置。
20
点击管理之后添加位置,输入位置名称、经纬度及其他信息添加即可。然后再次来到管理点击左侧方框选择刚刚创建的位置名称。紧接着刷新网页,允许网站获得定位权限,点击搜索结果第一行的使用确切位置的定位按钮。现在你的位置就是你输入的坐标,来到网页最下方会看到*** - 根据您的活动记录 - 更新位置信息,点击更新位置信息即可。最后要做的就是等待。

文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

软路由如何只代理网桥Docker

软路由如何只代理网桥Docker

发表于|更新于|实用教程
|字数总计:574|阅读时长:1分钟|阅读量:

说明

你购买并设置了软路由用于代理,让局域网内的其他设备也可以使用。现在所有的流量都将先经过代理程序,这不可避免地会带来损耗,尤其是使用BT时大量的流量会被规则判定以后再直连,甚至也会影响游戏的NAT类型。而且也不得不考虑一个问题:软路由本身总是需要代理吗?为了解决这个问题,我将介绍一下DAE这个代理程序的优点和配置过程。
DAE有什么优点,它的代理性能比其他的好一点点但不多,主要看中的是它的直连性能。由于直连流量并不经过代理程序,会像直连一样直连。而且它可以识别网卡流量,将其LAN接口绑定Docker0网卡可以代理Docker流量,同时将其WAN接口与ETH0解绑就可以让软路由不走代理只代理Docker。

配置

下载安装

DAE的下载安装极其简单,而且有集成了DAE的面板daed便于操控,所以我们只需要安装daed即可。安装过程可以参考Onecloud作为旁路由实现代理,注意:如果你的系统不是armbian,请跳过升级内核,重新选择下载,如x86平台daed-linux-x86_64_v3_avx2.zip

配置说明

在配置Global中找到接口及内核选项,LAN接口绑定使用代理的网卡,如果你是旁路由,绑定与WAN接口相同的网卡即可。此时如果只绑定LAN接口而留空WAN接口,那么软路由内所有流量直连,局域网内流量可以被代理。当绑定Docker0时所有的容器都可以使用代理,如果你只想让其中几个容器被代理,那么稍稍有些复杂。
创建一个网桥用于代理容器连接,此时主机网卡多出br-**,在LAN接口绑定即可代理容器流量。不需要代理的容器不必加入该网卡,流量经过Docker0。

1
2
3
docker network create 要创建的网卡名称
#务必在容器创建时添加--network参数,否则流量默认走Docker0
docker run -d --name=proxy --network=要创建的网卡名称
文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

如何在Alpine上安装Cloudflare_tunnel

如何在Alpine上安装Cloudflare_tunnel

发表于|更新于|实用教程
|字数总计:255|阅读时长:1分钟|阅读量:

说明

Tunnel支持Windows/Mac/Debian/RedHat/Docker,你可以在Alpine上使用Docker安装,但Alpine并不见得总是适合Docker。当机器内存过小,或一些其他原因不能使用Docker时,你可以手动安装Tunnel。

安装过程

首先你要下载Tunnel的运行程序,然后让它保持后台运行,这在其他系统中通常只是一行命令。其他相同操作请参照Cloudflare_tunnel内网穿透

下载运行程序

点击下载cloudflared-linux-amd64,如果你的服务器架构不同,请自行选择,但不要下载安装包。

1
2
3
chmod +x cloudflared-linux-amd64
mv ./cloudflared-linux-amd64 cloudflared
mv ./cloudflared /usr/bin/

添加后台运行

通常会在Tunnel选择系统页面看到一长串的字母,比如cloudflared.exe service install eyJhI***,将${token}替换为eyJhI***即可。

1
2
3
4
5
6
7
8
9
10
11
12
echo '#!/sbin/openrc-run

command="/usr/bin/cloudflared"
command_args="tunnel --no-autoupdate run --token ${token}"
command_background="yes"
pidfile="/run/cloudflared.pid"

depend() {
need net
}' >> /etc/init.d/cloudflared
rc-service cloudflared start
rc-update add cloudflared default
文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

一键脚本合集

一键脚本合集

发表于|更新于|实用教程
|字数总计:376|阅读时长:1分钟|阅读量:

说明

脚本会按照功能进行分类,暂时分为重装,测评和安装工具三大类,更多详细内容请点击当前标题。如果大家有任何脚本想要分享,可以在下方评论区留言。

重装

本节脚本主要涉及DD系统,包含KVM和Openvz/LXC的重装。

leitbogioro

1
wget --no-check-certificate -qO InstallNET.sh 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' && chmod a+x InstallNET.sh

Debian12/raid0/Ubuntu22.04/AlmaLinux/RockyLinux/CentOS9/Fedora38/AlpineLinux/KaliLinux/Windows一键重装,而且长期更新。作者称它史上最强,当然还需要MJJ们检验一番,可以去Nodeseek反馈BUG

MoeClub

1
bash <(wget --no-check-certificate -qO- 'https://raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh') -d 12 -v 64 -p 密码 -port 端口 -a

自动安装,参数自己调整,默认密码MoeClub.org

OsMutation

1
curl -so OsMutation.sh https://raw.githubusercontent.com/LloydAsp/OsMutation/main/OsMutation.sh && chmod u+x OsMutation.sh && ./OsMutation.sh

脚本仅支持OpenVZ7/LXC,可以在Debian/CentOS/Alpine系统之间自由转换。同时也推出了轻量版本,支持小于1G的硬盘重装,请自行查看。

测评

本节脚本主要涉及对主机的评测,包含跑分测试、流媒体检测和三网测速。

YABS

1
curl -sL yabs.sh | bash -s -- -5

测评内容主要包括系统基本信息、硬盘读写速度、iperf3速度测试、Geekbench5跑分测试。

RegionRestrictionCheck

1
bash <(curl -L -s check.unlock.media)

流媒体检测脚本,项目全面而且支持Docker运行。

今天就到这里了

文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

如何使用+86注册台湾Paypal

如何使用+86注册台湾Paypal

发表于|更新于|实用教程
|字数总计:235|阅读时长:1分钟|阅读量:

说明

如果你身处境内又想要一个台湾Paypal,直接注册的话会要求你输入+886手机号。最简单的办法就是去买一个,但如果只有+86的话也不是没有解决的办法。本教程将介绍如何使用+86注册台湾Paypal,建议使用台湾IP避免风控(头铁也不是不行)。

注册Paypal

1.前往任天堂注册账号,国家/地区请选择日本
15
2.进入游戏商店
16
3.填写注册信息,台湾地址
17
18
19

重要提醒

虽然注册账号成功了,但也很容易风控,养号就全靠个人领悟了。如果要求上传身份证明和交易账单,你上传个身份证上去也大概率寄。支付时请设置银行卡汇率,否则就会使用Paypal汇率,比当前汇率要高。
给打游戏的留条活路,不要滥用!

文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

Nat_vps使用技巧合集

Nat_vps使用技巧合集

发表于|更新于|实用教程
|字数总计:465|阅读时长:1分钟|阅读量:

说明

Nat_vps是共享一个公网IP地址的虚拟化主机。一般的机器也就共享ipv4,获得一定数量的高位端口,要么生而被墙要么生而要墙,但是奈何价格便宜。一些机器也会同时附带ipv6地址,相比单ipv6机器性价比更高,直接使用ipv6即可。本教程将介绍如何使用其ipv4,主要分为建站和代理两个部分。

建站

反向代理

IP未墙使用反向代理软件直接监听开放的高位端口即可,以Caddy2为例:(其他请参照Websocket协议的反向代理配置,更改监听端口即可)

1
2
3
4
5
6
7
8
9
10
11
xml.wiki:34567 {
tls /root/cert/pem /root/cert/key
encode zstd gzip #压缩
root * ./ #域名映射根路径
file_server #启动文件服务
}

xml.wiki:34567 {
tls /root/cert/pem /root/cert/key
reverse_proxy localhost:7890
}

Origin Rules

Cloudflare官方支持的非标准端口有HTTP80、8080、8880、2052、2082、2086、2095 HTTPS443、2053、2083、2087、2096、8443。然而Nat_vps的高位端口一般是10000以上,所幸我们可以使用Cloudflare Origin Rules来接入任意非标准端口。
注意:需要提前把用到的域名解析到主机上,并开启小云朵,否则无效。
14

Cloudflare Tunnel

请参照Cloudflare_tunnel内网穿透

代理

建站的端口也可以使用代理,本节讲解使用ws+tls协议,默认使用X-ui等服务端开启ws但关闭了tls,手机电脑等客户端设置端口为443并开启了tls

Origin Rules

首先在X-ui设置代理协议的监听端口,如443,然后按照建站的使用方式设置Origin Rules,最后使用端口转发或反向代理将34567的流量指向443即可。

Cloudflare Tunnel

首先在X-ui设置代理协议的监听端口,如443,然后按照建站的使用方式设置Cloudflare Tunnel即可。

文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

如何让Linux程序后台运行

如何让Linux程序后台运行

发表于|更新于|实用教程
|字数总计:416|阅读时长:1分钟|阅读量:

说明

当我们需要让Linux程序后台运行时,可以使用以下四种方式:添加&符号、nohup、screen以及systemctl。其中systemctl还可以配置开机自启动。

&

1
2
3
./test &    #在可执行程序后空一格添加&
ps -ef|grep test #查看是否在后台运行,可查看PID
killall test #关闭后台运行或kill -9 PID

nohup

1
2
3
4
5
which nohup    #查询是否安装nohup,输出/usr/bin/nohup则已安装
apt install coreutils #安装nohup
nohup ./test & #会输出nohup.out文件
nohup ./test > /dev/null 2>&1 & #关闭输出
kill -9 PID #关闭后台运行

screen

1
2
3
4
5
6
apt install screen    #安装screen
screen -S test #创建一个名为test的窗口并进入
Ctrl a+d #退出窗口但不关闭,使用exit退出且关闭窗口
screen -ls #列出所有窗口
screen -x test #连接到已创建的窗口
screen -X -S test quit #关闭窗口

systemctl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
nano /lib/systemd/system/test.service    #输入以下内容
[Unit]
Description=Test Service
After=network.target

[Service]
ExecStart=/path/to/test.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
systemctl daemon-reload #刷新服务
systemctl enable test #开机自启
systemctl disable test #关闭开机自启
systemctl start test #启动
systemctl stop test #关闭
systemctl restart test #重启
systemctl status test #查看状态

alpine

alpine没有systemd管理服务,因此需要安装openrc。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
apk add openrc
nano /etc/init.d/test #输入以下内容
#!/sbin/openrc-run

command="/path/to/test"
command_args="命令参数"
command_background="yes"
pidfile="/run/test.pid"

depend() {
need net
}
chmod +x /etc/init.d/test #赋予可执行权限
rc-service test start #启动
rc-service test stop #关闭
rc-service test restart #重启
rc-service test status #查看状态
rc-update add test #开机自启
rc-update del test #关闭开机自启
rc-update show #查看所有开机自启
文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

Sshwifty: Web SSH & Telnet Client

Sshwifty: Web SSH & Telnet Client

发表于|更新于|实用教程
|字数总计:748|阅读时长:3分钟|阅读量:

说明

Sshwifty是一个用于SSH的网页客户端,并集成了Telnet功能。相比于ttyd,Sshwifty提供了密匙认证,在能够访问自身服务器的基础上又可以连接其他服务器,十分的便利。

安装

下载安装

点击本小节标题选择适合自己架构的安装包,如sshwifty_0.2.35-beta-release_linux_amd64.tar.gz。注意:Sshwifty登录需要配置SSL证书,否则会报错无法登录,建议使用Caddy反向代理。

1
2
3
4
tar -xvf sshwifty_0.2.35-beta-release_linux_amd64.tar.gz
mv sshwifty.conf.example.json sshwifty.conf.json
chmod +x sshwifty_linux_amd64
./sshwifty_linux_amd64

Docker安装

1
2
3
4
5
6
7
8
9
10
docker run --detach \
--restart always \
--publish 8182:8182 \
--env SSHWIFTY_DOCKER_TLSCERT="$(cat domain.crt)" \
--env SSHWIFTY_DOCKER_TLSCERTKEY="$(cat domain.key)" \
--name sshwifty \
niruix/sshwifty:latest
#若使用反向代理需删去--env,也可自行配置证书或使用自签证书:
openssl req \
-newkey rsa:4096 -nodes -keyout domain.key -x509 -days 90 -out domain.crt

配置详解

sshwifty.conf.json需要与sshwifty_linux_amd64同目录,或放置在/etc//root/.config/之一即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
{
"HostName": "", #默认为空允许所有域名,可指定域名
"SharedKey": "WEB_ACCESS_PASSWORD", #网页登录密码,为空则允许所有人访问
"DialTimeout": 5, #超时时间(秒)
"Socks5": "", #使用Socks5代理
"Socks5User": "", #Socks5用户名
"Socks5Password": "", #Socks5密码
"Servers": [ #可设置多个,在不同端口提供服务
{
"ListenInterface": "0.0.0.0", #监听本地网络接口
"ListenPort": 8182, #监听端口
"InitialTimeout": 3, #HTTP握手超时(秒)
"ReadTimeout": 60, #无操作时后端服务器与客户端保持连接时间(秒)
"WriteTimeout": 60, #服务器等待客户端连接准备接收新数据时间(秒),超时连接关闭
"HeartbeatTimeout": 20, #内部回显请求间隔(秒)
"ReadDelay": 10, #每个请求之间强制延迟(毫秒)
"WriteDelay": 10, #每次写入之间强制延迟(毫秒)
"TLSCertificateFile": "", #SSL证书路径
"TLSCertificateKeyFile": "" #SSL证书密匙路径
}
],
"Presets": [ #预先设置内容,以免手动再填写
{
"Title": "SDF.org Unix Shell", #名称
"Type": "SSH", #连接类型SSH或Telnet
"Host": "xml.wiki:22", #连接地址和端口
"Meta": {
"Encoding": "utf-8", #编码
"Authentication": "Password" #认证方式,密码或密匙认证
}
},
{
"Title": "My own super secure server",
"Type": "SSH",
"Host": "localhost",
"Meta": {
"User": "root",
"Encoding": "utf-8",
"Private Key": "-----BEGIN RSA Will be sent to client-END RSA PRI...\n", #私匙内容
#"Private Key": "file:///root/.ssh/private_key", #也可指定私匙文件
"Authentication": "Private Key", #认证方式,密匙认证
"Fingerprint": "SHA256:bgO...." #公匙指纹数据,默认
}
},
{
"Title": "My own super expensive router",
"Type": "Telnet",
"Host": "10.0.0.1",
"Meta": {
"Encoding": "ibm866"
}
}
],
"OnlyAllowPresetRemotes": false #只允许连接预先设置的远程主机
}
文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

Cloudflare: Quota limit exceeded

Cloudflare: Quota limit exceeded

发表于|更新于|实用教程
|字数总计:76|阅读时长:1分钟|阅读量:

说明

刚刚在用域名给Tunnel授权时提示Quota limit exceeded. You can create no more than 50 tokens (Code: 1001),换了个域名仍然不成功。这是因为Cloudflare的API令牌数量超过了数量50的限制,删除掉不使用的就好了。

解决方法

https://dash.cloudflare.com/profile/api-tokens

文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

通过Cloudflare_tunnel实现远程SSH

通过Cloudflare_tunnel实现远程SSH

发表于|更新于|实用教程
|字数总计:281|阅读时长:1分钟|阅读量:

说明

搭建Cloudflare_tunnel完成后似乎可以内网穿透了,但如果还要使用远程SSH仍需要几个步骤,本教程将介绍通过Cloudflare_tunnel实现远程SSH三种方法。

搭建Tunnel

给自己的SSH控制端也搭建Tunnel,可以使用代理命令<file path>/cloudflared access ssh --hostname ssh.xml.wiki通过SSH工具连接。

添加认证程序

首先打开工作台,点击左侧Access下的Applications创建应用。类型选择Self-hosted
09
然后本页按照下图填写内容,其他保持默认即可。
10
在添加规则页面,Policy name随便填写,具体的规则可按照下图填写,其他保持默认即可。
11
最后一页请如下图选择SSH,其他保持默认即可。
12
别忘记在Tunnel中的Public Hostname创建SSH规则,之后访问网站进行邮箱验证码登录即可。
08

SSH over WEB

简单来讲就是使用工具将SSH转为Web,再由Tunnel进行内网穿透。

ttyd

下载ttyd,默认监听7681端口,可通过参数-p指定。

1
2
chmod +x ttyd
./ttyd login

sshwifty

另见。使用Tunnel可不用配置SSL证书。

文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

Cloudflare_tunnel内网穿透

Cloudflare_tunnel内网穿透

发表于|更新于|实用教程
|字数总计:340|阅读时长:1分钟|阅读量:

说明

借助Cloudflare_tunnel可以实现访问没有公网的主机服务,也可以安全保护自己代理公网端口,甚至在没有标准端口的Nat_vps上白嫖CDN。不需要花费一分钱的内网穿透,只需你添加一张信用卡即可。

教程

首先进入工作台,任意填写你的团队名称,选择Free Plan添加付款方式即可。
然后点击左侧Access下的Tunnels,创建一个Tunnel。
04
05
接着你可以选择自己的操作系统,以Onecloud为例选择Debianarm32bit,到页面下方复制左侧的命令到SSH窗口回车即可。下一步输入自己的Tunnel名称,点击保存。
06
之后填写自己想要穿透的内网端口。Subdomain是二级域名前缀,不要填解析过的;Path是网页路径,没有需求留空;Type选择http,URL是localhost+端口号。
07
最后在SSH窗口输入cloudflared tunnel login会输出一个网址,复制到浏览器打开,选择使用的域名授权即可。

远程SSH

服务中选择Type时请不要选择SSH,直接使用是无效的,你必须在SSH控制端同样安装Tunnel,或者在工作台新建一个SSH应用登录认证后使用。当然,最简单的办法就是把SSH通过Web分享出来再由Tunnel代理。
教程

文章作者: wayen
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wayen

评论
数据库加载中

❌