Zhuang'

一蓑烟雨任平生

一个Bug开场

bug

在上次之后,wrefiyu也终于发现了版本库的问题(好歹我提醒了他好几次),生气的在B站发了动态wrefiyu的动态-哔哩哔哩 (bilibili.com),然后被Linux中国转发,使Piscesys项目的关注度多少上升了点……

后来证明,是我们项目之前的一名开发者误操作导致的。

自此,wrefiyu决定放弃GitHub

元旦那天下午,我和wrefiyu就项目前景谈了挺长时间,再加上最近MATSYA OS – An Evolved Fish的出现给了我一点灵感,就是基于Arch Linux。

我们分析了一下形势,CutefishOS(官方)没有官网论坛,yoyoos没有维护,于是我们决定先建设官网论坛。

本来我们打算借助wrefiyu小学同学刘昊宇的财力购买正规域名,但刘昊宇说他把身份证丢了,国内域名提供商要实名认证,国外的他没法支付。

于是我们考虑临时用一个免费域名代替,wrefiyu看中了.cf,因为Cutefish。

开始的官网是建在热铁盒上的,但由于wrefiyu一行行打HTML效率太低,于是我灵机一动用Hexo写了一个官网,托管在Cloudflare Pages上。

官网于1月2日开始建设,1月4日正式上线运营,网址| Pisces System (piscesys.cf)

到现在,我都很佩服自己的聪明才智。

论坛本来不归我管,计划假设在刘昊宇个人的服务器上,结果他回老家,服务器断电了,于是我又承担起了任务,在没有VPS的情况下,使用FreeFlarum | Sign Up搭建起了官方论坛。顺理成章的成了管理员

论坛于1月6日正式上线运营,地址https://forums.piscesys.cf/

总体来说,论坛还有一点冷清。

现在我的开发环境也转到了WSL上,因为Linux Mint内核太旧不识别我的显卡。

至于Jack77793说的OpenSUSE,还没时间测试。

最后还有一件事,那就是—

JingOS彻底凉了……

关于Windows

早在几天之前,大概就有人发现我在用Windows11系统,其实这是由于上网课,不得不这么做,于是我把开发环境也搬到Windows上来了,并且开始习惯用IDE(Linux下基本在用vim),目前在用Windows下支持最好的Microsoft Visual Studio 2022。

我惊讶的发现Microsoft Visual Studio居然能不依赖SSH从Github导入项目并提交(省了太多事了)

至于其他优点,官方已经说的很明白了。

关于Linux

但我发现有的环境迁移不过来(主要是AUR软件包),于是我决定装双系统。

开始我装了一个Arch,但发现不能安全启动,否则就报prohibited by secure boot policy之后进grub rescue,然后不论怎么努力也进不去。

网上并没有解决方案,发到archlinuxcn论坛也没人回。grub启用安全启动后直接进grub rescue了 / 安装问题 / Arch Linux 中文论坛 (archlinuxcn.org)

于是我决定找一个有安全启动支持的发行版,于是我想到了Ubuntu,但它太臃肿了,我不喜欢,于是,我想到了基于它的Linux Mint。

安装非常顺利,重启后顺利进系统。

但如何维护AUR包呢?当然是Chroot环境了。如何建立?我找到了Android下Termux使用proot运行ArchLinux ARM_厦大第一菜的博客-CSDN博客_proot

虽然架构不同,但自行替换即可。

Rootfs下载地址为Index of /archlinux/iso/latest/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

注意这里有一个arch-chroot脚本可以简化安装过程,使用方法很简单,下载它Arch Linux - arch-install-scripts 28-1 (any),之后解压并复制到相应系统目录

说实在,我现在写它,都有些晚了,昨天我们化学老师便留了一份特殊的作业

作业

我自然也要与众不同一点,于是乎……

唉,不得不说我的化学老师真好,这要换成别的科早气不打一处来了。🤣

后来发现,在九班化学老师也留了这个作业。

昨晚看到很多同学发跨年的朋友圈,不得不评价,他们精力太足了,我早睡觉去了。

不过收到两位同学的祝福还是很开心的

至于晚会么,没精力,没看

新年礼物,没有

但昨晚我和新朋友jack77793交换了GnuPG公钥,令我惊喜的是我终于(大概)知道了他的真名,是一个很有寓意的名字

P.S.wrefiyu的名字也很有寓意

为了保密,这里就不公开了。

昨晚还有一份特殊的政治作业

于是我写下了……

这愿望很小,却饱含了一名初三学子的心酸与无奈

但愿能实现……

总之,新的一年来了,总得有新气象,学习总得上去点,玩性总得少一点。

中考快到了,我也要好好准备

加油💪

昨天语文阅读题的文章是田家的《那碗疙瘩汤》,不得不说,写的太好了,感动的我都不想做题了

作者能用疙瘩汤贯穿全文,将事件交织起来,生动形象,自然流畅,情感自然流露,功底实在高。

在那篇文章中,作者表达了对平凡的母亲的感激与怀念,我又想到了我的母亲,唉,也同样平凡,但我却从未向她表达过任何感激。

这时老师留的仿写作业(上为原文,下为我的仿写):

在氤氲的暖雾中,娘给我舀了一碗疙瘩汤,絮状疙瘩,细密均匀观若温玉,入口软滑,琼瑶玉液也莫过如此

在清晨的水汽中,母亲揭开了锅盖,那一锅梨汤,有梨块嫩黄,银耳洁白,几颗火红的枣儿点缀其间,汤色微红,入口香甜,玉液琼浆,不过如此。

算是表达一下吧。


那段仿写写的倒还不错,但回想我写的作文,大都平淡无实,许多都是借题发挥,脱离生活实际,即使有华丽的辞藻也显得空洞

几年来,只得到几篇有血肉的作文

再到阅读理解,感觉许多情感本来读出来却写不出来

究其原因,感觉是生活经历太少。


最近发现了一个个人网站点墨阁 (zzy-ac.top),站长的文学功底真好,时不时就写首诗,再看我的博客,都是大白话🤣

以后博文也要增加点文学色彩了

先写这么多,未完待续

P.S.题目起什么好呢,评论区提一提……

之前那篇Tor~,对onion还是没讲清楚。

以下内容摘编自https://support.torproject.org/(国内无法访问)

只能通过 Tor 访问的网站称作“洋葱服务”,它们以 .onion 结尾。
比如,DuckDuckGo 的洋葱站点是 https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion/
您可以用 Tor 浏览器访问这些网站。
因为洋葱服务并不能像普通的网站一样被索引,所以必须由网站所有者把洋葱服务的地址分享给你。

洋葱服务 (旧名为“隐身服务”) 是一种只能透过洋葱路由网络访问的网络服务 (例如网站)。

洋葱服务提供了许多架设在非私密网络空间之普通网站所没有的优势:

洋葱服务的真实网络地址与地理位置信息被隐藏,因此很难过滤审查通往该站点之的网络连接,也很难找出该网站管理员的真实身份。

  • All traffic between Tor users and onion services is end-to-end encrypted, so you do not need to worry about connecting over HTTPS.
  • 洋葱服务的网址是为自动生成,因此网站的架设者或管理员无需另行购买网络域名。其网址皆是以 .onion 结尾的,此等设计可以让洋葱路由系统确保所有网络连接都通往正确的站点,并且其连接数据未被窜改。

什么是客户端或洋葱认证?

经过身份验证的洋葱服务是一种洋葱服务,它要求您在访问服务之前提供身份验证令牌(在本例中为私钥)。私钥不会传输到服务,它只用于本地解密其描述符。您可以从洋葱服务运营商处获取访问凭据。联系操作员并请求进入。了解有关如何在Tor浏览器中使用洋葱身份验证的更多信息。如果您想创建具有客户端身份验证的洋葱服务,请参阅社区门户中的客户端授权。

对于其原理,似乎也未讲清楚

根据一位网友的描述

前些天自己搭建了一个,其实onion是自动分配的域名。
这些域名只能在TOR里面访问,很有意思的是,onion是随机分配的,onion还有一个密钥,如果这个密钥被别人知道,这个域名是可以被别人占用的。

所以onion也是用非对称性加密传输数据的,这与Https类似不过严密的多,大概与Esni(Ech)在一个级别(比他们出现的时间早得多)

但具体原理还是没说清楚,比如如何寻址

未完待续

https://gfw.report/blog/gfw_esni_blocking/zh/

昨天,在查阅邮箱之时,忽然看到这样一封邮件

邮件

当时我非常惊喜,觉得在互联网上,又多了一位与我年龄相近的朋友。

感觉我从四年级开始对电脑感兴趣,逛过无数技术论坛,遇到过无数人,但难得有几个我真正喜欢的论坛,也没有几个真正的好友……

尤其在我学会翻墙后,ip属地都经常是未知,更别提真实的交往了

第一个让我感到喜欢的论坛是CutefishOS论坛,原因主要在于六年级小学生wrefiyu(现在初一)的出现,让我消除了隔阂,并在与同龄人的交往中增长学识。

但好景不长,今年五月,CutefishOS项目组解散,我与他短暂失联。其实那段时间我是最煎熬的,还好后来又在Solus论坛上重逢。

这里我不得不提到Alpha.Gu,是他让我接触了archlinux,于是有了下文

而archlinuxcn论坛,就是我第二个喜欢上的论坛了,主要因为其活跃度和风气都是我所欣赏的,这里有很多大佬级人物,比如热心的依云姐姐,还有给我提了很多建议的SamLukeYes……

转眼间,我在archlinuxcn论坛也有几个月了,这时,恰巧这位朋友到来

archlinuxcn

感觉人生中每一次相遇,都是缘分,而我很享受与他人交往的感觉,很多人(我的同学)认为技术是很枯燥的东西,可其中仍可以产生许多动人的故事,在许多场考试的作文中,我都想把这些故事写出来,但奈何作文水平不够……

现在我和那位朋友的交往才刚刚开始,希望友谊地久天长!

可惜这两周学习任务重

最近正在研究,先来适用于Cloudflare Workers的一段万能代码

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
// 替换成你想镜像的站点
const upstream = 'google.com'

// 如果那个站点有专门的移动适配站点,否则保持和上面一致
const upstream_mobile = 'm.google.com'

// 密码访问(true为启用)
const openAuth = true
const username = 'username'
const password = 'passwd'

// 你希望禁止哪些国家访问
const blocked_region = ['KP', 'SY', 'PK', 'CU']

// 禁止自访问
const blocked_ip_address = ['0.0.0.0', '127.0.0.1']

// 替换成你想镜像的站点
const replace_dict = {
'$upstream': '$custom_domain',
'//google.com': ''
}

function unauthorized() {
return new Response('Unauthorized', {
headers: {
'WWW-Authenticate': 'Basic realm="goindex"',
'Access-Control-Allow-Origin': '*'
},
status: 401
});
}

function parseBasicAuth(auth) {
try {
return atob(auth.split(' ').pop()).split(':');
} catch (e) {
return [];
}
}

function doBasicAuth(request) {
const auth = request.headers.get('Authorization');

if (!auth || !/^Basic [A-Za-z0-9._~+/-]+=*$/i.test(auth)) {
return false;
}

const [user, pass] = parseBasicAuth(auth);
return user === username && pass === password;
}


async function fetchAndApply(request) {
if (request.method === 'OPTIONS') // allow preflight request
return new Response('', {
status: 200,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': '*',
'Access-Control-Allow-Methods': 'GET, POST, PUT, HEAD, OPTIONS'
}
});

if (openAuth && !doBasicAuth(request)) {
return unauthorized();
}
const region = request.headers.get('cf-ipcountry').toUpperCase();
const ip_address = request.headers.get('cf-connecting-ip');
const user_agent = request.headers.get('user-agent');

let response = null;
let url = new URL(request.url);
let url_host = url.host;

if (url.protocol == 'http:') {
url.protocol = 'https:'
response = Response.redirect(url.href);
return response;
}

if (await device_status(user_agent)) {
upstream_domain = upstream
} else {
upstream_domain = upstream_mobile
}

url.host = upstream_domain;

if (blocked_region.includes(region)) {
response = new Response('Access denied: WorkersProxy is not available in your region yet.', {
status: 403
});
} else if(blocked_ip_address.includes(ip_address)){
response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', {
status: 403
});
} else{
let method = request.method;
let request_headers = request.headers;
let new_request_headers = new Headers(request_headers);

new_request_headers.set('Host', upstream_domain);
new_request_headers.set('Referer', url.href);

let original_response = await fetch(url.href, {
method: method,
headers: new_request_headers
})

let original_response_clone = original_response.clone();
let original_text = null;
let response_headers = original_response.headers;
let new_response_headers = new Headers(response_headers);
let status = original_response.status;

new_response_headers.set('access-control-allow-origin', '*');
new_response_headers.set('access-control-allow-credentials', true);
new_response_headers.delete('content-security-policy');
new_response_headers.delete('content-security-policy-report-only');
new_response_headers.delete('clear-site-data');

const content_type = new_response_headers.get('content-type');
if (content_type.includes('text/html') && content_type.includes('UTF-8')) {
original_text = await replace_response_text(original_response_clone, upstream_domain, url_host);
} else {
original_text = original_response_clone.body
}

response = new Response(original_text, {
status,
headers: new_response_headers
})
}
return response;
}

addEventListener('fetch', event => {
event.respondWith(fetchAndApply(event.request).catch(err => {
console.error(err);
new Response(JSON.stringify(err.stack), {
status: 500,
headers: {
'Content-Type': 'application/json'
}
});
}));
})


async function replace_response_text(response, upstream_domain, host_name) {
let text = await response.text()

var i, j;
for (i in replace_dict) {
j = replace_dict[i]
if (i == '$upstream') {
i = upstream_domain
} else if (i == '$custom_domain') {
i = host_name
}

if (j == '$upstream') {
j = upstream_domain
} else if (j == '$custom_domain') {
j = host_name
}

let re = new RegExp(i, 'g')
text = text.replace(re, j);
}
return text;
}

async function device_status (user_agent_info) {
var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
var flag = true;
for (var v = 0; v < agents.length; v++) { if (user_agent_info.indexOf(agents[v]) > 0) {
flag = false;
break;
}
}
return flag;
}

未完待续

前言

前几天那场考试,我写了一篇名为《触摸现实》的作文,讲的就是我从进入暗网到逃离暗网的经过,在那里我把暗网描述为一个十分黑暗的地方,实际上我是很违心的,写成这样完全是题目和法律的要求。

概念

首先我们来了解一下什么是暗网。这个在之前那篇我的Go-pass-GFW简史中提到过,但说实在,那篇文章我说的都不太对。

  1. 广义上来说,不是所有人都能访问的(常规搜索引擎无法找到的),都可以以暗网称之。

  2. 狭义上来说,暗网指Tor网络中的洋葱服务(.onion网址)

明网上有很多关于暗网的文章,大多贬低暗网,主要有两种:

暗网是什么?为何亲历者都闭口不谈?它远比你了解的更恐怖_腾讯新闻

带你见识真正的地狱:暗网人口黑市

第一种比较笼统,他们的作者大多应该没进过,只是把听说或收集到的写了出来。

第二种比较具体,作者可能对某方面有了解,但太片面。

还是下面几段选自https://support.torproject.org/(国内无法访问)的文字比较客观:

“Tor” 这一名称可用于多个不同的组件。

Tor 是一个您能运行在您的电脑上,保护您在互联网上安全的程序。
它会将您的通信在一个由多个中继站组成的分散网络内不断传递,这些中继站被来自世界各地的志愿者们运营,并以此来保护您:这阻止了某些人通过您访问了哪些网址来得知您的网络链接,也防止了您访问的网站获取您的地理位置。
这些由志愿者搭建的中继被成为 Tor 网络。

大多数人通过 Tor 浏览器使用 Tor。它是一个基于火狐浏览器开发的版本,并修复了许多隐私问题。
您可以在我们的关于页面了解更多信息。

Tor 项目是一个非盈利性(慈善)组织,它维护和开发 Tor 软件。

洋葱服务允许人们匿名的访问和发表信息,包括架设匿名网站。

洋葱服务还被依赖于提供一系列的服务:去元数据式的聊天,文件共享,利用诸如SecureDrop洋葱共享 进行的记者之间的互动和资源共享,更安全的软件升级,和更安全的访问如 Facebook 这样网页的渠道。

These services use the special-use top level domain (TLD) .onion
(instead of .com, .net, .org, etc.) and are only accessible through the
Tor network.

When accessing a website that uses an onion service, Tor Browser will
show at the URL bar an icon of an onion displaying the state of your
connection: secure and using an onion service.

To learn more about onion services, read How do Onion Services work?

“嗨!我正在使用 Tor 浏览器访问 xyz.com ,不过似乎你们并没有允许 Tor 用户访问。
我建议您重新考虑这个决定;Tor 被世界各地的人用来保护隐私和对抗审查。
封锁 Tor 用户意味着也可能封锁了希望在专制国家自由的浏览互联网的用户,希望隐藏自己避免被发现的研究人员、记者、举报人和社会活动家,或只是希望不被第三方跟踪的普通人。
请采取强硬立场支持数字隐私和互联网自由,以及允许 Tor 用户访问 xyz.com,谢谢。”

Tor 被设计成通过防止被各种人(甚至是我们)监控和审查来抵御人权和隐私。
我们厌恶用 Tor 做糟糕的事情的人,但是我们并不能在剔除他们的同时,不伤害到人权活动者,记者,虐待后的幸存者们,以及其他用 Tor 做好事的人们。
虽然我们仅需要增加一些软件后门就可以阻止某些人使用 Tor 网络,但是这会导致我们的用户遭更容易受到专制政权和其他组织的攻击。

(本意是好的,只是被滥用了而已)

实践

在上面那段浓墨重彩的叙述后,这一段好像都不怎么重要了

实际上现在进入暗网已经相当简单了,只需要Tor Browser这个浏览器,配置网桥。https://support.torproject.org/有详细介绍,可惜已经被墙。

为了方便大家,我将Tor浏览器用户手册的几篇文章搬运了过来

下载

移动 TOR

网桥

规避审查

我也为大家准备了几个网桥,以彩蛋的形式出现,欢迎寻找……

补充

Tor Browser也是可以访问明网的,这时它的作用就类似VPN,隐藏你的真实IP。

VPN可以访问的外网Tor Browser也可以。

避坑指南

实际上使用 Tor 保护自己时千万不要做这九件事! - 哔哩哔哩 (bilibili.com)已经讲的很详细了。为避免该文章以后再遭封杀,现镜像如下

https://tips.zhuang82.tk/Torbk

补充几点:

  1. 少用Google的产品,否则你会遇到n多个“Are you human?”

  2. 少看视频,因为网桥带宽不大

  3. Tor维护不易,有钱的各位建议捐助(一定要用比特币)

  4. 英语要学好,词典带身边

  5. 网上有把VPN和Tor一起用的教程,普通人最好别折腾,因为安全问题(Tor project已经不推荐这种方式了)

法律问题

就动动眼睛不会有事的……(千万别动心)

后记

一张图也没有(图床容不下这些图)

0%