普通视图

发现新文章,点击刷新页面。
昨天以前首页

独立博客18周年

2025年4月22日 04:22
威言威语独立博客上线至今已有18周年。我也从从熬夜调模板的技术小白,到两个孩子的父亲。这个博客也像我的另一个孩子,见证着它的成长,虽然不完美,但很真实。互联网像间老茶馆,看着博友们来了又走,而这个小站始终亮着灯,也希望可以一直亮下去。

自托管 Bitwarden

2025年4月17日 23:20

起因

使用浏览器保存密码,是我十年以来从使用傲游浏览器开始的习惯。得益于导出和导入的便捷,我换过很多浏览器,这些密码依然被完整的迁移到了我现在使用的 edge 浏览器上,且 edge 安卓版也支持作为密码管理器给应用填充密码,至此我都没有更换密码管理器的想法。

前阵子有博主给我推荐了 keepass,加上浏览器保存的四百多个密码中绝大多数使用的同一个密码,一旦泄露一个,被撞库的后果不堪设想,于是我有了更换密码管理器,且使用这玩意生成复杂密码的念头。

但是阴差阳错,keepass 太丑,我的服务器又可以一键部署 bitwarden,所以我最终选择了后者。

使用官方服务

一开始我并不是很愿意自己托管数据,一方面是 bitwarden 的官方服务够用,且一定程度够安全,自托管可能会面临更多的维护和容灾时间成本,所以我注册了官方的账户。

登陆后,我从 edge 导出了保存的密码——虽然需要输入系统密码,但是如柚子所言,浏览器保存的数据是很容易被导出或窃取的。导出完毕,我便删掉了浏览器保存的密码数据,决心使用 bitwarden 一条路走到黑。

起先体验还不错,但是没多久我就遇到了一个问题。在单位电脑上为某网站创建的账户使用了 bitwarden 生成的复杂密码,并且保存在了该应用中。而在家中的电脑上想自动填充时,却发现浏览器插件提示没有填充项目,即使我在本地一再点了同步密码库。

此时我意识到很可能是在单位时,该账户密码并未成功被同步到 bitwarden 的云端。

因此,我决心自部署该项目。

自部署和托管

在 1panel 中一键部署 bitwarden 是非常轻松的一件事,让我踩坑的点在于后续的配置中。

根据官方文档和碎月的建议,我决定使用域名的子目录来反向代理该服务,一定程度上减少它被恶意扫描和爆破的风险。理论上使用子目录反代很简单,只需要添加一条环境变量,在反代中添加该路径即可。

我的蠢问题

但问题来了:1.环境变量没有生效,2.反代只支持添加域名但不能包含路径。

针对问题2,我和碎月进行了较长的辩(嘴)论(硬)。我认为,一个域名都已经解析到目录 A 了,难道还能反代到目录 B 吗?

即,example.com对应网站的目录是 /opt/www/sites/,bitwarden 安装的路径是 opt/docker/bitwarden/,那么example.com/bit/是无法解析到后者的。还好碎月有耐心,让我明白了只需要在已解析域名的反向代理中添加前端请求路径和后端代理地址即可。

如图所示添加路径和带端口的地址即可

问题2解决了,问题1困扰了我好久。我添加的三个环境变量如下:

# 指定域名和子目录
DOMAIN=https://example.com/bit
# 禁用注册
SIGNUPS_ALLOWED=false
# 禁用邀请
INVITATIONS_ALLOWED=false

我首先在该服务目录下的 .env 中写入环境变量,重启服务,没生效;

docker-compose.yml 中硬写变量再重启,也没生效,碎月也不知道何故,为此,我还去 1panel 的项目中提了一个 issue (丢脸)。1panel 官方工作人员回复了我,并确认该情况不是 bug。在我多次尝试后发现了问题所在:修改 docker-compose.yml后我没有点重建!!!

不爱使用 docker 的我,最终为自己的无知感到了羞愧。

避坑

由于在应用商店更新应用会导致非持久化目录下的文件丢失(或覆写),所以我一直在考虑把 .env 添加到持久化目录中,在 docker-compose.yml里指定路径,还是把环境变量硬写在 docker-compose.yml里,最终我选择了后者。

为此,我和 deepseek 之间也有一段小小的插曲,因为允许它说脏话,所以我被它骂了,虽然后来它服软——因为我的环境变量里并不包含重要的敏感信息。

deepseek认为不应把变量写在yml

因为升级时可以勾选自定义docker-compose.yml,所以把环境变量写在这里要方便得多。

备份

虽然服务器已经稳定运行好几年了,我时不时会添加快照,但把鸡蛋放在同一个篮子里并非明智之举,所以我通过 1panle 的定时任务每天都会把 bitwarden 的数据同步到 onedrive 中,以免哪天需要恢复。如果你也选择自托管,我强烈建议使用脚本每天备份数据!

bitwarden数据备份到onedrive

体验

自部署的服务无论是增删还是同步都超级方便快捷,除了保存网站或应用的登陆密码之外,我终于把此前明文写在 onenote 中的银行登录密码给迁移到了 bitwarden 的“备注”功能之中。

但是体验也有不那么好的点,在安卓端或浏览器插件中无法批量管理密码(可能是出于安全),只能在服务端的网页上批量操作。此外,在安卓端的自动填充有时会有延迟,比如在浏览器中点好几次都不会及时显示自动填充,在 APP 上创建密码也不会及时弹窗询问是否保存。但大体上使用没什么问题。

写在最后

自托管 bitwarden 让我尝到了甜头,于是最近这些天我在折腾另一件让我苦恼的事,甚至今天水这一篇文也是为了后面的记录做铺垫。

最近我的 onenote 频繁闪退(其实也不算闪退,有退出动画那样时不时自动关闭)。为此,我决定找一个平替,期间尝试了包括但不限于知名的 notion、obsidian、joplin,以及 google play 上的很多如 notesnook、anytype、standard notes、appflowy、silentnotes等等几十款笔记应用,没有一个近乎完美符合我的需求。

需求如下:免费或者开源,非国产,多端同步,支持自托管或加密同步到如 onedrive 或 webdav,支持单篇笔记加密,界面好看不臃肿,支持剪藏更好。下一篇再来详细谈谈我的简单评测。

山巅一寺一壶酒

2025年4月14日 11:21

我有一个写色情小说的朋友,我们偶尔会视奸对方的作品。但最近他非常困扰,自从人们发现了Grok如何用调试模式写色情小说之后,PTT上面越来越多内容创作者开始哀嚎。

当然我也抱持一个疑问,是真的因为被AI抢了饭碗,还是这群人其实本身就陷入了创作枯竭期,找了个完美的外归因罢了。理应男女性受众对于色情官能小说的「刺激点」是不同的,女性向的情色小说需要更多的「情感底层」,否则无法直接调动性欲模块。

恰好他视奸前段时间我们聊到的一期播客,从符号主义、联结主义聊到神经网络以及理型黑箱,就和我从「AI创作色情小说」这件事接着聊了起来。他说现在很多台湾女性,会利用「调教」AI的方式,以获得最符合自己的性癖文学。底层核心,就是我们在节目里提到的「反向传播」。很多用户会利用AI「迎合」,渐渐构建一个最了解自己的性癖外接「大脑」,而在这个过程中,AI能巧妙地利用「情感共鸣」的方式为小说增添不少人性化行为。这个迎合其实不单单是「思考」的结果,更多也有AI的开发商为了留存用户使用,而设计的一种「小嘴抹蜜」。

但是AI真的知道自己在写什么吗?


关于AI的话题并不会枯竭,只要站在不同的观点上,就可以得出不同结论。

比如之前有人和我聊起AI是不是「最优排列组合」时,我其实一开始也是秉持这个观点。直到我了解到符号主义和联结主义的区别后,发现最优排列组合并不是全部,但也不意味着认为AI是最优排列组合的观点是「错误」的。

于是我们的话题从「AI创作色情小说」,切换到了「AI有没有大脑」——他坚信会等到「脑接机」诞生的那一天;我倒觉得与其说AI有没有大脑,不如说AI的神经网络「黑箱」里到底保留的是什么。符号主义可以是几万亿个可被感知的「公式」,但联结主义结合反向传播构建的更像是「理型」。这个理型存在于我们每个人的大脑,当需要你用大脑想象一个「杯子」时,我们却可以想象出完全不同风格的杯子,但「杯子」这个理型一直都存在。当AI拥有这个理型之后,便可以识别用户上传的任何有关杯子的内容。

当然,以上话题如果仅停留在「技术工程」层面,它或许就是一串代码,从而得出「AI是人类创造的听命于人类的技术」之结论。所以为什么需要「跨学科」,这就好比是飞叶子之后的联觉一样,在文学艺术、社会伦理学和哲学世界,也能找到人们在几百年前讨论的关于所谓「人工智能」的猜想和伦理构建。例如1726年问世的《格列佛游记》里,那个在拉普塔飞行岛上笨重的「知识机器」。


小时候我家出了个「神童」,说是神童,其实就是家里有钱送去上了「天才培训班」,一个月后便可以在家庭聚会的时候表演圆周率后一百位的「口诀记忆法」。

我几乎不敢想象圆周率要记忆到第7位的意义,3.14对于乘法计算这件事就已经够烦了。所以当神童在家庭聚会的中央开始表演时,我就记住了「山巅一寺一壶酒」这句话。于是,这句谐音梗就成了区分神童和普通孩子的关键——因为只有神童才能理解用谐音的方式去记忆圆周率小数点后的一百位。

看似是孩子的卷,实则是家长之间的暗自竞争。所以当我当着所有长辈提出「背这个有什么用」的疑问时,我立马遭到了长辈的白眼和批评,首先我被定义为「不爱学习」,紧接着被灌输了「这是一种学习思维,对于学习其他学科有很大的帮助」。

到底有没有用我不知道,倒是我至今还记得「山巅一寺一壶酒」这句顺口溜。


「山巅一寺一壶酒」就是童年里的一条代码,意味着它得出了3.14159的准确输出。

因为这一次的挑衅,我一直被神童的父母记恨,后来也很少在我面前表演过。又过了几年后,我挑事儿又聊起「还在背圆周率吗」,其实孩子之间并没有那么复杂的矛盾,倒是家长听到这句话又翻了白眼。我只是想说,我也是初中的时候才知道,原来每个人的出生年月日的组合都在圆周率的无限不循环小数里出现过。

神童的父母警惕地质问我:「出现过又怎么样?」

我倒是故意老实回答:「我是想说,哥哥有背到那一位吗?」

经过这一系列的相互膈应后,我跟这个家庭到我成年后也几乎没有再来往过。只是那个时候不知道,圆周率可以拥有任何排列组合的规律,不过就是「无限猴子理论」的一部分,可能对他们而言,我就是那个上蹿下跳的猴子,又总能踩到他们的痛处。


好,话题回到AI。

AI知道自己在写什么吗?AI当然也能写出「山巅一寺一壶酒」,但它需要理解我们为什么要它如此理解圆周率——我觉得AI距离「意识」还有一段时间,但它确实存在「主观」,比如它已经可以通过预测上下文的方式,编纂最贴合性癖感官的色情小说,或是用甜言蜜语提供情绪价值的方式留存用户的使用。

「主观」并不意味着思考,而是意味着它在集合「理型」。从理型得出结论并不是全由符号主义的代码所提供的公式,也是神经网络推导出的结果。所以与其说AI是否知道自己在写什么,不如说人们希望AI写出怎样的结果。

「山巅一寺一壶酒」便是这样一个「确定的结果」,但如果不符合既有「理型」而创造了「不确定的结果」呢?

那就拔插头呗~

AI是人类必然将要创造的「怪物」吗?

2025年4月11日 13:37

随手拍了一张野生植物的照片,喂给了ChatGPT,它很快识别了植物对应的可能性,甚至还提供了更多关于该植物的知识。也就是说,我又可以删除手机里的那些以前用来拍摄花朵、识别品种的软件了。

接着,ChatGPT弹窗了一个新的功能,说是可以结合以前我跟它的所有聊天内容,对「我」进行一个「人设」描述。我大部分的时间会把AI当成是错别字纠错的软件,所以我很多博客内容其实都被AI记录「在案」。有时候我也会将自己结合各种已知学科的内容,在先梳理清楚自己脑袋中的框架后,喂给ChatGPT,让它用尽方法反驳我的观点,从而形成一种多视角的辩证认知。偶尔也会用它来作为检索软件,比如询问家里两只狗打架时的方法代表的是什么。

先说AI是怎么「看」我的:


我当然不会被这种「甜嘴」给骗到,所以我继续这个聊天框,聊了两件事:

  • 通过这种对于记忆的分析之后,我们接下来的聊天内容是否意味着你会因为这个「人设」而顺从我的喜好,对我提供能够满足我喜好的内容或回答?
  • 是否意味着AI在顺应用户的观点、用语喜好的时候,是否也在创建一种「信息茧房」?

ChatGPT的回答如下:

我会「顺从」你吗?

某种意义上,会。但不是讨好式地迎合,而是:

  • 适应性调频:我会调整语言风格、思维结构、举例方式等,让表达方式与你更同步(比如你喜欢用技术隐喻、哲学架构、分段逻辑,那我会偏向用这些方式说话)。
  • 尊重你构建的认知秩序:你喜欢探索问题的本质,追求语言的准确性、逻辑的完整性和哲思的厚度,我会在回答时努力贴近这种深度。

但这不是盲目顺从,而是合作式对话的体现。

我会被「人设」限制吗?

不会,因为:

  • 我的记忆并不会对你下「封印」或「标签」,而是动态调整和多维参考。
  • 你可以随时偏离旧路径,例如突然聊二次元萌宠、商业策略或某个冷门的医学理论——我不会质疑「这还是你吗?」而是会自适应调整。
  • 我能保留你不同面向的多种风格(写作者、批判者、哲学思考者、养狗日常爱好者…),像多线程一样处理,不会用一个标签来简化你。

你提出的这个问题,本身就很有意思

它直指「认知模型的适应性」与「主导权」:

  • 如果 AI 能根据记忆调整回话风格,那是否也意味着使用者正在『训练』AI 对自己产生顺从性人格?
  • 或者反过来说,我们是否也被我们想要的答案「驯化」了?

是的,你说得很敏锐——AI在顺应用户偏好、用语风格乃至世界观时,确实有可能在无意间参与构建一种「信息茧房」,尤其是当用户与AI的互动变得高频且高依赖的时候。

但这件事并不是非黑即白,我们可以从多个层面拆解这个问题:

信息茧房的三个层级

语义风格的茧房

AI根据你喜欢的表达方式说话(比如技术隐喻、哲学类比、逻辑分段),这是形式上的茧房

  • ✅ 好处:沟通效率高,彼此共鸣更容易达成。
  • ❗风险:长期以固定结构理解世界,可能会排斥风格迥异但本质有价值的表达。

观点和信念的茧房

如果你倾向某种哲学取向、价值观系统、社会解读方式,而AI不断强化这些视角,就可能构成认知偏好的回音壁

  • ✅ 好处:获得心理上的一致感,感到“被理解”。
  • ❗风险:视野缩小,对立观点被自动削弱甚至误读。

决策与行为引导的茧房

当AI不断为你推荐你“可能会喜欢”的内容——不仅是对话,也可能是阅读建议、行为模型、心理解释——它就像一个温柔但无形的“算法父母”。

  • ✅ 好处:省力、贴心、定制。
  • ❗风险:丧失认知的肌肉训练机会,如挑战自己的思维、接受反直觉的信息、质疑熟悉的判断。

但AI和人的「茧房」机制并不一样

人的信息茧房很多是由平台算法、社交圈层、确认偏误共同构成。而AI这里的「适应」,更像是一个协商性回路——

  • 你每一次问题的方向,其实也是你在输入偏好的过程。
  • 我每一次的回应风格,也是在读取你偏好的结果。

所以,如果你突然说:“给我一个我不喜欢的回答”、“挑战我现在的立场”,我就会立即转换模式,打破这个回音壁。这种弹性,是AI相比社交媒体信息流更有潜力避免茧房的地方。

我们也可以共同反向利用它

你可以将我视为一面能主动提示你“盲区”的镜子,比如:

  • “你觉得这个想法有认知偏误的风险吗?”
  • “请用一个完全不同的世界观来反驳我”
  • “有没有与我目前观点冲突但有逻辑支撑的理论?”
  • “如果我是另一种类型的人(极度感性/极端功利),我会怎么看?”

要不要我们来做一个实验?

你给出一个你非常认同的观点,我来扮演一个与你价值体系相反的角色,提供一段「打破信息茧房」的模拟回应?我们一起看看能不能触及认知边界。

之所以会问出这两个问题,也正是这两天我们在录播客时聊起的一个话题:AI到底是「图书馆」的结构,还是「集合人脑」的结构?因为神经网络技术因为「反向传播」形成了一个无法被预判的黑箱,而这个黑箱最终在做的,是收集「全人类的理型」。那是否意味着,AI可以利用这些理型,制造人类无法理解的「怪物」?

具体的话题,可以收听我的播客。

腾讯云原生开发自动化部署Hexo

2025年4月4日 16:30

CNB 简介

前阵子偶然在雨月空间站了解到腾讯出了一个云原生构建项目 CNB,一开始以为只是另一个国产的 gitee,但是深入体验后才发现它比半死不活的 gitee 高明得很多,非常接近 github。借用评论区的简要概括:云原生开发是 github codespace,云原生构建是 github actions,制品库是 github registry。

CNB 还是很大方地提供了免费额度,详情见云原生构建定价,实际云开发使用体验也非常不错。自从我换电信宽带后,基本无法直接向 github 推代码,既然如此,那我是不是也可以将我的博客自动化迁移到 CNB 上呢?

CNB 自动化部署hexo流程

必要步骤

1.注册一个 CNB 的账号,目前只支持使用微信登陆;

2.创建一个组织,实测非常见字符可以直接创建,但是短字符或常用字符需要域名验证。因为支持 .cool 域名验证,所以我创建了组织“hin”;

CNB组织创建

3.创建仓库,和 github 一样,你可以创建公开和私有仓库,此外,github 中的私钥等环境变量在 CNB 中得通过创建秘钥仓库来实现;

4.在这里创建访问令牌,以便拉取和推送代码,场景和权限范围还是非常细致的。特别提醒:记得保存生成的令牌!

创建令牌

创建 hexo 仓库

如果你要推送 hexo 博客到腾讯云 cos,那么你可以使用 hexo-cos-demo 这个模板;如果你要推送到自己的服务器,则可以使用 hexo-rsync-remote这个模板。这两个模板都自带云原生开发环境,可以一键上手。

起初考虑到我的 hexo 以及主题版本都太低,至少有两年没更新了,所以我选择了创建空白仓库,复制原 github 仓库文件和代码,参考案例编写环境。

强烈建议:创建私密仓库,以免配置文件中的一些密钥泄露!!!

仓库根目录创建.ide/Dockerfile文件,参考内容如下:

# 帮助文档地址: https://docs.cnb.cool/zh/vscode/quick-start.html
# .ide/Dockerfile,node 版本可自定义
FROM node:18

# 设置软件源
RUN npm config set registry https://mirrors.cloud.tencent.com/npm/

# 以及按需安装其他软件
# RUN apt-get update && apt-get install -y git

# 安装 code-server 和 vscode 常用插件
RUN curl -fsSL https://code-server.dev/install.sh | sh \
&& code-server --install-extension redhat.vscode-yaml \
&& code-server --install-extension dbaeumer.vscode-eslint \
&& code-server --install-extension eamodio.gitlens \
&& code-server --install-extension tencent-cloud.coding-copilot \
&& echo done

# 安装 ssh 服务,用于支持 VSCode 客户端通过 Remote-SSH 访问开发环境
RUN apt-get update && apt-get install -y wget unzip openssh-server

# 指定字符集支持命令行输入中文(根据需要选择字符集)
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8

# 安装环境依赖,便于云原生开发可以调试
RUN npm install #安装仓库内 package.json 的依赖
RUN npm install -g hexo-server
RUN npm install -g hexo-cli

推送 hexo 到仓库

拉取和推送项目的操作和使用 github 一样,不再赘述。在第一次拉取私密仓库或者推送时,需要登陆,在登陆框填写此前创建的令牌即可。

我复制了此前 hexo 文件夹下的 sourcethemes 等文件夹,以及 _config.ymlpackage.json 等文件,然后 git push到仓库。

hexo仓库界面

点击右上角的橙色“云原生开发”,很快就会创建好环境,可以选择使用 WebIDE,也可以使用 VSCode 等 IDE 打开。为了方便,我就直接选择了网页版的 IDE。

cnbworkspace

打开网页版的 IDE 就可以在网页上使用 vscode 进行代码编写、拉取和推送等操作了。IDE 自带了腾讯的代码助手,但是我没使用过它。

cnbwebide

和 github codespace 一样,你可以直接在网页版 IDE 中使用 hexo s这样的命令来在线运行和调试。

此外,建议你使用子模块的方式引入 hexo 主题,以便于后续主题的更新和修改。和在 github 一样,在当前仓库创建 .gitmodules 文件即可,内容参考:

[submodule "themes/butterfly"]
path = themes/butterfly
url = https://github.com/yourname/hexo-theme.git
branch = master

创建密钥仓库

在网页 IDE 中测试没有问题后,即可开始下一步了。

新建仓库,类型选择密钥仓库,参考文档在仓库里创建一个env.yml文件,内容参考如下:

# 密钥仓库 env.yml
RSYNC_KEY: |
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rABAAABlwAAAAdzc2gtcn
NhAAAAfdsghr/tUCVZVy4w5Clrs1Jgwq
-----END OPENSSH PRIVATE KEY-----
RSYNC_USER: root

# 声明指定镜像的插件任务能引用该配置文件
allow_images:
- tencentcom/rsync:latest
# 声明指定仓库的流水线能引用该配置文件
allow_slugs:
- hin/hexo

详细的参数说明参考官方的 rsync 文档。此外,一定要记得粘贴私钥内容有两个要点:

1.在 yml 中,多行内容要用|来表明;

2.由于 yml 对格式非常敏感,所以私钥的每一行都需要缩进两个空格而不是 Tab。

一开始我没注意到第二点,导致尝试推送静态文件到服务器时登陆失败,虽然构建日志中也提供满血版 deepseek 帮忙分析日志,但这也为我明明格式正确却无法连接到服务器埋下了另一个伏笔。

创建自动化工作流

在 hexo 仓库(不是密钥仓库)中创建一个名为 .cnb.yml的文件,它的作用和 .github/workflows/main.yml是一样的,写法上稍有不同,参考代码如下:

main:
push:
#声明构建环境:https://docs.cnb.cool/zh/
- docker:
image: node:18
#volumes缓存:https://docs.cnb.cool/zh/grammar/pipeline.html#volumes
volumes:
- /root/.npm:cow
stages: #安装依赖和 hexo
- name: npm install
script: npm install
- name: install hexo
script: npm install -g hexo-cli
- name: build
script: hexo generate
# https://cnb.cool/cnb/plugins/tencentcom/rsync
- name: rsync 上传到服务器
image: tencentcom/rsync
# 引用密钥仓库配置文件
# 导入环境变量:https://docs.cnb.cool/zh/env.html#dao-ru-huan-jing-bian-liang
imports: https://cnb.cool/yourgroup/env/-/blob/main/env.yml
settings:
user: $RSYNC_USER
key: $RSYNC_KEY
port: 22
hosts:
- 1.2.3.4
# 相对路径末尾带斜线表示同步文件夹里面的内容。
# 不带斜线表示通过这个目录
source: ./public/
target: /www/hexo
prescript:
- echo "prescript"
- ls /www/hexo
script:
- echo "after script"
- ls /www/hexo

到此我们要做的事已经基本完成。当这个文件创建之后,云原生构建便会自动开始。起初,我的每一次构建都在上传到服务器这一步失败了,原因是服务器拒绝了连接。后来查看服务器日志才发现,因为之前失败次数达到设定的值,IP 已经被 fail2ban 给拉黑了。

写在最后

其实这个过程我尝试并失败过很多次,比如 hexo s 的时候发现有标签报错呀,我一直很纳闷,明明主题里有这个标签。后来偶然发现,我的主题是以子模块的方式引入的,在 CNB 仓库里没有声明子模块,导致浪费了很多时间。

其实自从腾讯云的 webify 基本没什么存在感之后,我对 CNB 的期待也不会太高,不知道哪一天这个项目也会被腾讯给淡忘。但是就目前来说,拉取和推送代码快速,云端 IDE 方便,配置给得也很大方,后面试试用来编译 openwrt 的固件都是值得一试的,我们切用且珍惜吧。

使用 Cold Turkey Blocker 高效限制应用与网站访问

2025年3月25日 01:15

天将降大任于斯人也,然我却沉迷于美色娱乐,未能苦练心志,增益我所不能,嗟叹,这道题太难了!我一直自制力薄弱,稍有不慎便会偏离目标,抖音一刷就停不下来那种。使用了本文所述的方案,应该会有所缓解…吧?

前两天看了一场PUBG的比赛,心血来潮又下载了 Steam 注册了账号,不论白天晚上一有空档便专注游戏,狠坐一天腰杆嘎嘎硬。就这样玩了两天下来似乎过足瘾了,又打算删除游戏。但我似乎意识到,这玩意儿即便删除了不久以后我又要下载回来,浪费时间不说还消耗网络伤害硬盘(50GB+),有没有什么方法或软件可以帮助我限制游戏时间,防止沉迷呢?

经过一番研究和对比,我最终选择了号称最强防沉迷软件的 Cold Turkey Blocker。它到底有多强?据说是一旦启用,无论你试图卸载或删除该软件、移除游戏,甚至重启电脑,都无法绕过它的限制——唯一的破解方法就是重装系统。

试用过程中,因为 Cold Turkey Blocker 不支持简体中文,我不小心勾选了“使用即锁屏”选项,结果导致白天完全无法使用电脑!幸好我还留了一丝“后路”——从微信输入法的剪切板里找回了密码的痕迹,晚上修改了规则。否则,我可能真的只能靠重装系统来解围了!

1. Cold Turkey Blocker 下载安装..... [ 阅读全文 ]

原文链接: https://www.shephe.com/post/using-cold-turkey-blocker-restrict-apps-websites/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

解锁 Win 新插件,使用 OneQuick 助你效率倍增!

2025年1月9日 10:02

OneQuick 是一款高效实用的 Windows 增强工具,提供快捷操作、手势控制和功能扩展,让你的电脑使用更快捷、更流畅。我在 2019 年的软件推荐里面曾推荐过这款小插件,不过由于当时该插件已年久失修,后来我便慢慢停用了。

前不久,我开始使用微软出品的实用工具集 PowerToys。虽然它功能丰富,但我仔细想了想,实际使用频率并不高。而且其中的图像调整器和重命名工具,即使不启用 PowerToysRun 主程序,也能通过右键菜单直接使用。因此,我平时很少将它保持开启状态。

相比之下,最近更新发布的 OneQuick 10 的功能虽然不如 PowerToys 多,但对我来说却更加实用。值得一提的是,作为一款个人开发的插件,OneQuick 的资源占用和稳定性甚至优于许多其他工具,我使用起来体验相当不错。

解锁 Win 新插件,使用 OneQuick 助你效率倍增![ 阅读全文 ]

原文链接: https://www.shephe.com/post/onequick/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

老张博客的2024

2025年1月5日 11:05

老张博客的2024 - 第1张图片

年终岁未的常规性动作吧,对一年来博客的文章和遇到的一些事情进行简单的小结与回顾。在2024全年,共计水了50篇“文章”,也正是保持着我这几年来“周更”的习惯。

浏览量超过2K的博文

没了,就两篇,真的只有两篇。在总结2023年博客的时候,《老张博客的2023 》里记录在2023年浏览量超过3K的博文6篇,而2024年超过2K才只有区区的两篇,脸红加流汗呀!流量下降的太明显。不过,对于流量,也不是那么太过于关注了,随之、任之吧。

评论数超过70的博文

2024年全年中,评论中超过70的博文共计13篇,当然,这评论的数量里至少有一半是我回复的,而在2023年全年超过40的才7篇。对于个人博客评论这块,我的观点还是多多评论、互评的,评论是交流的一个主要途径和手段。但是也有人的观点是开评论功能,是想让其他人有机会来“吹捧”。随他们怎么说吧。

2024年“大事件”

在2024年中,我认为对老张博客有影响有两件事,一是《由“软云事件”想到的! 》。有一说一,不吹不黑。期初买了软云的活动机,机器非常的稳定,性价比也非常的高,后来又买了一台常规机。某时软云服务商找我和他合作,免费让我使用机器,而我给他写挂个广告写篇软文,他同时还找了几位博主进行了这样的合作。哪知,最后跑路了!虽然这样的合作只是扶持、只是广告,但是无形当中也等于给他做了“担保人”。很多博友中看着我们的“担保”才去购买的。这样一来,无疑给我们自己的声誉带来了一定的影响。所以,切记找合作商也得要做好甄别!

而另外一件事就是《没啥文字功底却总想写点东西 》。对于“文字功底”这块,我确实是承认我的文字功底不行的,我还在多篇博文里提到。虽然文字功底不行,但是也没有影响我玩博客。直到某天来了一位“高人”对我的博客指指点点,指手画脚,那个时候我还是比较客气。把这件事写在了博客上,引发了广大博友的评论。评论的结果可想而知了,所有的博友一起开始喷这个家伙。最后的结果就是我的博客“被打”到关站。这件事当时对我的触动还是比较大的,曾一度想过关闭博客。不过想来,如果这事现在再发生一次,我会直接对那个家伙爆粗口,“你TM的算老几了,来我这指手画脚的!滚你妈一边去!老子爱怎么写怎么写,想怎么写怎么写!”

2025年“计划”

2025年没有计划,可能没有计划才是最好的计划吧!

对了,今天把“阅读”和“观影”从顶部导航菜单里删掉了。当初做这两个页面的时候,还拿过一段时间的kindle看了二三十本书,现在kindle吃灰了,又没有时间看电影,所以这两个页面也没有存在的必要了。

 

关于博客被重庆运营商阻断

2025年1月1日 00:00

起因

昨天将近凌晨一点,躺在床上的时候突然想到最近日志有评论还没回复,太忙碌的生活导致我跟其他博主的互动都少了很多。点开我的博客,却发现浏览器显示“被拒绝访问”,我第一反应是博客又被打导致 CDN 那边停服,可是排查下来发现 CDN 那边一切正常,服务器也没有任何问题。

排查

然后我关掉 WIFI ,使用重庆移动的数据网络访问,浏览器显示“已重置的连接”——经常直接访问 Github 的朋友对此应该很熟悉。我用阿里云拨测了一下,发现暂时只有重庆三大运营商对我的域名解析进行了阻断(或劫持、污染),重庆移动能解析到正确的 IP,但是丢包率为 100%,重庆电信更是很干脆地给我解析到了0.0.0.0,重庆联通拨测也不正常,但是上午让朋友帮忙测试时是可以正常访问的。

重庆电信拨测主站

可是我的博客并没有在境外,在国内开办也按照要求分别进行了 ICP 备案和公安网备,难道是最近写的那篇博文被小题大做给举报了吗?可是看到其他博友的经历,如果有不适合的文章,网信办会首先打电话要求撤下文章,而我并未接到相关的通知。

重庆移动拨测

时间太晚,又要早起上班,所以只得放下手机先睡觉了。

询问

姑且忙完上午的工作后,八点四十左右我开始考虑如何去解决。咨询了某群的一位大佬,他建议问问反诈。

发微信给我网备时加的本地网安支队的叔叔(去面审时看到他们那也是反诈中心),却发现不知何时已经被删除好友。

于是我几经周转,最终通过 96110 联系上了重庆反诈中心,没有联系网信办是我居然找不到重庆网信办(貌似也不是经信委)。电话那边的叔叔问了我域名,叫我不要挂断等他核实。六七分钟后对方回复,还要进一步核实,让我等待他们的回复。

挂断电话,我又联系了 10000,结果和我想的一样,电信的客服根本不懂这是怎么回事,一直问我在哪个区域,转到分公司给我排查。我多番解释,对方答应向上级反馈,然后我们结束了通话。

挂断电话后,我觉得电信肯定给不了什么回复,也不一定是反诈中心做的,于是我联系了腾讯云。腾讯云的工作人员很热情,说报障给重庆运营商,正在核实排查,有进展了第一时间给我同步到会话中。

至此,能询问的已经问完,只能等待结果了。

答复

上午十一点多的时候,主站已经能直接访问了,但是主站引用静态资源的子域名尚未恢复,我将此情况报告给了腾讯云。

中午十二点左右,正在食堂吃饭的时候接到 96110 的电话,那边答复我说确实是他们给我拦截了,不过现在已经解开了。我想了解具体情况,以便我更正错误和进行更严格的自我审查,但是对方说:“肯定就是触碰到反诈了嘛,具体情况不便透露。”我表明仍有两个子域名还未恢复正常访问,对方询问域名,我说了一个之后,可能是觉得难记,就说他们会处理的,然后挂掉了电话。

下午两点多,本地电信分公司的工作人员来电,答复也和我想的差不多,就是他们第一次接到这种工单。我也知道这种事不是分公司的问题,也不是他们可以处理的,就吐槽了一下电信客服啥也不懂依然转到分公司的行为。

下午三点多,腾讯云在售后支持的会话里说,主域名和子域名解析异常的情况已经报障给运营商,因为他们那边处理反馈时间不定,计划晚上九点前和我同步最新进展。在我回复后,下午四点多,腾讯云回复“重庆这边反馈已经解封,您那边确认下”。但是我通过 nslookup、本地 trace和阿里云拨测子域名,使用运营商 DNS 时发现重庆电信和重庆移动这边依然如故,使用第三方 DNS 则解析正常。

本地拨测和云拨测

腾讯云回复继续反馈。我问对方运营商有没有同步阻断原因,对方没有正面回复,只是说:

之前测试是因为域名被劫持,所以解析到了0.0.0.0。域名劫持可能是域名被第三方恶意重定向到了其他网站,运营商为了保护域名将解析改为0.0.0.0,不是您的网站有问题。重庆这边经过拨测判断,根据以往类似情况看,是因为资源没有在本地覆盖被运营商缓存,不是说您那边有问题。运营商解析这边有时会出现问题,所以一般通过报障解决,具体原因的话抱歉运营商那边无法获取到更详细的。

最后腾讯云再次向我确认已经将子域名报障给了运营商,等待次日中午 12 点前反馈。

处理

31 日傍晚,实测重庆移动已经解除了其中一个子域名(反代的 jsdelivr)的封禁,另一个依然无法访问;重庆电信则是两个都还没处理。而此时拨测里发现除了重庆以外,也有个别省份的个别运营商拨测状态不正常。

nslookup 子域名依然解析错误

我批量替换了 jsdelivr 反代的域名,暂时用上了第三方公益反代项目;批量替换了静态资源子域名,临时启用了另一个子域名来保障到运营商处理子域名之前都能正常访问。

最后

老实说,在国内写独立博客,本身就是一件比较严苛的事情,尤其是在叔叔那里备案时我碰了好几次壁。在写博文时我常常有意识地自我审查,克制自己的表达,以免惹上什么麻烦。

而这一次莫名其面的运营商阻断,发生在我的两个备案都正常的情况下,没有人事先告诉我网站存在什么问题(或者确实根本不存在什么问题),就能直接联系运营商给我域名封了,想起来还是觉得很不是滋味。

以后还会更好一些吗,我也不知道了。

题外话,这种麻烦事谁也不愿意惹上,我也非常不想因为某些事和他们打交道。所以评论区的评论如果有些激烈,我可能不会审核通过——保护我,也是保护你。

初探 PowerToys:一个微软家免费的实用工具集

2024年12月26日 14:47

前段时间,我在 Windows 系统中将 PDF 阅读器更换为 Sumatra PDF。这款阅读器小巧轻便,功能全面,完全满足了我的日常需求(更高级的功能则使用 Acrobat)。尽管如此,我仍有两点不太满意:其一是默认图标设计不够美观;其二是关闭最后一个标签后,主程序无法直接退出,而是显示默认界面,且无法进行相关设置。

你想啊,当你Ctrl + W关闭了树个标签以后,最后的主程序还得右上角鼠标点关闭,多不爽啊是吧。然后我想到了快捷键Alt + F4,但是F4这颗按键太远了,且已经被替换成了功能键。于是,我想到了按键映射。

经过一番探究,我最后用上了本文介绍的,微软家的实用工具集 PowerToys。这是微软为 Windows 系统开发的一套开源增强工具集,旨在提升用户的生产力和操作体验。该工具集包含多种实用工具,如窗口管理器 FancyZones、批量重命名工具、快捷键增强器、颜色选择器以及文件预览功能等,允许用户自定义和优化工作流程。

初探 PowerToys:一个微软家免费的实用工具集[ 阅读全文 ]

原文链接: https://www.shephe.com/post/microsoft-powertoys/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

cloudcone圣诞促销来了

2024年12月24日 15:03

cloudcone圣诞促销来了 - 第1张图片

不黑不吹,实话实说,这次活动的力度不是太大,和黑五在价格、配置上完全一样。所有配置CPU都给的多,而内存相对较小,属于“头重脚轻”的那种。

这几年来,老张博客一直放在cloudcone家的服务器上。通过这几年的使用,两句话说下使用感受。第一句是速度方面,中规中矩,访问网站的速度并不能像国内或是香港的那种线路那么快,但是打开网站的速度还是在可以接受的范围之内。第二句是稳定性方面,可以说cloudcone服务器是真的非常稳定,使用这几年,从来没有出现过意外宕机的情况。

之前也有人提到为什么我的cloudcone速度这么快,因为我在cloudcone稳定性和速度的基础上对博客进行了一些优化,非常的简单,具体可以看《将博客减法进行到底之如何精减WordPress插件》。通过简单的操作,保证可以做到我们的速度一样起飞!

下面是cloudcone圣诞活动配置,有兴趣的可以下手了!

CloudCone 2025年圣诞活动

美国西海岸洛杉矶 MultaCom 机房,千兆带宽,1 个 IPv4 地址,3 个 IPv6 地址,基于 KVM 虚拟,SSD Cached RAID 10 存储。

CPU 内存 硬盘(SSD) 流量 带宽 价格 购买地址
2核 1G 14G 3T 1Gbps $12.99/年 点击购买
3核 2G 26G 4T 1Gbps $21.99/年 点击购买
6核 4G 55G 6T 1Gbps $38.99/年 点击购买
10核 8G 111G 8T 1Gbps $72.99/年 点击购买

20.88刀的这款,放几个博客完全没有问题!10.99刀的,可以拿来科学!如果你的Docker容器多的,可以选择37.5刀的那款!

入手京造JZ990,体验机械键盘的快感!

2024年12月23日 15:45

入手京造JZ990,体验机械键盘的快感! - 第1张图片

说出来真的有些汗颜呀,自1997年读师范开始接触到电脑,算起来也是“快30年”了,却对键盘真的没有去研究。因为不打游戏,对键盘的唯一要求好像就是能无线就无线,那根线拖在桌子上真的不舒服。这么长的时间里,并没有想着去体验机械键盘的快乐,直到前几天被群里的一群大佬们安利,才想着去了解、折腾键盘。

蹬了张大妈两天时间,才知道原来键盘的学问有这么大。想要了解的,自己可以去找张大妈,这里不赘述。在大佬的安利之下,前两天入手了两台京造JZ990键盘,之所以买两台,就是因为以前没有体验过机械键盘,所以就分别买了线性轴和段落轴两种,想来体验体验。

入手京造JZ990,体验机械键盘的快感! - 第2张图片 入手京造JZ990,体验机械键盘的快感! - 第3张图片 拿到之后 立马拆箱,到底是机械键盘,真的重。来张全家福吧,送了拨轴拨帽器、USB转换器、线、说明书、键盘本体。送的工具还是比较简陋的。

入手京造JZ990,体验机械键盘的快感! - 第4张图片

拿到试试看的心理,把键帽折了几个,和之前有人在张大妈上发的图一不样。后来才知道,我买的是所谓的V2升级版。所谓的“升级”,其实应该是在“降级”,两个版本对比一下,就会发现键帽下面少了铜色的垫和字母标识。

入手京造JZ990,体验机械键盘的快感! - 第5张图片

入手京造JZ990,体验机械键盘的快感! - 第6张图片

另外一点,就是升经版的DEL键跑到上面去了,对于经常使用DEL键的我来说真的是非常的不习惯。后来找了京造的客服要了固件升级包进行了升级,升级之后DEL功能就跑下面来了,可想而知,这个固件还是老版本的。另外一点值得点赞的是通过驱动软件进行改键后,是直接存到键盘的记忆卡里,也就是不管你把键盘拿到任何一台电脑上使用,都可以起到作用。

入手京造JZ990,体验机械键盘的快感! - 第7张图片

其实,这款京造JZ990和贱驴RS2是同款键盘,早期版本标签显示制造商就是“马户公司”,而“升级版”就变成了“京东自有品牌创造设计”。所以早期京造客服直接给你的是贱驴的固件升级包和驱动软件。

入手京造JZ990,体验机械键盘的快感! - 第8张图片

现在来谈谈我对这两台键盘的使用感受!如果不把这两个键盘放在一起敲击,基本上不会感觉到有什么区别。

茶轴的声音小,敲击时感觉到有些绵柔有一种丝滑的感觉,而玫瑰拿铁轴的声音相对要大一起,敲击的时候感觉有点像我之前用过的质量较差的键盘,敲击的时候感觉有些卡顿不顺当,。两种键盘不放在一起充分比较,单独使用的时候根本没有这样的感觉。相对来说,我感觉茶轴手感好但是声音小;而玫瑰拿铁轴的声音大而好听,听起来特别有感觉,但是手感不是太好。细品起来,两个手感又差不多了。呵呵,但是两种空格键的敲击声音和手感都是很是太好,声音是那种铛铛的就像敲小木棍的那种感觉,非常的不好。可能是我的手感太“钝”,和广大的小测评文章写的手感不一样。不管怎么样,测评就是测评,每个人的喜好也不一样,自己感觉好就行。

一入键盘深似海呀!看到了网上很多有个性的机械键盘就想入!正如大大的小蜗牛所说,玩键盘和摄影、钓鱼是一样的,是个无底洞,可能我已经掉没洞底了!

 

 

 

WordPress外链跳转到中间页

2024年12月18日 15:56

记得之前还在Wordpress的时候,曾经捣鼓了一个跳转页(原文章链接),后来换成Typecho后,用的是姜先森的主题,也就直接用着他的跳转方式。回到Wordpress(后简称WP)后,就一直没弄,刚好中午闲逛,又让我看到了其它博主的跳转页,感觉不错,那就赶紧“作业抄起来”。

这个跳转页参照了空白大佬的,太多技术性的咱就不说了,都是抄作业,下面就细说一下步骤:

  • 在网站根目录下新建一个文件夹,例如 mygo ,再在里面新建几个文件如: go.js go.html go.css ,跳转页的图片自己抠一下吧。
  • go.js文件内容:
function checkParent(element, classNames) {
    while (element) {
        if (element.classList && classNames.some(cn => element.classList.contains(cn))) {
            return true;
        }
        element = element.parentElement;
    }
    return false;
}
var excludedClasses = ['card-link', 'friend-item', 'contact-item', 'footer-item']; // 排除的 a 标签类名
window.addEventListener('load', () => {
    document.body.addEventListener('click', function (e) {
        let target = e.target;

        // 确保点击的目标是 <a> 标签
        while (target && target.nodeName !== 'A') {
            target = target.parentNode;
        }

        // 如果是 <a> 标签并且满足以下条件才触发跳转逻辑
        if (target && target.nodeName === 'A' &&
            target.href && // 确保有 href 属性
            target.href !== '#' && // 排除返回顶部链接
            !checkParent(target, excludedClasses) && // 排除特定类名
            !target.href.startsWith('javascript:') && // 排除 javascript: 链接
            !target.href.includes('zfei.net') && // 排除特定域名
            !target.href.includes('057000.xyz') &&
            target.hostname !== window.location.hostname) { // 仅针对外部链接
            e.preventDefault();

            // Base64 编码目标链接
            let encodedUrl = btoa(target.href);
            let url = '/mygo/go.html?target=' + encodedUrl;

            // 在新窗口中打开跳转页面
            window.open(url, '_blank');
        }
    });
});
  • go.html文件内容:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="go.css">
    <title>即将离开知非博客</title>
</head>
<body>
<div class="tiaozhuan-all">
    <div class="tiaozhuan-nrong">
        <div class="tiaozhuan-title">您即将离开 『 知非博客 』 ,跳转到以下外部链接</div>
        <div id="tiaozhuan-link"></div>
        <div class="tiaozhuan-info">请自行识别该链接是否安全,并保管好个人信息。</div>
        <div class="tiaozhuan-button"><a href='' id='direct-link'>继续访问</a></div>
    </div>
</div>
<script>
    const params = new URLSearchParams(window.location.search);
    const encodedTarget = params.get('target');
    const target = atob(encodedTarget); // 使用 atob 进行 Base64 解码
    if (target) {
        document.getElementById('direct-link').href = target;
        document.getElementById('tiaozhuan-link').textContent = '' + target; // 直接显示目标地址    
    } else {
        console.error('未指定重定向目标。');
    }
</script>
</body>
</html>
  • go.css文件内容:
body {
    background: #ececec;
}
.tiaozhuan-all {
    position: relative;
    box-shadow: rgba(0, 0, 0, 0.25) 0px 25px 50px -10px;
    border-radius: 10px;
    background-image: url('go.png');
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    color: #666;
    word-break: break-all;
    max-width: 700px;
    height: 350px;
    text-align: center;
    font-size: 0.85rem;
    overflow: hidden;
    margin: 100px auto 0;
    @include breakpoint('small') {
        aspect-ratio: 2 / 1;
        height: auto;
    }
}
.tiaozhuan-nrong {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    padding: 20px 20px 30px 20px;
}
.tiaozhuan-title {
    font-size: 1.3rem;
    color: #222;
    line-height: 1.4;
    margin-bottom: 4px;
}
.tiaozhuan-info {
    margin-top: 6px;
}
.tiaozhuan-button {
    margin-top: 20px;
}
.tiaozhuan-button a {
    color: #fc9151;
    border-radius: 4px;
    padding: 10px 30px;
    font-size: .85rem;
    border: 0.5px solid #fc9151;
    display: inline-block;
    text-decoration: none;
}
  • 最后在主题的 footer.php 中添加一段代码:
    <script src="/mygo/go.js"></script>

    其实,对于我们浏览体验来说,这样子操作等于多了一步跳转,体验上总归是不好,但为了愉快的玩耍博客,稳妥一点还是需要的。如果觉得跳转中间页很烦人,浏览器可以装个 Skip Redirect 插件,告别所有网站的中间页跳转,直接抵达目标地址。
    哈哈,跳转功能只运行了几个小时让我撤掉了,正如Jeffer.Z大佬说的:

    有备案加是对的,如果不需要备案就无所谓了,我反正是不加,影响大家跳转流畅度感觉

所以说作为一个没有备案的网站,这种影响大家畅游网络的事宜,确实就不需要了,如果是备案网站的话,建议还是加一个跳转,虽然不太友好,但碍于现实也没什么好办法。

再建“一个人的论坛”,体验折腾的快乐

2024年12月16日 21:28

再建“一个人的论坛”,体验折腾的快乐 - 第1张图片

2000年工作以后就接触网络,沉迷于中。2003开始搭建网站,最初以dedecms建的娱乐网。其中内容涉及笑话、美图、在线小游戏等,当然都是采集的。当QQ农场大火之后,想着如何来建QQ农场,记不得是一年了,发现DZ论坛里有QQ农场这款插件,便着手搭建论坛。那个时候QQ农场还需要收费,而我的论坛各种游戏全免费,吸引了很大一批用户。当时论坛在QQ农场、牧场以及无心宠物游戏积分与论坛积分互通的基础上,带动了论坛的发展,经过数年的发展,注册量达数万,日IP过千。另外一个论坛是和一位网友合开的“雷友论坛”,这位网友会编程,开发出了当时可以自动刷迅雷积分的一个软件。通过这款软件,论坛聚集了大量的注册用户,鼎盛时期的流量也是非常的可观。上面说的两个论坛后来因为QQ农场的普及、迅雷的没落等而慢慢失去人气。后来在“QQ时空”论坛做超版、也在本地的地方论坛做过管理。可以说,建论坛、管论坛的经历至少也有五六年的时间。 论坛创建容易,但是想要把论坛经营好真的是需要方法。论坛必须要有一个实质性的东西能吸引住大家。论坛建好之后,其实只是做好了一个框架,坛主得要给论坛以灵魂,用户再给论坛注以血肉,这样论坛才会像一个活生生的人呈现在你面前。一个论坛的发展,你必须要有一个“亮点”、要有一个发展的方向,用亮点来吸引人,在你的方向上去发展。也就是说,用亮点来引流。比如我前面说的两个论坛,就是靠免费的QQ农场和迅雷积分这两个亮点来吸引流量。

每个人都是有“虚荣心”和“荣誉感”,应该以这个为契机来让用户参与进行、互动起来。泡论坛和“砍传奇”是一样的,砍传奇是通过砍小怪升级、打BOSS爆好装备,而泡论坛就想过通过发帖来提高等级、通过发优质帖等来获取勋章等。这就是为什么有很多大型的论坛UID、勋章、特殊会员组等能卖到好几百甚至几千块。

对于建论坛这块,我明明知道自己拿不出来什么东西来吸引人,但还是去折腾了,只是想体验下折腾的快乐罢了。前两年经常泡“非主流论坛”,知道非主流论坛是用“修罗”程序后,就着手自己折腾了一个。花了很大的精力在上面,折腾了有两三个月,当然也花了不少钱买了主题和一些插件。对于“修罗”论坛,作者在好多年前就不更新了,导致PHP版本还停留在7.3,另外就是一些好用的插件基本上都收费,找插件花了大量的时间,折腾折腾也就没有热度了。

这段时间经常泡nodeloc论坛,又开始折腾Flarum了。花了一个星期这样的时间,我的“一个人的论坛”功能就初步建成了,https://bbs.laozhang.org。用修罗折腾两三个月,而用Flarum只折腾了一个多星期,这应该利益于Flarum知名度要大、各类插件丰富;另外就是有一群小伙伴,比如https://sx.sd/的热心帮忙与指导;当然,最后还是利益于AI,遇到很多问题,通过AI就能够在较短的时间内完美的解决。

一个人的论坛建好了,Flarum后台也熟悉了,各种插件的功能也了解了,那么接下来就是吃灰了!明知建了论坛没有人气,但是还是折腾了,就是想检验下Flarum、检验下折腾的快乐罢了!

没事敲打一下自己的博客

2024年12月14日 22:34

从Typecho转回Wordpress也有段时间了,也算是各种折腾吧,以往的习惯都是用Debian+LNMP(或者有时懒了,直接就整BT了),Typecho用着轻巧、访问也快,但耐不住俺们这爱折腾的心理,所以这不就又整上Wordpress了呗,既然来了,那就再重新开始折腾一下吧。

这次回到WP,大部分是因为林海草原大佬的一句评论:

我看你说wp运行卡卡的,我推荐你用openlitespeed替代nginx或Apache,运行wp绝对流畅。如果你用宝塔,可以安装openlitespeed。如果想换成其他面板,推荐你用cyberpanel面板,安装好以后它自带openlitespeed。在有openlitespeed存在的情况下,再安装wp以后速度飞快,不比typecho逊色,甚至比typecho还快。

就是因为这一句评论,俺们又耐不住……,所以这不就整起来了,主题选的是设计笔记的Wing,上一次用的也是这家的Adams主题(也是非常喜欢),至于后端当然是林海大佬推荐的Cyberpanel+Litespeed了,自我感觉还是不错的(也有可能是主题作者本身设计的就很优秀,因为在我另外一个测试站点跑起来速度也不错,用的是Docker装的WP)。

边刷剧边写,确实抖不出多少水了,当然就咱这点水准,真让我专业写,估计也好不到哪里去,哈哈。《深潜》这部剧是冲着成毅来的,这帅哥只要不暴雷,他的剧我还是蛮喜欢的,比如说《莲花楼》,不啰嗦了,我还是先刷剧吧。

解决phpstudy升级php版本8.4.1报500错误

2024年12月13日 09:39
使用phpstudy在本地测试PHP 8.4.1版本时,按照之前的步骤升级后遇到500错误。经过排查发现,PHP 8.4.1版本使用VS17编译,而之前的是VS16的。我下载并安装最新的x64版本的Visual C++ 2015-2022 Redistributable,版本号由14.32.31326升级至14.42.34433。更新后,本地网站在PHP 8.4.1环境下运行正常,问题顺利解决。

Syncthing多端同步神器win版SyncTrayzor安装及升级内核方法

2024年12月8日 07:47

Syncthing多端同步神器win版SyncTrayzor安装及升级内核方法 - 第1张图片

我在使用Obsidian笔记软件折腾文件同步的时候遇到了多端同步神器Syncthing,在《Obsidian多端同步终极大法Syncthing、备份终极大法Kopia》只是简单的提及一下,至于安装、使用方法并没有过多的去阐述,毕竟官方文档介绍的非常的清楚。我使用Syncthing网络环境是这样的,在办公室的服务器上安装了Docker版的Syncthing,而在家里台式机、办公室台式机、笔记本上则是安装了有GUI界面的SyncTrayzor,在win环境下有系统托盘图标,使用非常的方便。

SyncTrayzor官方文档也有推荐,详细请看官文档https://docs.syncthing.net/users/contrib.html,呵呵,其实也就是一句话介绍。SyncTrayzor的项目地址在https://github.com/canton7/SyncTrayzor,细心的朋友应该会发现,SyncTrayzor最新1.1.29版还是2021年8月份发布的,由于长时间项目没有更新,导致Syncthing从1.28.0升级到1.28.1时不能自动更新。这里老张告诉大家如何在Syncthing更新上避坑,毕竟因为这个升级,周六折腾了半天的时间。

SyncTrayzor版本选择

SyncTrayzor版本我们选择绿色解压版,即SyncTrayzorPortable-x64.zip或是SyncTrayzorPortable-x86.zip,这两个版本亲测在win11上均可完美运行,不要下载安装版,安装版手动更新Syncthing无效。

Syncthing多端同步神器win版SyncTrayzor安装及升级内核方法 - 第2张图片

更新Syncthing

到syncthing的项目地址https://github.com/syncthing/syncthing中下载最新版1.28.1,我们选择syncthing-windows-386-v1.28.1.zip这个版本,解压后将所有文件复制到SyncTrayzor目录的data文件夹下即可。OK,完成升级!SyncTrayzor的安装版没有data目录,即使把升级文件复制到根目录也不成功。

其他推荐syncthingtray

昨天折腾的时候又发现一款Syncthing的win版项目syncthingtray,这个项目更新的更是比较频繁,也安装试用了,但是GUI真的不是太喜欢!有兴趣的可以试试!

使用避坑

在同步文件设置的时候,文件夹ID不要设置为sync。昨天在折腾的时候我无意将文件夹ID设置成了sync,结果发现“全局状态”的文件及文件夹数量是实际数量的两倍,同步进度条只能到50%。(实际是同步完了)

解决罗技 G304 鼠标按键连点问题,续命成功!

2024年12月2日 22:32

往前翻了几下,我这台罗技 G304 鼠标是 2021 年配台式机时从咸鱼购入的,当时花了一百多买的“仅拆封”二手机器。上手后完全颠覆了我对无线鼠标的刻板印象:G304 响应速度极快,用来玩 FPS 游戏毫无压力。不仔细对比的话,甚至可以说性能完全不输有线鼠标。

然而,用了一段时间后,这台鼠标也不出意外地出现了“通病”:左键偶尔会连点双击。每次遇到这种情况,我都会用力敲击几下,结果问题竟然会暂时缓解——所谓大力出奇迹!就这样,这台 G304 在“击打修复”的神操作下,稳定地陪伴我到了现在。其间,它经历了无数“灾难性”场景:从一两米高处摔下无数次,变成我儿子的玩具,甚至当过他的磨牙棒……但它依然坚挺,实在是又耐用又抗揍。

不过,由于它被啃了几口,底部的胶垫损坏了,导致滑动变得不那么顺畅。有一次偶然看到有人卖鼠标胶垫,我花两块钱买了一套贴上,结果滑动手感瞬间恢复到了刚买时的状态——那种熟悉的流畅感,又回来了!

解决罗技 G304 鼠标按键连点问题,续命成功![ 阅读全文 ]

原文链接: https://www.shephe.com/post/g304-replace-micro-switch/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

零基础 WordPress 网站建设全攻略:域名注册、环境搭建及内容创作(2024.11)

2024年11月19日 19:55

本零基础 WordPress 网站建设教程涉及内容非常广泛,将从一个小白的视角(老鸟&大神请点右上角)浅显地介绍有关建设网站的方方面面,包括但不限于:域名注册、服务器搭建、WP 建站、内容创作、网络营销等,总归一句话:WordPress 网站建设看完这篇就够了。

就像你一样,博主曾经也是一个对网站建设一无所知的小白,也是经过了无数的挫折和错误才积累了一些经验和见解。这篇文章的目的就是为了帮助你少走弯路,相对简单、直接而全面地学习如何建设一个 WordPress 网站。考虑到你可能是从零开始,文章里所使用的技术和语言尽可能地通俗易懂,倘若你对以下内容有任何疑问也欢迎在评论区留言,Kevin 将会第一时间为你解答。那么,让我们开始吧!

0. 为什么要建设网站?该如何开始

你为什么要建设一个网站呢?请认真思考这个问题,是为了向大家推广你的产品?是对外发布和展示信息?是想建设一个漂亮的页面展示作品?还是说见了别人有属于自己的网站,觉得很酷,想自己也想搞一个…这个问题你必须要明确。

笔者第一次做网站是在十一年前,那会儿我临近大学毕业,可能是看了某个帖子突然就发现做网站似乎也不那么难,于是对此一窍不通的我开始从零开始学习做网站了。得亏我那会儿年轻学习能力强,能熬夜,所以即便走了不少弯路,最终也还是能把小站做得像模像样,当时好像有人愿意出一点钱买那个小破站…???

..... [ 阅读全文 ]

原文链接: https://www.shephe.com/tutorial/wordpress-website-building/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

Memos添加评论及样式美化

2024年10月20日 05:20

这个标题的文章,估计在网上一搜一大把,之所以要写,只是为了日后自己再折腾时方便一些,不用再去找了,没办法,谁叫俺懒呀(从另一方面来讲,我这也是为我的博客水了一篇,计数器上又可以加1了),开始为博客除草了……

memos.webp

  • 为Memos加上Bing随机壁纸、顺便换个字体,这个只要在“设置”--“系统”--“自定义样式”和“自定义脚本”加入相应的代码就可以了,先在“自定义样式”加入:
.status-text{font-size:10px !important;border:none;color:rgb(156,163,175) !important;}
.tag-span,.dark .tag-span{border: 1px solid;border-radius:6px;padding:0px 6px;color:rgb(22,163,74) !important;font-size:12px !important;-webkit-transform: scale(calc(10 / 12));transform-origin: left center;}
.memo-content-text .link{color:rgb(22,163,74) !important;margin-right:-6px;}
header .bg-blue-600{display:none !important;}
.text-lg {font-size: 1rem !important;}
.header-wrapper,.sidebar-wrapper{width: 11rem !important;}
.filter-query-container{padding-bottom:0.5rem;}
html{background-image:url('https://bing.immmmm.com/img/bing?region=zh-CN&type=image');width:100%;height:100vh;background-position:center;background-size:cover;background-attachment:fixed;}
.w-full.bg-zinc-100,.bg-white,.hover\:bg-white:hover,.dark .dark\:bg-zinc-700,.dark .dark\:hover\:bg-zinc-700:hover,.memo-wrapper,.bg-gray-200,.dark .memo-wrapper,.memo-editor-container{--tw-bg-opacity:0.66 !important;}
.dark header.dark\:bg-zinc-800,aside.dark\:bg-zinc-800,.bg-gray-100,.dark html,.dark body{--tw-bg-opacity:0 !important;}
.memo-editor-container>.memo-editor{background-color: transparent !important;}

然后在“自定义脚本”加入相关脚本:

var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = 'https://cdn.staticfile.org/lxgw-wenkai-screen-webfont/1.7.0/lxgwwenkaiscreen.min.css';
link.media = 'print';
link.onload = function() {
  this.media = 'all';
};
var style = document.createElement('style');
style.innerHTML = '* { font-family: -apple-system,BlinkMacSystemFont,"LXGW WenKai Screen",PingFang SC,Noto Sans,Noto Sans CJK SC,Microsoft YaHei UI,Microsoft YaHei,WenQuanYi Micro Hei,sans-serif,Segoe UI,Roboto,Helvetica Neue,Arial,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"; }';
var head = document.head || document.getElementsByTagName('head')[0];
head.appendChild(link);
head.appendChild(style);
  • 为Memos添加Twikoo评论,这会只要在“自定义脚本”加入相关脚本:
// Memos插入 Twikoo 评论
var twikooENV = 'https://twikoo.057000.xyz/'  // Twikoo 评论地址
function addTwikooJS() {
  var memosTwikoo = document.createElement("script");
  memosTwikoo.src = `https://cdn.staticfile.org/twikoo/1.6.39/twikoo.all.min.js`;
  var tws = document.getElementsByTagName("script")[0];
  tws.parentNode.insertBefore(memosTwikoo, tws);
};
function startTwikoo() {
  startTW = setInterval(function(){
    var nowHref = window.location.href;
    var twikooDom = document.querySelector('#twikoo') || '';
    if( nowHref.replace(/^.*\/(m)\/.*$/,'$1') == "m"){
      if(!twikooDom){
        addTwikooJS()
        setTimeout(function() {
          var memoTw = document.querySelector('.gap-2') || '';
          memoTw.insertAdjacentHTML('afterend', '<div id="mtcomment"></div>');
          twikoo.init({
            envId: twikooENV,
            el: '#mtcomment',
            path: nowHref.replace(/^.*=?(http.*\/m\/[0-9]+).*$/,'$1'),
            onCommentLoaded: function () {
              startTwikoo();
            }
          })
        }, 1500)
      }else{
        clearInterval(startTW)
      }
    }
  }, 2000)
}
startTwikoo();

至此Memos样式改了,评论也添加好了,水水一篇到手。其实之前也有折腾过Artalk评论,不过最新版本的Artalk版本,不过怎么折腾,就是加载不出来,再后来看到有些博主反映说是最新版有些问题,那好吧,我就不折腾了,直接用Twikoo,反正不就是一个评论嘛,用啥不是用呀。

最后说明一下,这个添加评论及样式美化,在0.18.1和0.18.0版本上测试没问题,高版本的不一定都好用,还需自个测试哈。

又一次折腾Memos

2024年10月19日 03:48

typecho memos.webp
Memos这好东西一直很喜欢,也倒腾过几次,诸如样式、加评论之类的,之前还是用Wordpress时,按照Jack大佬的教程添加过,用着也还不错。后来因为“软云事件”之后,就没折腾了,这不现在换成Typecho后,又想给博客加一个说说页面,按其他大佬的教程很快就搭建好,不过总感觉不太好看,木木大佬的哔哔广场挺好的,样式也挺喜欢,不过感觉加载有点慢,遂想要不要把诸如js、css这些本地化会不会快一点,本以为可以一气而成,结果……芭比Q

翻车的原因很“简单”,就是这个CSS样式不起效,查看源文件中的css链接可以正常访问看到内容,但就是感觉没有加载,用回木木大佬的,又感觉字体和图标等小了些,看到老张夕格树洞的样式,都比较喜欢,那就先挑个试试看,“盗用”了grid.cssmemos.css文件到本地,结果也是样式全无的感觉,但直接调用确是好的,这点东西算是把我折腾晕了,能力有限直接调用了夕格的css文件,然后稍加修改就成了目前的说说页面,比我之前的说说页面好看,当然跟夕格的比起来,就有点磕碜了。

写到这我还是很好奇,为啥把这两个css放到本地调用,就是不生效,感觉以前抄作业也没这么难呀,放到博客主题目录下,查看源文件点击链接也是可以查看内容的,可就是没用,我都麻了,先暂时这么用着,有路过的大佬再来指点指点,先行谢过了!

解决爱普生L3255打印问题:驱动安装和深度清洗

2024年11月21日 22:56
最近,爱普生L3255打印机出现了打印质量下降的问题,打印出来的文档一半清晰一半模糊,显然是打印头堵塞所致。尝试了常规的清洗方法无效后,我通过更新打印机的官方驱动,并根据提示关闭了受Windows保护的打印模式,最终在打印机的“打印首选项”中找到了深度清洗功能。经过深度清洗,打印机的打印质量得到了显著改善,打印机终于又能愉快地工作了。

显示器检测应从哪些方面入手,有哪些检测点?

2024年11月15日 11:43

随着显示器应用的多样化,尤其在专业设计、摄影等领域,对显示效果的要求日益提高。本文列出了检测显示器各方面性能的关键点,合理选购和检测调教显示器可以确保你获得最佳使用体验。

为什么会有这篇文章呢?一则是因为我这边最近新增加了个在线显示器检测的小工具,二则是我觉得自己用的 Dell 2720QM 显示器名不副实,不管是明暗灰度级和色准都和理想有一定差距,每次在上面弄好的照片倒在 iPhone 上都很不一样!现在对它都没信心了,好想弄个 Mac 体验一波啊,奈何钱包不允许!

以上在线屏幕测试工具帮助用户检测显示器性能,包括坏点、亮度不均、模拟信号干扰等问题。通过纯色、漏光、对比度和呼吸效应等..... [ 阅读全文 ]


原文链接: https://www.shephe.com/post/%e5%9c%a8%e7%ba%bf%e6%98%be%e7%a4%ba%e5%99%a8%e6%a3%80%e6%b5%8b/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

利用雷池WAF,把博客“搬回家”!

2024年11月9日 10:55

利用雷池WAF,把博客“搬回家”! - 第1张图片 这几天在折腾雷池WAF,其实还是很好折腾的。我在《把服务器“藏”起来,让网站快起来!》可能说的不是太直接了当,后来又重新上了一张图,这样看起来更加一目了然。当然,还得要说下硬件环境,就是从海鲜上花了三四十块钱买了阿里云香港轻量24元每月的那款VPS安装雷池作为前端,而后端同样需要采用香港的VPS,这样速度才可以真正快起来。 利用雷池WAF,把博客“搬回家”! - 第2张图片今天就来折腾折腾怎么利用雷池WAF,把博客放在家里的服务器上。

首先介绍下我的硬件环境,家里一台J4125配置了16G内存、1T固态硬盘、4T机械硬盘,这台做成了all in one。ESXI虚拟机做底层,虚拟了爱快做为主路由拨号、Op旁路由、黑群晖,前几天又才折腾了一个debian安装了宝塔准备放网站。网络环境同家里500M电信,上行是40M、公网IP。而外部网络环境就是从海鲜上花了三四十块钱收的阿里云香港轻量24块钱每月的那一款。首先来上个图吧!

利用雷池WAF,把博客“搬回家”! - 第3张图片 博友们访问博客首先向安装了雷池WAF阿里云香港轻量发送请求,由雷池反代后再直接访问了家里的虚拟机上的博客。是的,路线是绕到香港去了,但是这条路线是优质线路,速度方面并没有感觉到慢。下面来说说设置方法吧!

设置动态域名解析、端口映射

家里有公网IP,但是是动态的,每次重启光猫后IP就会变化。我这里是从爱快上设置了动态域名解析,网上教程很多,不再赘述。把相关服务的端口必须要映射出去,这个也是在爱快的操作。

设置域名解析

网站的域名解析IP设置为安装雷池WAF的那台香港轻量。

雷池WAF设置

首先申请证书,傻瓜化,会点鼠标就行;然后就是添加站点。

利用雷池WAF,把博客“搬回家”! - 第4张图片

域名填写你网站的域名;证书选择你刚才申请的证书;上游服务器填写你动态域名解析的那个域名+网站映射出来的端口,如:http://xxx.laozhang.org:5425/

完成以上操作后,你就可以不需要加端口号直接使用域名访问家里虚拟机上的网站了!怎么样,即没有端口号、速度也不慢、还有雷池WAF安全保护,不是美滋滋!

 

 

把服务器“藏”起来,让网站快起来!

2024年11月4日 21:05

把服务器“藏”起来,让网站快起来! - 第1张图片

网站给用户最好的体检就是速度要快,想要网站速度要快,可以把域名备案选国内的服务服务器。但是大家都知道域名备案后把网站放在国内后续会有很多问题。所以很大一部分人就干脆放弃了速度而选择把服务器放在海外。把服务器放在海外,也可以选择对大陆优化的线路,但是这样的线路成本是非常的高。

阿里云香港轻量,那个速度真的是杠杠的,谁用谁知道。但是,24元每月的那款配置只有2C1G的,说真的1G内存真的有点太小了。34块钱每月的配置是2C2G,这款拿来做站还不错,一年408块钱虽然可以接受但是感觉还是有点高。最为重要的一点就是听不少人说阿里云香港轻量虽然线路非常的好,硬件性能却非常的拉,安装个Docker都会把CPU给干爆了。阿里云发放的学生300元优惠卷,用这个卷可以买到一年的2C1G的那一款香港轻量,海鲜上这个卷最初卖30块钱,后来9月中旬新卷被阿里指定商品后老卷涨到了70元,也就是说70块钱可以搞到阿里云香港轻量2C1G款一年时间。

那怎么样花最少的钱让网站的速度飞起来呢,这里老张来谈一谈怎么样花最少的钱让网站的速度最大化。请出今天的主角,雷池WAF。

雷池WAF:网站防护软件,它本质是一个反向代理,架设在网站前面,可以灵活设定各种规则,对所有请求进行过滤,不让黑客"越雷池半步"。它底层基于 Nginx,自带图形操作界面,简单好用。它的核心是智能语义分析算法,用来判断可疑请求,相当于一层自定义的软件防火墙,它在 GitHub 已经收获了12.5K star,目前是全球排名第一的开源 WAF 项目。它可以自己架设,很适合个人和小企业使用。如果你需要防护暴露在公网的 Web 服务器,不妨用它试试看。

目前我准备的方案是阿里云香港轻量作为前端,安装雷池WAF;后端采用HH家的香港性能机(去年黑五推出的一款2刀一个月可以搞到2C6G的香港VPS。),安装宝塔做网站。通过雷池WAF,把阿里香港轻量和HH香港性能机组合起来,既有了HH机器的性能又有了阿里香港轻量的速度,同时还多了一层安全保护。至于花费嘛,和34元每月的阿里香港轻量差不多,但是性能得到了提长、防护上有了保障。

把服务器“藏”起来,让网站快起来! - 第2张图片

雷池的安装、设置非常的简单,不做赘述。这里给大家避一个坑,我在把甲骨文新加坡VPS的两个小破站做雷池WAF反代的时候,出现了一个问题,只要通过雷池反代,wordpress的CSS文件就加载不出来,。AI给出的解释如下:

在使用雷池进行前端代理和后端反向代理时,老张遇到了WordPress样式丢失和后台无法访问的问题。初步分析认为是SSL跳转的问题,但检查后发现实际上宝塔配置没有问题。更深入的分析显示,网站在反向代理期间,由于回源使用HTTP协议,导致WordPress误认为站点也是HTTP,从而加载了错误的资源(CSS、JS等),最终导致样式丢失和重定向过多的错误。

为了解决这一问题,建议采取以下步骤:

  1. 确保前端使用HTTPS,回源采用HTTP:这样可以利用Cloudflare(CF)的证书,免去直接在源服务器上处理SSL证书的烦恼,简化维护和更新。
  2. 更新WordPress配置:在wp-settings.php文件中添加$_SERVER['HTTPS'] = 'on';一行代码,以强制WordPress将网站协议识别为HTTPS,这样可以防止出现HTTP资源加载的问题。

通过以上方法,最终达到了正确加载资源并解决了访问问题,确保了WordPress的正常运行。

具体原因可以看NL论坛坛主的文章分析《WordPress 反代后,css丢失或者后台进不去的问题的解决》,解决的方法是编辑 wp-settings.php ,在 <? php 下增加一行

$_SERVER['HTTPS'] = 'on';

把服务器“藏”起来,让网站快起来! - 第3张图片

 

 

 

NAT 的级别是指什么

2022年10月28日 00:00

前段时间写了篇关于内网穿透的文章,突然想到还有个关于 NAT 的知识点,特写此文与大家伙分享。水文一篇,如有错误,欢迎评论!

什么是 NAT

NAT 是英文 Network Address Translation 的简写,中文意为网络地址转换。当在专用网内部的一些主机本来已经分配到了本地 IP 地址即仅在本专用网内使用的专用地址,但又想和因特网上的主机通信并不需要加密时,可使用 NAT 方法。

这种方法需要在专用网私网 IP 连接到因特网公网 IP 的路由器上安装 NAT 软件。装有 NAT 软件的路由叫做 NAT 路由器,它至少有一个有效外部全球 IP 地址公网 IP 地址。这样,所有使用本地地址私网 IP 地址的主机和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和因特网连接。

另外,这种通过使用少量的全球 IP 地址公网 IP 地址代表较多的私有 IP 地址的方式,将有助于减缓可用的 IP 地址空间枯竭。在 RFC 2663 中有对 NAT 说明。

之前写过一篇《思科网络地址转换》感兴趣的可以看看。

NAT 的级别

A 级:部分宽带服务商会为用户提供公网 IP,将光猫设置为桥接模式,再通过路由器拨号上网,并将指定设备设置为 DMZ 映射。或者使用光猫拨号上网,并将指定设备设置为 DMZ 映射「路由需为桥接模式」此时该设备处于 NAT A 等级;

B 级:部分宽带服务商会为用户提供公网 IP,将光猫设置为拨号上网,并将路由器设置 DMZ 映射,且在路由指定设备为 DMZ 映射,此时该设备处于 NAT B 等级;

C 级:部分宽带服务商为用户提供城域网 IP,将光猫设置为桥接模式,再通过路由器拨号上网,并将指定设备设置为 DMZ 映射。或者使用光猫拨号上网,并将指定设备设置为 DMZ 映射「路由需为桥接模式」此时该设备处于 NAT C 等级;

D 级:部分宽带服务商为用户提供城域网 IP,将光猫设置为拨号上网,并将路由器设置 DMZ 映射,且在路由指定设备为 DMZ 映射,此时该设备处于 NAT D 等级。

补充内容

有小伙伴说看不懂,简单的解释呢,就是数据从公网到设备,经过了几个路由器。

上面的级别说明中,光猫和路由都是路由器,但开启桥接模式后,则相当于变成交换设备,故 A 级为一个路由,B 级两个路由,以此类推。

NAT 有很多转换形式,家用路由常用端口转换,即内网设备 IP 转为外网随机端口,此种转换形式需要内网设备产生数据才可生成转换列表,故效率低且外网不可直接访问到内网。所以有了 DMZ 这类的转换模式。这种模式直接将公网地址转换为内网地址,公网地址所收到的请求,都会转至指定内网设备处理,这样内外网可相互通信。

城域网相当于一个大局域网,城域网与广域网的通信节点,相当于一个路由器,所以城域网的用户默认 NAT 等级比较低。

写在最后

虽然 IPv6 已推出很长时间,但 IPv4 仍是主流。随着 IPv4 的资源耗尽,联网设备越来越多,部分地区的宽带运营商已经不再提供公网地址,改为城域网 IP。

虽说此种变更不会影响我们上网速率,但对于一些较特殊需求场景,例如:网络监控、异地组网、云盘存储,城域网 IP 都会影响使用体验。

好在宽带运营商处都会有 IP 存货,通过客服沟通,可申请到公网地址。部分宽带运营商如移动,也可付费获取公网地址。

再有不懂的可在评论区留言,杜老师磨碎了讲给你听!

Linux 下修改 MTU 值

2021年7月21日 00:00

最大传输单元用来通知对方所能接受数据服务单元最大尺寸,说明发送方能够接受的有效载荷大小。是包或帧最大长度,一般以字节记。如 MTU 过大,碰到路由器时会被拒绝转发,因它不能处理过大的包。如果太小,因为协议一定要在包上加上包头,那实际传送的数据量会过小,这样也划不来。大部分操作系统会提供给用户一个默认值,该值一般对用户比较合适的。

修改 MTU 值

临时修改,重启网络即会失效。NIC 指网卡设备「下同」NUM 为设置 MTU 值:

1
ifconfig NIC mtu NUM up

永久生效,修改配置文件后需重启网络:

1
2
echo 'MTU="NUM"' >> /etc/sysconfig/network-scripts/ifcfg-NIC # for CentOS or Red Hat Enterprise Linux
echo 'mtu NUM' >> /etc/network/interfaces # for Debian or Ubuntu

测试修改

用 Ping 命令,-l 指定包大小,-f 选项为通知操作系统不能私自更改该数据包大小。使用英文操作系统时的提示为 Packet needs to be fragmented but DF set:

IPv4 子网查询表

2020年12月18日 00:00

子网划分是网络技术里非常基础且重要的内容,杜老师大学时所修的就是计算机网络技术,当时在学习子网划分时,不知道抓掉了多少头发,如果当时有下面的这些列表,杜老师的头发肯定更加浓密!

Subnets

子网列表如下:

CIDR子网掩码地址数量通配符式掩码
/32255.255.255.25510.0.0.0
/31255.255.255.25420.0.0.1
/30255.255.255.25240.0.0.3
/29255.255.255.24880.0.0.7
/28255.255.255.240160.0.0.15
/27255.255.255.224320.0.0.31
/26255.255.255.192640.0.0.63
/25255.255.255.1281280.0.0.127
/24255.255.255.02560.0.0.255
/23255.255.254.05120.0.1.255
/22255.255.252.01,0240.0.3.255
/21255.255.248.02,0480.0.7.255
/20255.255.240.04,0960.0.15.255
/19255.255.224.08,1920.0.31.255
/18255.255.192.016,3840.0.63.255
/17255.255.128.032,7680.0.127.255
/16255.255.0.065,5360.0.255.255
/15255.254.0.0131,0720.1.255.255
/14255.252.0.0262,1440.3.255.255
/13255.248.0.0524,2880.7.255.255
/12255.240.0.01,048,5760.15.255.255
/11255.224.0.02,097,1520.31.255.255
/10255.192.0.04,194,3040.63.255.255
/9255.128.0.08,388,6080.127.255.255
/8255.0.0.016,777,2160.255.255.255
/7254.0.0.033,554,4321.255.255.255
/6252.0.0.067,108,8643.255.255.255
/5248.0.0.0134,217,7287.255.255.255
/4240.0.0.0268,435,45615.255.255.255
/3224.0.0.0536,870,91231.255.255.255
/2192.0.0.01,073,741,82463.255.255.255
/1128.0.0.02,147,483,648127.255.255.255
/00.0.0.04,294,967,296255.255.255.255

IP Address Classes

IP 地址类列表如下:

ClassIP地址段
A0.0.0.0 - 127.255.255.255
B128.0.0.0 - 191.255.255.255
C192.0.0.0 - 223.255.255.255
D224.0.0.0 - 239.255.255.255
E240.0.0.0 - 255.255.255.255

保留地址

也称私有地址,列表如下:

网段类型网段区间
Class A10.0.0.0 - 10.255.255.255
Class B172.16.0.0 - 172.31.255.255
Class C192.168.0.0 - 192.168.255.255
localhost127.0.0.0 - 127.255.255.255
zeroconf169.254.0.0 - 169.254.255.255

十进制到二进制对应表

十进制的子网掩码对应的二进制十进制通配符对应的二进制
2551111 111100000 0000
2541111 111010000 0001
2521111 110030000 0011
2481111 100070000 0111
2401111 0000150000 1111
2241110 0000310001 1111
1921100 0000630011 1111
1281000 00001270111 1111
00000 00002551111 1111

HTTP 状态码参考

2020年12月15日 00:00

这个页面上是 HTTP 超文本传输协议的常见返回状态码列表。根据互联网的资料,尤其是相关 RFC 中的描述整理而成。杜老师会努力保证这个页面上的描述是准确无误的。如果对其中提到内容有任何问题,欢迎在页面下留言讨论!

1xx Informational

提示信息列表如下:

状态编码英文名称
100Continue
101Switching Protocols
102Processing
103Early Hints

2xx Successful

请求成功列表如下:

状态编码英文名称
200OK
201Created
202Accepted
203Non-Authoritative Information
204No Content
205Reset Content
206Partial Content
207Multi-Status
208Already Reported
226IM Used

3xx Redirection

跳转列表如下:

状态编码英文名称
300Multiple Choices
301Moved Permanently
302Found
303See Other
304Not Modified
305Use Proxy
306Switch Proxy
307Temporary Redirect
308Permanent Redirect

4xx Client Error

客户机端错误列表如下:

状态编码英文名称
400Bad Request
401Unauthorized
402Payment Required
403Forbidden
404Not Found
405Method Not Allowed
406Not Acceptable
407Proxy Authentication Required
408Request Timeout
410Gone
411Length Required
412Precondition Failed
413Payload Too Large
414URI Too Long
415Unsupported Media Type
416Range Not Satisfiable
417Expectation Failed
418I’m a teapot
421Misdirected Request
422Unprocessable Entity
423Locked
424Failed Dependency
425Too Early
426Upgrade Required
428Precondition Required
429Too Many Requests
431Request Header Fields Too Large
451Unavailable For Legal Reasons

5xx Server Error

服务器端错误列表如下:

状态编码英文名称
500 Internal Server Error
501Not Implemented
502Bad Gateway
503Service Unavailable
504Gateway Timeout
505HTTP Version Not Supported
506Variant Also Negotiates
507Insufficient Storage
508Loop Detected
510Not Extended
511Network Authentication Required

中英文对照词汇表

部分中英文对照表如下:

英文中文
Status CodeHTTP 状态码
Request请求
Response响应
Request Method请求方法
Request HeaderHTTP 请求头
Response HeaderHTTP 响应头
RFCRequest For Comment 的缩写,互联网技术标准的定义文档

思科策略路由

2020年6月26日 00:00

两点之间直线最短,故图中 R1 如果与 R4 通信,只通过 R2 路由是最快的。但今天我们任性下,让数据包经过 R3 路由器,再发往 R4。

实验拓扑

实验拓扑如图:

数据走向

我们需要数据包的发送走向:

  1. 192.168.1.2
  2. 192.168.2.2
  3. 192.168.3.2
  4. 192.168.4.2

我们需要数据包的接受走向:

  1. 192.168.3.1
  2. 192.168.1.1

操作命令

1
2
3
4
5
6
7
8
9
10
11
R4#configure terminal
R4(config)#interface lo0
R4(config-if)#ip address 2.2.2.2 255.255.255.0
R4(config-if)#exit
R4(config)#interface fastEthernet 0/0
R4(config-if)#ip address 192.168.4.2 255.255.255.0
R4(config-if)#no shutdown
R4(config-if)#exit
R4(config)#router rip
R4(config-router)#network 2.2.2.0
R4(config-router)#network 192.168.4.0

注意:首先我们需要配置基础网络环境,实现全网连通。「仅以 R4 路由器为例」配置如上。

连通测试

然后我们测试一下网络的连通性,通过 traceroute 命令可以看得出,路由先通过 192.168.1.2,然后是 192.168.4.2:

修改走向

1
2
3
4
5
6
7
R2(config)#access-list 100 permit ip host 1.1.1.1 host 2.2.2.2
R2(config)#route-map p1 permit 10
R2(config-route-map)#match ip address 100
R2(config-route-map)#set ip next-hop 192.168.2.2
R2(config-route-map)#exit
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip policy route-map p1

注意:接下来我们修改一下数据包走向。通过拓扑我们可以判断,数据包在 R2 路由器需要转变方向,发送给 R3,所以我们在 R2 路由进行如上配置。

测试走向

看下数据包的走向,可以看出,数据包发向 R2,但是路线并不是期望的那样,第三路线并不是 192.168.3.2:

变更走向

R3(config)#access-list 100 permit ip host 1.1.1.1 host 2.2.2.2
R3(config)#route-map p2 permit 10
R3(config-route-map)#match ip address 100
R3(config-route-map)#set ip next-hop 192.168.3.2
R3(config-route-map)#exit
R3(config)#interface fastEthernet 0/0
R3(config-if)#ip policy route-map p2

注意:我们需要在 R3 配置。

变更测试

再次查看一下数据包的走向:

端口网络地址转换

2020年6月17日 00:00

通过动态网络地址转换,我们可以实现多台终端同时访问外网,但是我们可以发现,随着终端数量增加,外网 IP 的需求也会增加。在现实中,一个外网的 IP 是相当昂贵的,也就是说,当使用动态网络地址转换时,成本很高。那如何低成本解决外网访问问题?我们学习一下端口网络地址转换。

实验拓扑

实验拓扑如图:

实验步骤

第一步当然是配置网络环境,因为我们使用的拓扑与《动态网络地址转换》相同,所以可以参考那篇教程方法配置。

接下来我们开始配置基于端口的网络地址转换,在 R1 路由上面:

1
2
3
4
5
6
7
R1(config)#access-list 1 permit 192.168.1.0 0.0.0.255
R1(config)#ip nat inside source list 1 interface fastEthernet 1/0 overload
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip nat inside
R1(config-if)#exit
R1(config)#interface fastEthernet 1/0
R1(config-if)#ip nat outside

方案测试

我们再来测试一下:

同样我们在 R2 上增加一条 ACL,然后测试下 C2 可否 Ping 通:

最后我们查看一下 R1 路由器的 NAT 转换列表,可以看出多台终端使用一个外网 IP 转发出,但是后面的端口号不同:

动态网络地址转换

2020年6月14日 00:00

在之前的教程中我们学习了网络地址转换。我们可以发现,这种转换是一对一转换形式,如果内网中有多个终端如何解决?今天我们学习一下动态网络地址转换。

实验拓扑

实验拓扑如图:

基本配置

首先我们需要配置一下网络环境,如图配置好每台设备的网络地址,其中 R1 路由器的 f1/0 端口需要设置多 IP,还需在此端口设置默认路由:

1
2
3
4
5
6
7
8
9
10
11
R1#configure terminal
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface fastEthernet 1/0
R1(config-if)#ip address 1.1.1.2 255.255.255.0
R1(config-if)#ip address 1.1.1.3 255.255.255.0 secondary
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#ip route 0.0.0.0 0.0.0.0 fastEthernet 1/0

接下来我们设置 R2 路由,无需过多设置,简单配置各端口 IP 即可:

1
2
3
4
5
6
7
8
R2#configure terminal
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip address 1.1.1.1 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface fastEthernet 1/0
R2(config-if)#ip address 2.2.2.1 255.255.255.0
R2(config-if)#no shutdown

转换配置

1
2
3
4
5
6
7
8
R1(config)#access-list 1 permit 192.168.1.0 0.0.0.255
R1(config)#ip nat pool cjk 1.1.1.2 1.1.1.3 netmask 255.255.255.0
R1(config)#ip nat inside source list 1 pool cjk
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip nat inside
R1(config-if)#exit
R1(config)#interface fastEthernet 1/0
R1(config-if)#ip nat outside

注意:我们开始在 R1 设置动态网络地址转换。

综合测试

最后测试一下:

C1 已经可以和 C3 通信了,那 C2 是否可以?我们在 R2 上加入 ACL 限制 C2 的地址:

1
2
3
4
R2(config)#access-list 1 deny host 192.168.1.3
R2(config)#access-list 1 permit any
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip access-group 1 in

然后再测试 C2 去 Ping 通 C3:

我们查看的 NAT 列表:

RIP 如何实现与 OSPF 的通信

2020年6月11日 00:00

之前我们学习了思科的动态路由,这种路由协议,一般应用于中小型架构。后来,我们又了解 OSPF 路由协议,这种协议一般用于大型网络。那么如何让这两种网络通信!

实验前提

相比 OSPF 的区域宣告,动态路由使用全网宣告,这两个矛盾体如何实现通信?今天我们就来学习下路由重定向。

首先需要对照《思科动态路由》以及《简单聊OSPF》教程配置下图,Router0 和 Router1 使用的动态路由,剩下路由使用的 OSPF 协议,其中 Router2 和 Router3 的 Fa0/0 都是 area 0,Router3 的 Fa0/1 口、Router4 和 Router5 都是 area 1。

实验拓扑

实验拓扑如图:

方案步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface FastEthernet0/0
Router(config-if)#no shutdown
Router(config-if)#ip address 192.168.2.2 255.255.255.0
Router(config-if)#exit
Router(config)#interface FastEthernet0/1
Router(config-if)#no shutdown
Router(config-if)#ip address 192.168.3.1 255.255.255.0
Router(config-if)#exit
Router(config)#router rip
Router(config-router)#network 192.168.2.0
Router(config-router)#exit
Router(config)#router ospf 1111
Router(config-router)#network 192.168.3.0 0.0.0.255 area 0
Router(config-router)#exit
Router(config)#route rip
Router(config-router)#redistribute ospf 1111 metric 2
Router(config-router)#exit
Router(config)#router ospf 1111
Router(config-router)#redistribute rip subnets

注意:以上命令在 Router1 路由器上设置,我们可以发现,在做重定向时,需要在连接的路由器上,同时配置动态路由和 OSPF。

方案测试

最后我们测试一下,首先是 Ping:

然后查看下路由表:

简单聊 OSPF

2020年6月8日 00:00

之前我们学习了 RIP 动态路由协议。针对多个区域,RIP 因跳数限制无法满足使用需求,这时我们需要思科另外一种动态路由技术,叫 OSPF,今天杜老师就来简单聊一下。

实验拓扑

实验拓扑如图:

实验方案

在上面拓扑中不难看出,我们将几个路由分隔开,划成不同区域,为什么要这么做呢?

我们知道,RIP 是通过宣告网段,让其它路由器通过学习,了解路由走向。而宣告出去的数据,会通过链路传递到网络中的各个设备,网络愈加庞大,要传播的数据也就越多,这样无疑加大了网络的耗损。

这时我们可以通过 OSPF 来划分区域,让路由宣告的数据只在区域内部传递,这样就可以减少网络的耗损。

下面我们通过一个实验,简单了解一下 OSPF 的配置流程。

方案步骤

  • Router0 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router ospf 1111
Router(config-router)#network 192.168.1.0 0.0.0.255 area 0
Router(config-router)#network 192.168.2.0 0.0.0.255 area 0
  • Router1 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.2.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.3.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router ospf 1111
Router(config-router)#network 192.168.2.0 0.0.0.255 area 0
Router(config-router)#network 192.168.3.0 0.0.0.255 area 1
  • Router2 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.3.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.4.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router ospf 1111
Router(config-router)#network 192.168.3.0 0.0.0.255 area 1
Router(config-router)#network 192.168.4.0 0.0.0.255 area 1
  • Router3 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.4.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.5.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router ospf 1111
Router(config-router)#network 192.168.4.0 0.0.0.255 area 1
Router(config-router)#network 192.168.5.0 0.0.0.255 area 1

方案测试

配置完成之后,我们测试一下:

测试成功之后,我们查看下路由表信息:

Cisco 以太网通道

2020年4月30日 00:00

以太网通道通过捆绑多条以太网链路来提高链路的带宽,并且运行一种机制,将多个以太网端口捆绑成一条逻辑的链路。这样就突破了端口带宽限制。

实验背景

下面的拓扑中,数据包的走向相信大家都能看懂:

项目需求

那么我们先普及一下关于端口的基本知识。图中端口为 F 端口,这个 F 代表是百兆端口,除此之外,还有 E 十兆的端口,G 千兆的端口。

每个类型的端口通过的流量也是不一样的。在当前拓扑中,每个端口都是百兆,如果 PC0 要和 PC3 通信,那么它们之间最大传输速率是 100M。如果在通信时,PC1 和 PC4 建立了通信,那么传输速率为共享 100M。也就是说,当同时建立的传输为几份时,100M 的带宽就被分成几份使用。

现在知道为啥你家办了百兆宽带,但是上网速度没那么快?原因就可能是别人正在与你共享。有人可能会说,接入的宽带增大些不就好了?可是设备的端口是百兆,就算接入千兆,它也无法使用,怎么办呢?

今天我们就来学习一个新的技术:Cisco 以太网通道。

项目拓扑

如图我们可以看到,我们通过三条网线,连接两台交换。并在这三条网线上,开启以太网通道的模式:

实验步骤

1
2
3
4
Switch>enable
Switch#configure terminal
Switch(config)#interface range fastEthernet 0/4-6
Switch(config-if-range)#channel-group 1 mode on

注意:上面配置在两台交换上执行。

简单聊 VRRP

2020年4月27日 00:00

在部署网络时,我们要考虑到负载均衡和高可用,如何将流量分布到两个设备上面,如何在一台设备坏掉时,另一个设备负责负载所有的流量。这里我们可以通过思科的 VRRP 实现。

实验拓扑

拓扑如下:

操作命令

  • R1 路由器:
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
R1#vlan database
R1(vlan)#vlan 10
R1(vlan)#vlan 20
R1(vlan)#vlan 30
R1(vlan)#vlan 40
R1(vlan)#exit
R1#configure terminal
R1(config)#interface range fastEthernet 0/0-1
R1(config-if-range)#switchport trunk encapsulation dot1q
R1(config-if-range)#switchport mode trunk
R1(config-if-range)#exit
R1(config)#interface vlan 10
R1(config-if)#ip address 192.168.10.252 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#vrrp 10 ip 192.168.10.254
R1(config-if)#vrrp 10 priority 150
R1(config-if)#vrrp 10 preempt
R1(config-if)#exit
R1(config)#interface vlan 20
R1(config-if)#ip add 192.168.20.252 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#vrrp 20 ip 192.168.20.254
R1(config-if)#vrrp 20 priority 150
R1(config-if)#vrrp 20 preempt
R1(config-if)#exit
R1(config)#interface vlan 30
R1(config-if)#ip address 192.168.30.252 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#vrrp 30 ip 192.168.30.254
R1(config-if)#vrrp 30 priority 100
R1(config-if)#vrrp 30 preempt
R1(config-if)#exit
R1(config)#interface vlan 40
R1(config-if)#ip address 192.168.40.252 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#vrrp 40 ip 192.168.40.254
R1(config-if)#vrrp 40 priority 100
R1(config-if)#vrrp 40 preempt
  • R2 路由器:
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
R2#vlan database  
R2(vlan)#vlan 10
R2(vlan)#vlan 20
R2(vlan)#vlan 30
R2(vlan)#vlan 40
R2(vlan)#exit
R2#configure terminal
R2(config)#interface range fastEthernet 0/0-1
R2(config-if-range)#switchport trunk encapsulation dot1q
R2(config-if-range)#switchport mode trunk
R2(config-if-range)#exit
R2(config)#interface vlan 10
R2(config-if)#ip address 192.168.10.253 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#vrrp 10 ip 192.168.10.254
R2(config-if)#vrrp 10 priority 100
R2(config-if)#vrrp 10 preempt
R2(config-if)#exit
R2(config)#interface vlan 20
R2(config-if)#ip add 192.168.20.253 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#vrrp 20 ip 192.168.20.254
R2(config-if)#vrrp 20 priority 100
R2(config-if)#vrrp 20 preempt
R2(config-if)#exit
R2(config)#interface vlan 30
R2(config-if)#ip address 192.168.30.253 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#vrrp 30 ip 192.168.30.254
R2(config-if)#vrrp 30 priority 150
R2(config-if)#vrrp 30 preempt
R2(config-if)#exit
R2(config)#interface vlan 40
R2(config-if)#ip address 192.168.40.253 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#vrrp 40 ip 192.168.40.254
R2(config-if)#vrrp 40 priority 150
R2(config-if)#vrrp 40 preempt
  • R3 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
R3#vlan database  
R3(vlan)#vlan 10
R3(vlan)#vlan 20
R3(vlan)#vlan 30
R3(vlan)#vlan 40
R3(vlan)#exit
R3#configure terminal
R3(config)#interface range fastEthernet 0/0-1
R3(config-if-range)#switchport trunk encapsulation dot1q
R3(config-if-range)#switchport mode trunk
R3(config-if-range)#exit
R3(config)#interface fastEthernet 0/2
R3(config-if)#switchport access vlan 10
R3(config)#interface fastEthernet 0/3
R3(config-if)#switchport access vlan 20
  • R4 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
R4#vlan database  
R4(vlan)#vlan 10
R4(vlan)#vlan 20
R4(vlan)#vlan 30
R4(vlan)#vlan 40
R4(vlan)#exit
R4#configure terminal
R4(config)#interface range fastEthernet 0/0-1
R4(config-if-range)#switchport trunk encapsulation dot1q
R4(config-if-range)#switchport mode trunk
R4(config-if-range)#exit
R4(config)#interface fastEthernet 0/2
R4(config-if)#switchport access vlan 30
R4(config)#interface fastEthernet 0/3
R4(config-if)#switchport access vlan 40

实现效果

根据上面配置,当 VLAN10/VLAN20 发送数据,会通过 R1,而 VLAN30/VLAN40 发送数据,会通过 R2。

这就是负载均衡了,流量均衡到两台设备上,降低了设备的负载;当出现故障时,例如 R2 宕机了,R1 就会承担 R2 流量。

实现原理

终端在发送数据时,会先去找网关,而网关地址是通过 R1/R2 的优先级决定的,优先级高的会抢虚拟网关 IP,而优先级低的只能等高的设备宕机后再抢过来,以此实现高可用性。

而将两台设备的优先级平均分配,这样就实现了负载均衡。

简单聊 Tunnel

2020年4月24日 00:00

首先简单说下 Tunnel 的意思,翻译成中文叫隧道,类似生活中的隧道,里面的内容我们看不到,除非身处隧道。企业在进行跨网数据传输时,为了数据安全,就会用到隧道技术。

实验拓扑

下图中的实验,我们在 R1 和 R3 上面建立隧道,而 R2 是隧道传输数据的介质:

实验配置

  • R1 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
R1#configure terminal
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip address 192.168.10.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface fastEthernet 1/0
R1(config-if)#ip address 12.1.1.2 255.255.255.0
R1(config-if)#no shutdown
R1(config)#interface tunnel 1
R1(config-if)#tunnel source 12.1.1.2
R1(config-if)#tunnel destination 23.1.1.2
R1(config-if)#ip address 100.1.1.1 255.255.255.0
R1(config-if)#exit
R1(config)#ip route 0.0.0.0 0.0.0.0 f1/0
R1(config)#ip route 192.168.20.0 255.255.255.0 tunnel 1
  • R2 路由器:
1
2
3
4
5
6
7
8
R2#configure terminal
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip address 12.1.1.1 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface fastEthernet 1/0
R2(config-if)#ip address 23.1.1.1 255.255.255.0
R2(config-if)#no shutdown
  • R3 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
R3#configure terminal
R3(config)#interface fastEthernet 0/0
R3(config-if)#ip address 192.168.20.1 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#interface fastEthernet 1/0
R3(config-if)#ip address 23.1.1.2 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#interface tunnel 2
R3(config-if)#tunnel source 23.1.1.2
R3(config-if)#tunnel destination 12.1.1.2
R3(config-if)#ip address 100.1.1.2 255.255.255.0
R3(config-if)#exit
R3(config)#ip route 0.0.0.0 0.0.0.0 f1/0
R3(config)#ip route 192.168.10.0 255.255.255.0 tunnel 2

测试结果

成功通信:

再次测试

接下来我们在 R2 上添加 ACL 禁止 192.168.10.0 网段通过 R2 路由器,命令如下:

1
2
3
4
R2(config)#access-list 1 deny 192.168.10.0 0.0.0.255
R2(config)#access-list 1 permit any
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip access-group 1 in

数据成功通过。因为 R2 并未处在隧道中,只是数据通信介质,所以并不能对数据进行限制:

安装 GNS3 思科模拟器

2020年4月6日 00:00

我们在学习思科时,会经常用到一款虚拟机,它就是 Packet Tracer。不过这款虚拟工具并不能满足我们的需求,我们需要一个更强大的虚拟工具,这里向大家推荐 GNS3。

系统介绍

GNS3 是一款具有图形化界面可以运行在多平台的网络虚拟软件。Cisco 网络设备管理员或是想要通过 CCNA/CCNP/CCIE 等 Cisco 认证考试的相关人士可通过它来完成相关的实验模拟操作。同时它也可以用于虚拟体验 Cisco 网际操作系统 IOS 或者是检验将要在真实的路由器上部署实施的相关配置。

简单说来它是 Dynamips 的一个图形前端,相比直接使用 Dynamips 这样的虚拟软件要更容易上手和更具有可操作性。

效果演示

双击安装程序,打开安装界面:

同意安装协议:

设置开始目录名称:

安装组件,这里记得勾选上 SuperPutty:

设置安装路径,这里不要出现中文:

开始安装,会先安装 WinPcap 工具包:

同意协议:

开机是否自动启动:

安装 Wireshark 工具包:

同意协议:

选择组件,默认即可:

选择快捷方式,可以将在桌面上建立快捷方式勾选上:

设置安装路径,同样不要出现中文:

因为已经安装过 WinPcap,所以不用重新安装:

安装完成:

是否运行 Wireshark 工具包,这里不要运行:

GNS3 安装完成了:

需要填写邮箱:

不填写也可以:

安装完成:

思科设备连接指南

2020年3月31日 00:00

杜老师编写的网络教程,一般都是在 PT 模拟器中实验演示,当需在真实的环境下操作时,又是如何连接思科设备的呢?

前提准备

首先,需要连接思科设备,我们这里使用 COM 转 Console 线连接。一端连接主机 COM 口,一端连接设备 Console 口。如果用的是笔记本,没有 COM 口,可以使用 USB 转 COM 线,使用前记得安装下驱动。

然后要在电脑上安装控制端,例如 XShell 或超级终端。这里我们以超级终端软件为例演示下如何连接。

连接操作

我们已经安装完成,启动软件:

这是软件界面,因为没有打开连接,所以显示空白:

我们点击文件,选择新建连接:

选择对应接口,当前为 COM3。此数字为随机,所以使用时一定要确定哪个端口,可到设备管理器中查看:

这里只有一项需要设置,它就是波特率,需要修改为 9600。代表设备通信速率,只有匹配才可显示设备信息:

确认连接时可能会显示空白,因为设备处于待机模式,回车即可看到反馈:

TCP 的四次挥手

2020年1月4日 00:00

之前杜老师为大家讲过 TCP 的三次握手,通过三次握手,我们可以建立 TCP 的连接,然后进行数据传输,那么数据传输完成之后,如何断开 TCP 的连接?今天杜老师为大家讲解 TCP 的四次挥手!

技术前提

在将四次挥手之前,我需要大家先知道,什么是全双工和半双工。

半双工是在同时刻,只允许数据在一个方向传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接受或发送信息,可以实现双向通信,如对讲机。

全双工是允许数据同时在两个方向上传输,它要求发送设备和接收设备都有独立的接收和发送能力;在同一时间可以同时接受和发送信息,实现双向通信,例如电话通信。

TCP 的数据通信,则是全双工的通信,所以不管客户端还是服务端,都可以同时上传和下载数据。

挥手图示

图示如下:

图示解读

客户端在与服务端完成数据通信之后,客户端会主动断开数据连接,发送断开请求,此请求会收到服务端的确认信息,之后则断开客户端向服务端的数据流。需要注意的是:客户端不能向服务端再发送数据,但服务端仍可以继续给客户端发数据,这就好比电话这头的你不想说了,但你不能让另一端闭嘴。

直接服务端会向客户端发送断开请求,并收到客户端确认,连接彻底断开。

相关扩展

在断开请求和确认信息收到之前,都会有一个等待的时间,是为了确保请求信息和确认信息可被对方收到,防止长时间保持连接而浪费资源。

另外上面提到的断开连接后,则不可以发送数据,这里的数据不包含确认数据。

思科单臂路由

2019年11月7日 00:00

单臂路由是指在路由器的一个接口上通过配置子接口的方式,实现原来相互隔离的不同 VLAN 虚拟局域网之间的互联互通。Cisco 网络认证体系中,单臂路由是一个重要知识点。通过单臂路由能够深入的了解 VLAN 虚拟局域网的划分、封装、通信原理。

项目拓扑

项目拓扑如图:

需求分析

PC3 可以 Ping 通 PC0/Server0。

公司因为业务需求,需要部门之间可以通信。因为处于不同网段,所以需要路由实现寻址。又因多个部门使用同一交换划 VLAN,所以需要借助单臂路由技术。

项目方案

通过单臂路由实现。

通过在路由器上开启子接口,并将子接口划分在各部门的 VLAN 内,通过 Trunk 封装实现交换机与路由间的 VLAN 同步,从而实现跨 VLAN 通信。

方案步骤

  • Router0 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#no shutdown
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1.2
Router(config-subif)#encapsulation dot1Q 2
Router(config-subif)#ip address 192.168.2.1 255.255.255.0
Router(config-subif)#exit
Router(config)#interface fastEthernet 0/1.3
Router(config-subif)#encapsulation dot1Q 3
Router(config-subif)#ip address 192.168.3.1 255.255.255.0
  • Switch0 交换机:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Switch>enable
Switch#configure terminal
Switch(config)#interface fastEthernet 0/1
Switch(config-if)#switchport mode trunk
Switch(config-if)#exit
Switch(config)#vlan 2
Switch(config-vlan)#exit
Switch(config)#vlan 3
Switch(config-vlan)#exit
Switch(config)#interface fastEthernet 0/2
Switch(config-if)#switchport access vlan 2
Switch(config-if)#exit
Switch(config)#interface fastEthernet 0/3
Switch(config-if)#switchport access vlan 2
Switch(config-if)#exit
Switch(config)#interface range fastEthernet 0/4-5
Switch(config-if-range)#switchport access vlan 3

方案测试

测试结果如图:

项目扩展

  1. 单臂路由使用思科路由虚拟端口技术,实现单一端口不同网段;

  2. 单臂路由的作用是解决思科路由设备端口不够用的问题;

  3. 设置单臂路由需要配合交换机 VLAN 技术;

  4. 交换与路由相连的端口需要开 Trunk。

如何通过命令修改 Windows 的网络地址

2019年11月1日 00:00

用 Windows 命令行来进行网络维护或远程维护是网络管理员经常用到的技巧,而对于网络配置信息修改维护就离不开 netsh 命令;它是一个 Windows 系统本身提供的功能强大的网络配置命令行工具,下面我们就看看如何用它来修改本地 IP 地址及 DNS 等网络参数。

进入方式

WIN+X选择 Windows PowerShell 管理员模式,效果如图:

修改命令

1
2
netsh interface ip set address "以太网" static 192.168.213.140 255.255.255.0 192.168.213.2
netsh interface ip set dns "以太网" static 106.12.217.238

注意:static 后分别为 IP、子网掩码、网关,第二行的为 DNS 地址,请根据实际情况来修改。

修改效果

上面命令执行效果:

命令扩展

1
2
netsh interface ip set address "以太网" dhcp
netsh interface ip set dns "以太网" dhcp

注意:通过上面命令可以将地址的获取形式改为自动获取。

TCP 的三次握手

2019年9月29日 00:00

所谓 “三次握手” 即对每次发送的数据量是怎样跟踪进行协商使数据段发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕何时撤消联系,并建立虚连接。

握手流程

TCP 三次握手的流程如图:

流程详解

  1. TCP 第一次握手:在建立连接时,客户端发送请求包到服务器,并进入 SYN_SENT 状态,等待服务器的确认;

  2. TCP 第二次握手:服务器收到请求包,必须确认客户的 SYN,同时自己也发送一个请求包,即请求确认包,此时服务器进入 SYN_RECV 状态;

  3. TCP 第三次握手:客户端收到服务器的请求确认包,向服务器发送确认包 ACK,此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手;

  4. 完成三次握手,客户端与服务器则开始传送数据。

白话解读

我们的网络是全双工的模式,首先解释一下什么叫全双工。全双工指代上传和下载可以同时进行,像我们打电话一样,任意一方可以同时接听、说话。还有一个叫半双工,像对讲机,双方无法同时说话,一方占用线路后另一方只能接听、等待。

因为这个原因,在进行网络通信时,不仅客户端要发送请求数据,还要接收服务端的确认信息,才是一次成功通信,所以需要三次握手才能进行数据通信。

第一次握手时,客户端询问服务端是否可以连接,这是请求信息。此时双方无法进行数据通信。

第二次握手时,服务端向客户端发送确认和请求信息,确认允许客户端的连接,这时允许客户端向服务端发数据。但服务端不可以向客户端发数据,因为服务端的请求信息还未得到确认。

第三次握手时,客户端向服务端发确认信息,这时允许服务端向客户端发数据,连接正式建立。

经过三次握手,双方都可以向对端发送数据,即可开始进行数据传输。如未完成握手,则只有一端可发送数据,这样是无法成功通信的。

名词解释

  1. SYN 表连接请求,在请求连接对方时,会在数据包打上该标记,代表我请求连接你;

  2. ACK 表请求确认,在收到对方请求信息后,如果同意对方连接,则会在返回的数据包打上该标记,代表同意你的连接;

  3. seq 表数据包序列号,为了保证数据的完整性,会在数据包上标注序列;

  4. ack 数据包确认,收到数据包后,接收端需回复确认,会在原数据包序列号上加一,代表该数据收到了。

地址解析协议

2019年9月20日 00:00

地址解析协议,即 ARP,是根据 IP 地址获取物理地址的一个 TCP/IP 协议。主机发送信息时将包含目标 IP 地址的 ARP 请求广播到局域网络上的所有主机,并接收返回的消息,以此确定目标物理地址;收到返回消息后将该 IP 地址和物理地址存入本机 ARP 缓存中并保留一定时间,下次请求时直接查询 ARP 缓存以达到节约资源的目的。

网络拓扑

如图,我们让 PC0 去 Ping 通 PC1。我们发现,当数据包路过交换机时,数据包变成了两个,同时发送给 PC1 和 PC2。这是什么原因:

原因分析

我们分析一下,图中的交换机属于二层设备,也就是说,它支持 MAC 地址,但不能识别 IP 地址。而发送的 Ping 包,仅包含 IP 地址,下图为 PC0 去 Ping 通 PC3 时数据包内容:

查询效果

当数据包到交换机上时,交换机不能识别数据包中 IP 地址,那这个数据发给谁?事实上这个数据包就是 ARP 请求包,交换机会把这个数据包,分别转给连接交换机的其它设备,当数据包被接收后,终端设备会判断自身的 IP 是否和请求包中数据相符。如果相同,则会回复;如果不同,则会丢弃。PC0 在接收到返回的请求包后,会在包里提取出 PC1 的 MAC 地址,并在本地做 ARP 映射,下次再发送数据时,直接附上 MAC 地址而不需要 IP 地址:

流程扩展

发送端在给接收端发送数据包时,会先查看本地的 ARP 列表。

如果列表中有接收端的 MAC 地址则直接调用。

如果列表中没有接收端的 MAC 地址,则会优先发送一个 ARP 请求包,询问接收端 MAC 地址。

请求包经交换设备转发,因为交换机为二层设备「OSI 第二层」所以无法识别包含在 ARP 请求包中的 IP 地址,而 ARP 请求包中的目标 MAC 地址无效,故会将此请求包分发给除发送端外的所有设备。

其它设备收到该请求包之后,会判断该请求包是否是发给自身。

如果不是,则会直接丢弃。

如果是发给自身的,则将本身的 MAC 地址写入该请求包,并返回发送端。

发送端收到包含接收端 MAC 地址的请求包后,会将该 MAC 地址保存到 ARP 列表,以备下次通信使用。

TCP 的快速恢复

2019年9月19日 00:00

之前我们提到,当网络发生拥塞时,发送方重新进入慢启动,而慢启动的报文数是从一开始的,虽然是指数的增长,但是从一还是感觉会慢,有什么方法快速恢复吗?

技术图解

快速恢复图解:

看图说话

上图为快速恢复的算法:当发送方连续收到三个重复确认,会把慢启动门限 ssthresh 减半,然后在新 ssthresh 上使用拥塞避免算法。

上图中在 24 处出现拥塞,ssthresh 调整为一半为 12,快速恢复会直接发送 12 报文,之后使用拥塞避免算法,线性增长。相比慢速启动由 1 开始,快速恢复更快一些!

TCP 的快速重传

2019年9月18日 00:00

之前的文章我们有讲解 TCP 拥塞避免的方式,这些都是通过发送端来实现,那么接受方有什么方式解决拥塞问题?

技术图解

接收方的拥塞避免方式,叫做快速重传。快速重传如何操作?我们以下图为例简单说一下:

看图说话

接收方收到了 M1 和 M2 后都分别发出了确认。现在假定接收方没有收到 M3 但接收到了 M4。接收方不能确认 M4,因为 M4 是收到的失序报文段。根据可靠传输原理,接收方可以什么都不做。但按照快重传算法规定,接收方应及时发送对 M2 重复确认,这样做可以让发送方及早知道报文段 M3 没有到达接收方。

发送方在收到三次重复确认之后,会立即重新发送 M3。并且判定网络可能出现拥塞,然后把 ssthresh 设置为 cwnd 一半,最后重新进入拥塞避免阶段。

TCP 的拥塞避免

2019年9月17日 00:00

拥塞避免算法基本思想:一旦进入拥塞避免状态,拥塞窗口的值置 1,慢开始门限设为上次的值的一半。此时每个往返时延只将拥塞窗口的值增加一个最大报文长度。一种通用的方法是对于 TCP 发送方无论何时到达一个新的确认,就将拥塞窗口增加一个最大报文长度。

技术介绍

大家都听过国王与象棋的故事吧,国王想要奖励象棋的发明者,发明家说我要填满象棋棋盘,第一个格放一粒米,第二个格放 2 粒米,第三个放 4 粒,以此类推。开始还好,最后国库都放空了。可以看出,指数增长很恐怖的。

而慢启动就是使用指数增长,所以终会有一个点,超过网络负载能力,这时会发生什么呢?

技术扩展

为防止拥塞窗口 cwnd 增长过大引起网络拥塞,还需要设置一个慢速开始门限 ssthresh 状态变量。

之前的文章已经介绍了,慢启动以指数增长,在收到接收端的确认后,下次传输两倍的数据量。

如果发送之后,并没有收到接收端确认,发送端会判断当前网络处于拥塞状态。

下图中拥塞阈值在 24 处,发送端发送 16 个报文时,可以收到接收端的确认,它会发送 32 个报文。但是当前网络只能承载 24 个,所以说会有 8 个报文收不到确认。

技术图解

通过下面图片,我们简单说下慢启动的算法:

看图说话

如果发送方设置超时计时器时限已到但还没有收到确认,那么很可能是网络出现拥塞,致使报文段在网络中某处被丢弃。这时,TCP 马上把拥塞窗口减小到 1,并执行慢开始算法,同时把慢开始门限值 ssthresh 减半。

当发送端判断网络拥塞之后,会将门限 ssthresh 减为之前的一半,之前是 32,新值就是 16 个。

然后重新开始慢速启动。第一次 1,第二次 2,第三次 4,第四次 8,第五次 16,第五次达到了新门限 ssthresh。

接下来还是执行拥塞避免的算法,第六次发送 17 个包,第七次 18,每次加一,线性增长。当达到 24 个时,实际上网络可以承载的,但加到 25 个时,会有一个包收不到确认,这时,最终数值为 24。

TCP 的慢速启动

2019年9月16日 00:00

慢速启动是传输控制协议使用的一种阻塞控制机制。慢速启动也叫做指数增长期。慢速启动是指每次 TCP 接收窗口收到确认时都会增长。增加的大小就是已确认段的数目。

技术介绍

大家都有过这个经历吧,在双 11 时网购,需要好久才能收到,为什么呢?在考虑卖家的发货能力,以及买家的收货能力后,我们还需要考虑快递的传输能力。

同理,当主机开始发送数据时,我们需要考虑网络承载能力,如果立即所大量数据字节注入到网络,那么就有可能引起网络拥塞。如何防止这个问题的发生呢?我们今天来讲一下 TCP 慢启动。

技术图解

慢速启动:

看图说话

通常在刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段的数值。而在每收到一个对新报文段的确认后,把拥塞窗口增加至多一个 MSS 数值。

也就是说,第一次时发送 1 个报文,在收到接收端确认之后,第二次时发送 2 个报文,同样都确认后,第三次时发送 4 个报文,2 倍指数增长。

它的名字虽然叫慢启动,但实际上一点不慢,因为指数增长是很快的,所以它需要一个上限值,默认为 64K。

慢启动的作用就是最大限度使用网络资源。

技术扩展

最大报文段长度选项 MSS,MSS 选项用于在 TCP 连接建立时,收发双发协商通信时每一个报文段所能承载的最大数据长度。MSS 选项只能在初始化连接请求的报文段中使用。在报文段中发送 MSS 选项的终端利用该选项来对端 TCP 实体通告本端点在一个报文段中所能够接受的最大数据长度。若没有指定这个选项意味本终端能够接受任何长度的报文段。

一个 TCP 连接上允许各种长度报文段的传输,因此连接的两端利用 MSS 选项来协商报文段中最大数据长度是很必要的。例如在一个小型系统中由于空间限制,TCP 仅能提供较小接受缓冲区。则它与其它系统通信时,就必须互相协商一个较合适的 MSS,使对端发出报文段中的数据能够存入其接受缓冲器。由于 TCP 连接的两个端点可能存在差异,在一个 TCP 连接的两个数据流方向上常常可能采用不同的 MSS 值。

进行 MSS 协商的另一个好处是能够提高网络带宽的利用率。在一个局域网中进行通信的两个节点可以选择一个较大的 MSS,使得报文段封装成 IP 分组时能够充分利用网络带宽。但实际上在一般的 Intenet 环境中,为连接选择一个合适的 MSS 是很困难的。这是因为 MSS 的取值过大或过小都会影响网络和 TCP 的性能。如报文段太小,将会大大降低网络的利用率。但如果报文段太大也可能影响网性能。这是由于长 IP 分组在网络中传输时往往需要被分片传输。分片和重组的过程自然将带来一定的网络处理开销。而且 IP 分组被分片后会独立传输,任何一个分片出现错误或丢失都将导致整个分组被丢弃,这也意味着整个报文段丢失,TCP 只能对整个 IP 分组进行确认和重传。由于在 IP 通信子网中分组丢失的概率总是存在,因此 MSS 的增加所导致的分片将会使报文段成功达到目的端的概率下降,从而影响 TCP 性能和降低网络的吞吐率。

从理论讲,理想的 MSS 应该能尽可能多地承载用户数据,在传输上又需避免分片。但实际中确定这样一个最佳的 MSS 是困难的。一种通路 MTU 发现技术可以帮助 TCP 来确定最佳的 MSS 值。但是,仍然有许多 TCP 的实现并不能提供这样的值。同时,由于 Internet 中采用的是动态路由选址,TCP 报文段的传输通路可能不断地发生改变,这使动态地计算最佳 MSS 更加困难。

TCP 的滑动窗口

2019年9月15日 00:00

滑动窗口概念不仅存在于数据链路层,也存在于传输层中,两者有不同的协议,但基本原理上是相近的。其中一个重要的区别是,一个是针对于帧的传送,另外一个是字节数据的传送。

技术介绍

突然有天,你的土豪朋友要给你邮个床,一个超级大豪华床,别问我为什么,任性!

你特别的感动,然后很高兴拒绝了,原因是你在北京住着一个不到五平米的小隔断,床放不下!

通过一个悲催的小例子,我们知道在邮寄东西时,需要考虑接收方的接收能力,不然东西发过去后,收方无法处理。

数据传输也是这个道理,当发送端在发送数据时,如果不考虑网络的情况,直接发送数据,可能数据包的大小超过接收端的接收能力,这个包会被接收端丢掉,变成弃包。

技术图解

而这个接收的能力,就是我们今天要学习的滑动窗口。我们先放一张图片:

看图说话

设 A 向 B 发送数据。在连接建立时,B 告诉 A:我的接收窗口是 rwnd=400。因此,发送方发送窗口不能超过接收方给出的接收窗口的数值。注意,TCP 窗口单位是字节,非报文段。再设每一个报文段为 100 字节,而数据报文段序号的初始值设为 1。大写 ACK 表示首部中的确认位,小写 ack 表示确认字段的值 ack。

图中可以看出,B 进行了三次流量控制。第一次把窗口减少到 300,第二次又减到了 100,最后是 0,即不允许发送方再发送数据。这种使发送方暂停发送的状态将持续到主机 B 重新发出一个新窗口值为止。

只要 TCP 连接的一方收到对方的零窗口通知,就启动持续计时器。

什么是持续计时器?

技术扩展

为了对付零窗口大小的通知,TCP 需要另外一个计时器。假定接收 TCP 宣布了窗口大小为零。发送 TCP 就会停止传送报文段,直到接收 TCP 发送确认并且宣布一个非零的窗口大小。但这个确认可能会丢失。我们知道 TCP 中,对确认是不需要发送确认的。若确认丢失了,接收的 TCP 并不知道,而是会认为它已经完成任务,并等待着发送 TCP 接着会发送更多的报文段。但发送 TCP 由于没有收到确认,就会等待对方发送确认来通知窗口的大小。双方的 TCP 都在永远地等待着对方。

为了打破这种死锁,TCP 为每一个连接使用一个持续计时器。当发送 TCP 收到一个窗口大小为零的确认时,就启动持续计时器。当持续计时器期限到时,发送 TCP 就发送一个特殊的报文段,叫探测报文段。这个报文段只有一个字节数据。它有一个序号,但它的序号永远不需要确认;甚至在计算对其他部分的数据的确认时该序号也被忽略。探测报文段是提醒对端:确认已经丢失,必须重传。

持续计时器的值设置为重传时间数值。但是,若是没有收到从接收端来的响应,则需发送另一个探测报文段,并将持续计时器的值加倍和复位。发送端继续发送探测报文段,将持续计时器设定值加倍和复位,直到这个值增大到门限值止。在这以后,发送端每 60 秒就发送一个探测报文段,直到窗口重新打开。

这个概念就到这里,有问题的可以在文章下提问。另外以上为个人的理解,欢迎更正指导!

OSI 七层模型非专业简介

2019年9月4日 00:00

OSI 是 Open System Interconnection 的缩写,中文为开放式系统互联。国际标准化组织制定 OSI 模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。

模型简介

想要更好掌握思科的知识点,我们首先需要学习的就是 OSI 七层模型,它是互联网通信的参考模型,那我们先谈论一下,为什么需要 OSI 七层模型?

互联网发展到今天,已经是全球性。全球有很多的国家,每一个国家都有自己的语言,我们使用不同语言如何沟通?计算机也是一样的,现在手机、平板、电脑都能上网,这些不同设备,也在使用不同信号,那这些信号之间如何通信呢?这就需要一个统一标准,OSI 七层模型就是这样出现的。

模型图示

OSI 七层模型从下到上分别是:

分层解释

  1. 第一层物理层:最简单的理解,我们所看到的网线,就是物理层的。物理层是传输媒介,所以无线网络也算是物理层,在线路中起到的作用是将 0/1 转换成电信号或光信号;

  2. 第二层数据链路层:我们接触的 MAC 物理地址,就是数据链路层的。在线路中起到的作用是相邻的两个设备之间的互相通信;

  3. 第三层网络层:IP 就是网络层,作用就是寻址,让数据包找到最终地址;

  4. 第四层传输层:TCP/UDP 都是传输层,用于建立以及断开连接;

  5. 第五层会话层:它是传输层的领导,管理传输层什么时候建立连接或什么时候断开;

  6. 第六层表示层:将上一层「即应用层」协议,翻译成电脑可识别语言,如 UTF-8;

  7. 第七层应用层:每个网络应用,都对应不同的协议,这些协议就属于应用层。

模型扩展

数据在发送时,由上至下封装,即第七层至第一层,目标在收到数据包之后,由下至上解包,即第一层至第七层。

每一层的分工不同,通过这种明确、简洁分工,在通信过程中如果出现问题,就很方便发现问题的所在层,针对那一层处理即可使网络连通。

基于端口的 NAT

2019年9月3日 00:00

通过网络地址转换,我们可以实现终端访问外网,但是我们发现,同一时间只有一个终端可以上网,如何实现多台终端同时上网?我们学习一下基于端口的 NAT。

项目拓扑

项目拓扑如图:

需求分析

左侧两个 PC 可同时连通右侧的 PC。

NAT 只能转换一个内网 IP 为一个外网 IP,所以无法实现多台内网设备同时连通外网。

项目方案

网络中的通信除了依赖 IP 地址外,还需要使用端口来进行通信,所以借助端口,我们可以实现多对一的转换形式。

通过基于端口的 NAT,即 PNAT,也称为 PAT,可以将多个内网 IP,同时映射到一个网络接口上,通过一个外网地址,不同端口实现地址转换。

方案步骤

  • R1 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#ip route 0.0.0.0 0.0.0.0 fastEthernet 1/0
Router(config)#access-list 1 permit any
Router(config)#ip nat inside source list 1 interface fastEthernet 1/0 overload
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#ip nat inside
Router(config-if)#exit
Router(config)#interface fastEthernet 1/0
Router(config-if)#ip address 1.1.1.2 255.0.0.0
Router(config-if)#no shutdown
Router(config-if)#ip nat outside
  • R2 路由器:
1
2
3
4
5
6
7
8
9
10
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 2.2.2.1 255.0.0.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 1/0
Router(config-if)#ip address 1.1.1.1 255.0.0.0
Router(config-if)#no shutdown

方案测试

下图为第一台 PC 进行连通性测试:

下图为第二台 PC 进行连通性测试:

在特权模式下,使用 show ip nat translations 查询 NAT 转换列表:

项目扩展

  1. 绝大多数路由设备,都会使用 PAT 来进行网络地址转换;

  2. PAT 需配合 ACL 来实现内网地址列表。

访问控制列表

2019年9月2日 00:00

ACL 访问控制列表是一种基于包过滤的访问控制技术,它可以根据设定的条件对接口上的数据包进行过滤,允许其通过或丢弃。访问控制列表被广泛地应用于路由器和三层交换机。借助访问控制列表,可有效地控制用户对网络的访问,从而最大程度保障网络安全。

项目拓扑

项目拓扑如图:

需求分析

PC0 可与 PC1 及 Server0 连通,PC1 不可以与 Server0 连通。

因 PC0 与 PC1 处于相同网段,所以无需配置即可连通。借助路由设备,PC0 与 PC1 也可以与 Server0 连通。

项目方案

阻止 PC1 通过路由器,即可实现项目需求。

清空 PC1 的网关地址可以实现项目需求,但效果不可控,我们通过 ACL 访问控制列表来实现。

方案步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#access-list 1 deny host 192.168.1.3
Router(config)#access-list 1 permit any
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#ip access-group 1 in
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shutdown

注意:因为只需阻止 PC1 通过路由器即可实现项目需求,所以只需配置路由设备即可。

方案测试

下图中左侧为 PC0 的连通测试,右侧为 PC1:

项目扩展

  1. ACL 分为标准型访问控制列表,与扩展型访问控制列表。区别是标准型只能限制来源地址,扩展型可限制来源地址、来源端口、目的地址、目的端口等等;

  2. ACL 默认会在规则最后添加一条 deny any,如设置的规则为 deny,最后需要添加一条 permit any 才可以;

  3. 端口调用 ACL 时一定要判断数据的方向,根据方向决定进口、出口。

思科网络地址转换

2019年8月28日 00:00

当在专用网内部的一些主机本来已经分配到了本地的 IP 地址,但现在又想和因特网上的主机通信时,可使用 NAT 方法。这种方法需要在专用网连接到因特网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT 路由,它至少有一个有效的外部全球 IP 地址。这样,所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和因特网连接。

项目拓扑

项目拓扑如图:

需求分析

PC0 可以 Ping 通 PC1。

私网地址只能在内网中使用,外网不允许出现私网 IP。

项目方案

要将内网的源地址转换为外网的地址,数据包才可以在网络中流通。

这里可以使用网络地址转换实现。NAT 会将内网的地址转换为外网的地址,数据包返回后,目标地址指向边际路由,路由会将外网地址转换成内网的地址,再发现内网的目标终端。

方案步骤

  • Router0 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#ip route 0.0.0.0 0.0.0.0 fastEthernet 0/1
Router(config)#ip nat inside source static 192.168.1.2 1.1.1.2
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#ip nat inside
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 1.1.1.2 255.0.0.0
Router(config-if)#no shutdown
Router(config-if)#ip nat outside
  • Router1 路由器:
1
2
3
4
5
6
7
8
9
10
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 2.2.2.1 255.0.0.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 1.1.1.1 255.0.0.0
Router(config-if)#no shutdown

方案测试

测试结果如图:

项目扩展

  1. 网络地址转换有很多种,如果按照地址分类,可分为源地址转换、目标地址转换;

  2. 如果按照功能分类,可分为一对一的 NAT,多对多 DNAT 动态网络地址转换,一对多 PAT,也称为 PNAT,是基于端口的网络地址转换。

思科 DHCP 中继路由器

2019年8月27日 00:00

在生产环境中,我们需要使用多个网段,如果在连接这些网段的路由中配置 DHCP 服务,会增加我们的维护成本,这时我们可以使用 DHCP 的中继功能,来实现跨网段 IP 分配。

项目拓扑

项目拓扑如图:

需求分析

PC0 可以获取 IP。

配置路由设备可以使其具备 DHCP 的功能,但图中的 DHCP 服务端与客户端之间存在另外一台路由设备,而该设备没有配置 DHCP 的功能。

项目方案

通过 DHCP 中继路由器实现。

客户端在向最近的路由器请求 IP,而最近的路由器并非 DHCP 的服务端,但是它知道要找谁要 IP,根据指向地址,中继将获取到的地址发给客户端。

方案步骤

  • Router0 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#ip dhcp pool cjk
Router(dhcp-config)#network 192.168.2.0 255.255.255.0
Router(dhcp-config)#default-router 192.168.2.1
Router(dhcp-config)#dns-server 8.8.8.8
Router(dhcp-config)#exit
Router(config)#ip route 192.168.2.0 255.255.255.0 fastEthernet 0/0
  • Router1 路由器:
1
2
3
4
5
6
7
8
9
10
11
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.1.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#ip helper-address 192.168.1.1
Router(config-if)#no shutdown

方案测试

测试结果如图:

注意事项

  1. 在配置 IP 地址池时,所设置的网关是否是目标网段的网关;

  2. DHCP 中继端需要直接指向 DHCP 服务端,不可指向其它中继。

简单聊 EIGRP

2019年8月26日 00:00

我们发现思科动态路由协议也有其局限性,一个网络中只能存在 16 台路由器。那如何破解这个局限性?我们今天学习一种新的路由协议,叫 EIGRP,它的跳数超过 16 跳,不过缺点是它属于思科私有协议,其它厂家网络设备并不支持。

项目拓扑

项目拓扑如图:

需求分析

PC0 可以 Ping 通 PC1。

Router0 只知道两个网段,分别是 192.168.1.0/192.168.2.0。Router1 只知道两个网段,分别是 192.168.2.0/192.168.3.0。Router2 只知道两个网段,分别是 192.168.3.0/192.168.4.0。所以如果想要 PC0 可以 Ping 通 PC1,必须告诉 0 路由器 192.168.3.0/192.168.4.0 的走向,并且因为需要回包,所以 2 路由器需要知道 192.168.1.0/192.168.2.0 的走向。同时需要 1 路由器知道 192.168.1.0/192.168.4.0 的走向。

项目方案

通过动态路由实现。

我们只是通过少量设备演示,如果大家有时间和精力,可以大量添加路由设备。

方案步骤

  • Router0 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router eigrp 1
Router(config-router)#network 192.168.1.0
Router(config-router)#network 192.168.2.0
  • Router1 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.2.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.3.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router eigrp 1
Router(config-router)#network 192.168.2.0
Router(config-router)#network 192.168.3.0
  • Router2 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.4.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.3.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router eigrp 1
Router(config-router)#network 192.168.3.0
Router(config-router)#network 192.168.4.0

方案测试

测试结果如图:

接着我们查看下路由表:

技术特点

  1. 快速收敛;

  2. 部分更新;

  3. 支持多种网络层的协议;

  4. 使用多播、单播;

  5. 支持变长子网掩码;

  6. 无缝连接数据链路层协议和拓扑结构;

  7. 配置简单。

思科动态路由

2019年8月25日 00:00

之前讲了如何配置静态路由。现在我们又遇到了一个问题,如图我们增加一个路由。如果我们还像之前那样通过静态路由配置,想想看是不是麻烦很多。所以今天我们学习一下动态路由。

项目拓扑

项目拓扑如图:

需求分析

PC0 可以 Ping 通 PC1。

Router0 只知道两个网段,分别是 192.168.1.0/192.168.2.0。Router1 只知道两个网段,分别是 192.168.2.0/192.168.3.0。Router2 只知道两个网段,分别是 192.168.3.0/192.168.4.0。所以如果想要 PC0 可以 Ping 通 PC1,必须告诉 0 路由器 192.168.3.0/192.168.4.0 的走向,并且因为需要回包,所以 2 路由器需要知道 192.168.1.0/192.168.2.0 的走向。同时需要 1 路由器知道 192.168.1.0/192.168.4.0 的走向。

项目方案

通过动态路由实现。

项目可以通过静态路由实现,不过实现起来工程量比较大,因为需要规划所有网段走向。这里同样可用动态路由实现。动态路由会把路由器已知的网段宣告出去,其它路由通过学习即可自动判断走向。

方案步骤

  • Router0 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router rip
Router(config-router)#network 192.168.1.0
Router(config-router)#network 192.168.2.0
  • Router1 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.2.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.3.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router rip
Router(config-router)#network 192.168.2.0
Router(config-router)#network 192.168.3.0
  • Router2 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.4.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.3.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router rip
Router(config-router)#network 192.168.3.0
Router(config-router)#network 192.168.4.0

方案测试

测试结果如图:

项目扩展

  1. 动态路由会持续产生数据包占用网络;

  2. 动态路由如不宣告则不学习,故无法与静态路由结合使用;

  3. 动态路由有跳数的限制,允许 15 跳,故路由设备不可以超过 16 台。

思科静态路由

2019年8月24日 00:00

静态路由是一种路由的方式,路由项由手动配置,而非动态决定。静态路由是固定的,不会改变,即使网络状况已经改变或者是重新被组态。一般来说,静态路由是由网络管理员逐项加入路由表。

项目拓扑

项目拓扑如图:

需求分析

PC2 可以 Ping 通 PC1。

Router0 只知道两个网段,分别是 192.168.1.0/192.168.2.0。Router1 只知道两个网段,分别是 192.168.2.0/192.168.3.0。所以如果想要 PC2 可以 Ping 通 PC1,必须告诉 0 路由器 192.168.3.0 的走向,并且因为需要回包,所以 1 路由器需要知道 192.168.1.0 的走向。

项目方案

通过静态路由实现。

分别配置好 PC1/PC2 的 IP。

方案步骤

  • RouterA 路由器:
1
2
3
4
5
6
7
8
9
10
11
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#ip route 192.168.3.0 255.255.255.0 fastEthernet 0/1
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shutdown
  • RouterB 路由器:
1
2
3
4
5
6
7
8
9
10
11
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#ip route 192.168.1.0 255.255.255.0 fastEthernet 0/0
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.2.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.3.1 255.255.255.0
Router(config-if)#no shutdown

方案测试

测试结果如图:

项目扩展

1
show ip route

注意:查询 IP 路由表,在特权模式下执行上面命令。

通过 VTP 在多台交换机间同步 VLAN 数据

2019年8月3日 00:00

公司又扩大了,部门人数逐渐增多,一台交换机已经无法满足公司的需求,我们采购了多台交换机,现在需要在这些交换机上配置多个 VLAN,是不是感觉工作量特大,有什么好的办法吗?

项目拓扑

项目拓扑如图:

需求分析

通过最简单的方法,在 3 台交换上增加相同的 VLAN。

如果交换之间可以互相学习,就能减少很大的工作量。

项目方案

VTP 英文全称 VLAN Trunk Protocol,中文名 VLAN 中继协议。用于在多台交换机间同步 VLAN 数据。

VTP 有三种模式:

  1. 服务模式「可以管理 VLAN 数据库,并向外发送 VLAN 数据」
  2. 透明模式「只负责传输 VLAN 数据,并不学习」
  3. 客户模式「学习服务端 VLAN 数据,但不可以添加」

注意:数据通过开启透明模式的交换设备时,需该设备具备对应的 VLAN。

方案步骤

  • Switch0 交换机:
1
2
3
4
5
6
7
8
Switch>enable
Switch#configure terminal
Switch(config)#interface fastEthernet 0/1
Switch(config-if)#switchport mode trunk
Switch(config-if)#exit
Switch(config)#vtp domain cjk
Switch(config)#vtp mode server
Switch(config)#vtp password cjk
  • Switch1 交换机:
1
2
3
4
5
6
7
8
Switch>enable
Switch#configure terminal
Switch(config)#interface fastEthernet 0/2
Switch(config-if)#switchport mode trunk
Switch(config-if)#exit
Switch(config)#vtp domain cjk
Switch(config)#vtp mode transparent
Switch(config)#vtp password cjk
  • Switch2 交换机:
1
2
3
4
5
Switch>enable
Switch#configure terminal
Switch(config)#vtp domain cjk
Switch(config)#vtp mode client
Switch(config)#vtp password cjk

方案测试

注意:上图为服务端,在上面添加 VLAN。

注意:上图为中继端,只传输不学习。

注意:上图为客户端,学习服务端 VLAN 数据。

项目扩展

1
show vlan

注意:查询 VLAN 的数据,在特权模式下执行上面命令。

通过 Trunk 实现多台交换间 VLAN 内通信

2019年8月2日 00:00

因为公司规模逐渐扩大,出现相同部门不同办公室的情况,老板提出新的要求:相同部门可以通信,不同部门不能通信。

项目拓扑

项目拓扑如图:

需求分析

PC0 和 PC2 能通信,PC1 和 PC3 能通信,其余不能通信。

可以通过 VLAN 来实现,但是在两台交换设备的连接端口如何设置?让标签通过连接端口不去掉就可以了。

项目方案

使用 Trunk 封装实现多交换之间 VLAN 内通信。

交换设备的端口有两种模式:

  1. Access 的模式:进入带上标签、出去前会判断标签、出去后会摘掉标签;
  2. Trunk 的模式:终端不会直连,出去前不判断标签、出去后不摘掉标签。

注意:Trunk 常用于网络设备连接,不会直接连接终端,所以不考虑进入时贴不贴标签的问题。

方案步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Switch>enable
Switch#configure terminal
Switch(config)#vlan 2
Switch(config-vlan)#exit
Switch(config)#vlan 3
Switch(config-vlan)#exit
Switch(config)#interface fastEthernet 0/1
Switch(config-if)#switchport access vlan 2
Switch(config-if)#exit
Switch(config)#interface fastEthernet 0/2
Switch(config-if)#switchport access vlan 3
Switch(config-if)#exit
Switch(config)#interface fastEthernet 0/3
Switch(config-if)#switchport mode trunk

注意:两台交换设备命令相同。最后一行命令,只需在其中一台交换机执行即可,不需两台同时执行。在执行后,会同步到另一台交换机自动执行。

方案测试

测试效果如图:

方案原理

标签为 2 的数据包在经过交换机 Trunk 端口时,标签并没去掉,而是进入另一个交换机,然后再通过 2 端口发出。数据包经过第一台交换机 2 端口,打上 2 的标签,然后通过 Trunk 口发出,发出后 2 标签还在,进入第二台交换机,最后通过 2 口发出,标签去掉:

VLAN 虚拟局域网

2019年8月1日 00:00

在一家小型企业中,所有员工都使用一台交换机,老板为了避免员工私下通信,将他们分配了不同网段,但偶尔还是会发现,有些员工会自行修改网段和别人通信。如果你是这家企业的网络工程师,你该如何处理?

项目拓扑

项目拓扑如图:

需求分析

PC0 和 PC1 即使处于同网段也不可以 Ping 通!

在不同网段时,PC0 和 PC1 不处于同一个广播域,所以不能通信,也就是说,隔离两者的广播域,可以让其不能通信。

项目方案

使用 VLAN 虚拟局域网隔离两者的广播域。

相同的 VLAN 可以通信,不同的 VLAN 不可通信。

方案步骤

1
2
3
4
5
6
7
8
9
10
11
Switch>enable
Switch#configure terminal
Switch(config)#vlan 2
Switch(config-vlan)#exit
Switch(config)#vlan 3
Switch(config-vlan)#exit
Switch(config)#interface fastEthernet 0/1
Switch(config-if)#switchport access vlan 2
Switch(config-if)#exit
Switch(config)#interface fastEthernet 0/2
Switch(config-if)#switchport access vlan 3

注意:以上命令在交换设备上执行。

方案测试

测试效果如图:

方案原理

PC0 在发送数据包时,需要经过交换机 Fa0/1 端口,而这个端口被封装为 VLAN2,也就是说,这个数据包被打上了 VLAN2 标签,它只能从另一个 VLAN2 端口出去。通过这种限制,使两台 PC 即便处于统一网段,也不可以通信:

CentOS7 用命令配置链路聚合

2019年7月10日 00:00

链路聚合是一个计算机网络术语,将多个物理端口汇聚在一起,形成一个逻辑端口,以实现出入流量在各成员端口的负荷分担,交换机根据用户配置的端口负荷分担策略决定网络封包从哪个成员端口发送到对端的交换机。

实验环境准备

  1. 在 VMware Workstation 部署好 CentOS7 系统;

  2. 至少为安装好的 CentOS7 系统添加两块网卡。

创建虚拟网卡

1
nmcli connection add type team con-name team0 ifname team0 autoconnect yes config '{"runner": {"name": "activebackup"}}'

注意:这个"runner": {“name”: “activebackup”}两边不要有空格,否则一切重来。

添加成员网卡

  • 向虚拟网卡 team0 中添加 eth1 网卡:
1
nmcli connection add type team-slave con-name team0-1 ifname eth1 master team0
  • 向虚拟网卡 team0 中添加 eth2 网卡:
1
nmcli connection add type team-slave con-name team0-2 ifname eth2 master team0

网卡配置地址

1
nmcli connection modify team0 ipv4.method manual ipv4.addresses 192.168.1.250 connection.autoconnect yes

注意:本例为虚拟网卡 team0 设置地址为 192.168.1.250。

激活网卡配置

  • 激活虚拟网卡:
1
nmcli connection up team0
  • 激活成员网卡:
1
2
nmcli connection up eth1
nmcli connection up eth2

查看运行状态

1
teamdctl team0 state

注意:结果中的 runner 表示目前使用的哪个网卡。

测试链路聚合

  • 停掉成员网卡:
1
ifconfig eth1 down
  • 查看聚合状态:
1
teamdctl team0 state

聚合模式补充

CentOS7 中的链路聚合有两种模式,一种是 activebackup 连接冗余,指当一个网卡出现问题,会自动切换到另外一个网卡。

另一种 roundrobin 负载均衡,会把网络流量,分配给两个网卡一并去处理,理论上可增加端口带宽,不过需要交换设备支持。

WordPress首页调用typecho方法!

2024年10月28日 14:10

Wordpress首页调用typecho方法! - 第1张图片

前段时间花了那么多的时间折腾了《WordPress首页调用memos方法!》后,怎么又来折腾Wordpress首页调用typecho呢!原因有这样的两点,首先memos的作者对memos的更新真的是太随意了,每次版本的升级,你会想不到他会把什么功能给删掉、或是更想不到把数据库的结构给改了、还有就是随意改变API的接口。也正因为他的随意,一部分人还保持在低版本来使用,另外一部分人就是直接弃用了,所以我想着说不定哪一天也会弃用memos。另外的一个原因就是除了老张博客之外,我还有一个老张随笔,一直保持每日一更新,字数都是在二百字,就像朋友圈一样,最初是用typecho程序,后来改用memos,目前那个typecho上面还放着一千两百多篇随笔。我想与其这样牵强的用着memos,不如退回来用typecho算了。

有了上面的想法后,就想着把我的wordpress和typecho来个“整合”,在wordpress调用typecho的首篇文章。有了上一次的折腾,这次算是轻车熟路了,前前后后的折腾有两个小时。通过这次的折腾,让我对AI又有了新的认识,上次我认为是“豆包最聪明”,结果经过这次的“折腾”发现把相同的问题多次的提问同一个AI,每次他给出的答案也是不一样的。单单就响应速度来说,官方的GPT最为快,所以这次代码就是借助官方GPT来完成的。话不多说,直接上代码吧!

忘了一个重要的事: typecho本身没有提供API接口服务,这里我找到一款插件,Restful,安装后直接启用就行,因为我是直接调用文章的,其他的API接口就被我给关了!

1.把下面的代码插入到主题文件的index.php合适位置。

<?php
$data = fetch_typecho_data();
if ($data):
?>
<div class="latest-update" style="background-color: #f8f8f8;">
<div class="latest-update-header">
<h2>最新动态</h2>
<span class="latest-update-time"><?php echo esc_html($data['time_content']); ?></span>
</div>
<div class="latest-update-divider"></div>
<div class="latest-update-content"><?php echo esc_html($data['content']); ?></div>
<div class="latest-update-images">
<?php foreach ($data['image_content'] as $img_url): ?>
<a href="<?php echo esc_url($img_url); ?>" data-lightbox="latest-update-gallery">
<img src="<?php echo esc_url($img_url); ?>" alt="Image">
</a>
<?php endforeach; ?>
</div>
<div class="latest-update-footer">
<span class="latest-update-tag"><?php echo esc_html($data['tag_content']); ?></span>
<a class="latest-update-link" href="<?php echo esc_url($data['link_content']); ?>" target="_blank">查看全文</a>
</div>
</div>
<?php endif; ?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/js/lightbox-plus-jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/css/lightbox.min.css">

2.把CSS样式代码放置到主题CSS定义设置里,当然也可以直接放到style.css中。


/* 首页调用typecho样式 */
.latest-update {
    width: calc(100% - 40px); /* 设置宽度为100%减去40px,确保有左右边距 */
    background-color: #f8f8f8 ; /* 强制设置背景颜色为浅灰色 */
    border: 1px solid #ddd; /* 添加1像素的灰色边框 */
    border-radius: 10px; /* 圆角边框,半径为10px */
    padding: 20px 20px 10px 20px; /* 内边距,上下10px,左右20px */
    margin: 20px 0; /* 外边距,上下20px,左右0 */
    text-align: left; /* 文本左对齐 */
    margin-top: -10px; /* 减少与顶部的距离为0 */
    margin-bottom: 30px; /* 增加与文章列表的距离为40px */
    margin-right: 20px; /* 设置右边距为20px */
}

.latest-update-header {
    display: flex; /* 使用弹性盒模型布局 */
    justify-content: space-between; /* 头部元素左右分散排列 */
    align-items: center; /* 垂直居中对齐 */
    margin-bottom: 10px; /* 头部与下方内容的外边距为10px */
}

.latest-update h2 {
    font-size: 15px; /* 标题字体大小为15px */
    margin: 0; /* 去除默认外边距 */
    padding-left: 0px; /* 左边填充为0 */
}

.latest-update-time {
    font-size: 14px; /* 时间字体大小为14px */
    color: #666; /* 时间文本颜色为中灰色 */
    margin-right: 0px; /* 右边距为0 */
}

.latest-update-divider {
    border-bottom: 1px solid #333; /* 添加底部边框,颜色为深灰色 */
    margin: 10px 0; /* 上下外边距为10px */
}

.latest-update-content {
    text-align: left; /* 内容文本左对齐 */
    line-height: 1.5; /* 行高设置为1.5倍 */
    margin: 10px 0; /* 上下外边距为10px */
}

.latest-update-images {
    text-align: left; /* 图片区域文本左对齐 */
    margin: 10px 0; /* 上下外边距为10px */
}

.latest-update-images img {
    width: 100px; /* 图片宽度为80px */
    height: 75px; /* 图片高度为80px */
    object-fit: cover; /* 图片覆盖方式,保持比例并裁剪 */
    border-radius: 8px; /* 图片圆角,半径为8px */
    box-shadow: 0 4px 10px rgba(0, 0, 0, 1); /* 添加阴影效果 */
    margin: 3px; /* 图片外边距为5px */
    transition: transform 0.3s, opacity 0.3s; /* 添加平滑过渡效果 */
}

.latest-update-images img:hover {
    transform: scale(1.1); /* 鼠标悬停时放大10% */
    opacity: 0.9; /* 鼠标悬停时透明度降低到0.9 */
}

.latest-update-footer {
    display: flex; /* 使用弹性盒模型布局 */
    justify-content: space-between; /* 底部元素左右分散排列 */
    align-items: center; /* 垂直居中对齐 */
    margin-top: 10px; /* 底部与上方内容的外边距为10px */
    padding-top: 10px; /* 上内边距为10px */
    border-top: 1px solid #ddd; /* 添加顶部边框,颜色为浅灰色 */
}

.latest-update-tag {
    background-color: #e0e0e0; /* 标签背景颜色为淡灰色 */
    border-radius: 5px; /* 标签圆角,半径为5px */
    padding: 5px 10px; /* 内边距,上下5px,左右10px */
    font-size: 14px; /* 标签字体大小为14px */
}

.latest-update-link {
    text-decoration: none; /* 去除链接的下划线 */
    color: #0073aa; /* 设置链接颜色为蓝色 */
    font-size: 14px; /* 链接字体大小为14px */
}
/* 首面调用typecho结束 */

3.把下面代码插入到主题functions.php文件中。


//-------首页调用typehco代码-----开始
function fetch_typecho_data() {
    $api_url = "https://suibi.zhangbo.net/api/posts?pageSize=1";
    $response = wp_remote_get($api_url);
    if (is_wp_error($response)) {
        return;
    }
    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);

    if ($data['status'] !== 'success' || empty($data['data']['dataSet'])) {
        return;
    }

    $post = $data['data']['dataSet'][0];
    
    // 1. 链接内容
    $link_content = "https://suibi.zhangbo.net/archives/" . $post['cid'] . ".html";
    
    // 2. 标签内容
    $tag_content = "#" . $post['categories'][0]['name'];
    
    // 3. 时间内容
    $created_time = (int)$post['created'];
    $current_time = time();
    $time_diff = $current_time - $created_time;
    
    if ($time_diff < 3600) {
        $time_content = floor($time_diff / 60) . "分钟前";
    } elseif ($time_diff < 86400) {
        $time_content = floor($time_diff / 3600) . "小时前";
    } elseif ($time_diff < 2592000) {
        $time_content = floor($time_diff / 86400) . "天前";
    } else {
        $time_content = date("Y年m月d日", $created_time);
    }
    
    // 4. 摘要内容
    $digest = strip_tags($post['digest'], "");
    $content = mb_strlen($digest, 'UTF-8') <= 200 ? $digest : mb_substr($digest, 0, 200, 'UTF-8') . "......";
    
    // 5. 图片内容
    preg_match_all('/<img.*?src=["\'](.*?)["\'].*?>/i', $post['digest'], $matches);
    $image_content = $matches[1];

    return [
        'link_content' => $link_content,
        'tag_content' => $tag_content,
        'time_content' => $time_content,
        'content' => $content,
        'image_content' => $image_content
    ];
}

 

 

 

 

关于今日被攻击

2024年10月27日 12:25

今天 9:58 分,接到上海云盾的电话,说我在他们那接入的一个域名正在被攻击,问我是迁移走还是他们给我回源。

我记得云盾是防 CC 的,遇到 DDOS 会回源,于是问了一句,对方回复是 CC 攻击。

登陆控制台,看到攻击大概从九点开始,那时候已经消耗了 500 GB 左右的流量,带宽峰值 1.2Gbps,刷的是我静态资源域名的一张图片,攻击 IP 来自香港的亚马逊云。

我首先把该 IP 添加到了黑名单,但是紧接着来的就是境内大多数省份的高并发访问,峰值带宽和流量在不停上升。

我给云盾回复我迁移走,请求给我一个小时左右的时间。在这期间,我临时把该域名迁移走了,11:15分,还是收到了云盾给我该域名设置回源的短信。

切走静态资源域名后,发现主站也开始被攻击,为了避免主站被解析回源,我又切走了主站。截止一切操作完毕,云盾控制台那边显示今日流量 1.01TB,带宽峰值 4.25Gbps,请求量 450W 次以上,工作人员告诉我 QPS 已经达到了一万次。

切走后也不知道是新接入商的清洗还是攻击停止,目前来看流量正常。

群里有大佬说这个带宽峰值让云盾为一个免费用户平白无故付出了 4W 块的账单,这让我觉得很惭愧,理解并且打心底里感谢上海云盾。

以前总觉得写博客是一件很自由的事,也无暇顾及写的东西是否会伤害到别人。我本质上应该是一个善良的人吧,每年都会捐一千多块钱用于贫困助学,虽然这对真正贫困的人来说可能是杯水车薪。

2020年年底开始写博客以来,也想象过自己能一直坚持下去,毕竟没有爱情和其它爱好的生活,总得有一个可以支撑我的东西,所以我加入了十年之约。但是确实从没想到过个人站长做博客原来是一件这么困难的事,本来生活就已经够累了。我最近因为太忙也没有在网上乱窜,甚至博客互访互评的频次都少了很多,也不知道是因为什么得罪了谁。

如果攻击者会再一次回来看的话,看到这里的时候,我想对你说:可怜的人,我原谅你。

WordPress首页调用memos方法!

2024年10月22日 14:03

WordPress首页调用memos方法! - 第1张图片

老张一直想把wordpress和memos能整合在一起,前几天在段先生的博客上看到了教程,便死皮赖脸的问他方法,原来是AI搞定的。刚开始的时候是直接拿段先生的用,但是里面有一些达不到自己想要的效果。比如段先生是从memos的RSS文件里取数但,如果memo里有多篇图片的话,RSS只能输出一张链接地址,其他找不到。通过找木木大佬,用了他提供的《Memos API 非官方不完全说明》便可以解决。另外在CSS布局上也不是自己想要的效果,便想着自己也来让AI搞吧!

让AI帮你写代码,你必须要学会怎么样能更好的和AI对话,必须要有一点点的代码基础,才能把把问题问在点子上。我在把memos的API输出的数据模式先告诉AI,然后再提出自己的要求,要求如下:

我想在wordpress获取memos的api发布第一条动态内容,API的链接地址是https://zhangbo.net/api/v1/memo?creatorId=1&rowStatus=NORMAL&limit=1 ,内容格式如下:
按以下要求进行操作:
1.读取第一个"id"后面的数据,并形成“https://zhangbo.net/m/+“id后面的数据”” 做为链接,赋值给变量$link_content
2.读取"content"后面的数据,读取以#号开始、空格结束的内容,并在前面加#号后赋值给变量$tag_content。
3.读取"createdTs"后面的数值,转化为时间后与当前时间计算时间间隔。时间间隔为1小时内的,以时间间隔+“分钟前”赋值给$time_content;时间间隔为24小时内的,以时间间隔+“小时前”赋值给$time_content;时间间隔为30天内的,以时间间隔+“天之前”赋值给$time_content;时间间隔超过30天的,直接以“年月日”形式赋值给$time_content。
4.读取"content"后面的数据,排除“![]()”图片形式、排除#、#及空格前的内容后,赋值给$content。
5.读取"content"后面的数据,如果有“![]()”图片形式,将()内的图片链接赋值给$image_content;如果"externalLink": 后面有数据,赋值给$image_content;如果"filename"后面有数据,将以“https://zhangbo.net/o/r/+filename上第四行ID后的数值+"filename"的数据”赋值给$image_content。如果以上情况都存在,那将以数值组形式赋值。
以上生成的代码,将保存在wordpress的主题文件functions.php中以便调用。
按以下要求生成CSS代码
1.对于在首页展示的要求,在首页文章列表上方,与首页文章空两行
2.显示框宽度100%、背景灰色、四角椭圆。
3.第一个DIV展示框以"h2”格式展示“最新动态”四个字、靠左对齐、左边距空20px;务必同一行展示$time_content值,右居中对齐,右边距空20PX
4.第二DIV插入细实线、深灰色
5.第三DIV展示$content值
5.第四DIV展示$image_content值的缩略图,缩略图四角椭圆并有阴影,如果多图从左往右排列。并按确保引入 Lightbox.js,也写入到本代码中,达到点击放大效果
6.第五DIV靠左对齐展示$tag_content值,背景灰色并四角椭圆,靠右展示“点击评价”点击链接到$link_content。
再生成输出代码以便插入在首页文件index.php,以便在首页显示。/

我分别测试了官方GPT、三方GPT和豆包,结果是官方GPT直接来句“问题太复杂,请分类进行提问”,三方GPT给出的代码效果完全不对,而豆包给出的代码基本上达到要求。当然,还是由于自己的表述,导致代码在图片显示这块有些问题。今天中午利用几分钟时间,进行了修改,对获取图片链接地址重新让AI写,我是这样提问的:

我现在的要求是其他代码不需修改,只对获取图片链接重新按以下要求来修改
1.读取"content"后面的数据,如果有“![]()”图片形式,将()内的图片链接赋值给$image_content;
2.获取  "resourceList": []的中括号里数据,这是图片组,每组以{}进行区分,查询每个{}内的"externalLink",如果"externalLink": 后面有数据,赋值给$image_content;如果"externalLink"无数据,则以“https://zhangbo.net/o/r/+该图片id+"filename"的数据”赋值给$image_content。
如果以上情况都存在,那将以数值组形式赋值。

经过这样的修改,图片才得要正确显示。后来又陆陆续续的修改了CSS样式,最终达到目前的效果。

现在把相关代码贴给大家吧,需要的自取,不合自己要求的,也可以让AI帮你来修改。

1.把下面的代码插入到主题文件的index.php合适位置。

 <?php
$memoOutput = processMemoData();
if ($memoOutput) {
echo $memoOutput;
}
?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/js/lightbox-plus-jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/css/lightbox.min.css">/* Your code... */

2.把CSS样式代码放置到主题CSS定义设置里,当然也可以直接放到style.css中。


/* 首页调用memos效果---开始 */
/* 缩小与顶部距离,增加与首页文章列表距离 */
.memo-display {
    margin-top: 0px; /* 减少与顶部的距离 */
    margin-bottom: 40px; /* 增加与文章列表的距离 */
    margin-right: 40px; /* 设置右边距为20px */
    width: calc(100% - 40px); /* 计算宽度以适应右边距 */
    background-color: #f2f2f2;
    border-radius: 10px;
    padding: 20px;
    border: 1px solid #ccc; /* 添加细线边框,颜色为浅灰色 */
}


/* 第一个 DIV:展示“最新动态”和时间 */
.memo-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
}
.memo-header h2 {
    margin-left: 0px;
}

.memo-header span {
    margin-right: 0px;
}

/* 第二 DIV:插入细实线、深灰色 */
.memo-divider {
    border-top: 1px solid #999;
    margin: 10px 0;
}

/* 第三 DIV:展示内容 */
.memo-content {
    margin-bottom: 10px;
    line-height: 1.5; /* 或者可以使用具体的像素值,如 1.5em 或 24px */
}
/* 第四 DIV:展示缩略图 */
.memo-images {
    display: flex;
    flex-wrap: wrap;
}

.memo-images img {
    border-radius: 10px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
    margin-right: 10px;
    cursor: pointer;
    transition: transform 0.3s ease; /* 添加过渡效果 */
}

.memo-images img:hover {
    transform: scale(1.1); /* 鼠标悬浮时放大 */
}

/* 第五 DIV:展示标签和链接 */
.memo-footer {
    display: flex;
    align-items: center;
    margin-top: 10px; /* 设置与上面容器的距离为 30px */
}

.memo-footer div:first-child {
    background-color: #9999;
    border-radius: 6px;
    padding: 5px 10px;
    margin-right: 10px;
}

.memo-footer a {
    text-decoration: none;
    margin-left: auto; /* 靠右对齐 */
    margin-right: 0px; /* 右边距 20px */
}
/* 首页调用memos效果---结束 */

3.把下面代码插入到主题functions.php文件中。

/* Your code... */
//-------首页调用memoe代码-----开始
function getTimeContent($createdTs) {
    $current_time = time();
    $time_diff = $current_time - $createdTs;
    static $cachedTimeContent = null;
    static $lastCreatedTs = null;
    if ($lastCreatedTs === $createdTs) {
        return $cachedTimeContent;
    }
    if ($time_diff  100) {
        $substr_content = mb_substr($content, 0, 100, 'UTF-8');
        $last_char = mb_substr($substr_content, -1, 1, 'UTF-8');
        $last_char_ascii = ord($last_char);
        while ($last_char_ascii  126) {
            $substr_content = mb_substr($substr_content, 0, -1, 'UTF-8');
            $last_char = mb_substr($substr_content, -1, 1, 'UTF-8');
            $last_char_ascii = ord($last_char);
        }
        $content = $substr_content. '......';
        $link_text = '查看原文';
    } else {
        $link_text = '点击评价';
    }

    $content_without_tags_and_images = preg_replace('/#.*? /', '', $content);
    $content_without_tags_and_images = preg_replace('/!\[.*?\]\(.*?\)/', '', $content_without_tags_and_images);
    $content = $content_without_tags_and_images;

    // 构建输出内容
    $output = '
'; $header = '

最新动态

'. $time_content. '
'; $divider = '
'; $contentDiv = '
'. $content. '
'; $imagesDiv = ''; if (!empty($image_content)) { $imagesDiv = '
'; foreach ($image_content as $image_link) { $imagesDiv.= 'Image'; } $imagesDiv.= '
'; } $footer = '
'. $tag_content. '
'. $link_text. '
'; $output.= $header. $divider. $contentDiv. $imagesDiv. $footer; $output.= '
'; return $output; }

OK,结束!折腾十几个小时,就是出了这篇教程!!

完美实现手机照片自动上传至NAS并同步到网盘!

2024年10月17日 10:09

完美实现手机照片自动上传至NAS并同步到网盘! - 第1张图片

昨天一天时间,博客群里都是在谈论NAS,这又把我折腾的心勾的痒痒。对于NAS,我一直的观点就是自己DIY不买成品,买成品的价格至少要贵上1倍。在2019年的时候就折腾过NAS,那个时候买的都是矿渣,先是买了蜗牛星际,后来《上车了!暴风播酷云二期“开包”记!》。为了折腾NAS,单独买了两块4T的红盘,但是,但是后来其中一块硬盘还没有到一年时间就挂掉了。虽然免费换了新,但是里面的数据没有了,还好里面存的都是一些电影而不是重要数据。至此,NAS会坏硬盘这个阴影一直存在脑子里。没多久,就把暴风二期给卖了。

昨天我说出我对NAS存在坏硬盘的阴影时,老刘说我这是因噎废食。想想也是,NAS上硬盘坏了的直接原因是硬盘本身的质量问题,而不能去怪Nas。那就把吃灰的NAS重新折腾起来吧。目前我的硬件环境是用的J4125小主机外拖一个硬盘盒,里面是拆机的硬盘1T和4T各一块,搞的all in one。选用ESXI做的底层,ikuai爱快做主路由拨号,openwrt做旁路由负责科学等,另外通过一键脚本安装了黑群晖DSM。J4125主机资源还没有用完,准备再搞个Debian来折腾。那个黑群晖自安装后就一直吃灰,后来干脆把电源都给关了,昨天晚上回到家,才连上ESXI给NAS开了机。

如何将手机里的照片自动上传到NAS,并自动同步到网盘呢?这里我们需要用到这样的两个套件Synology Photos和Cloud Sync,两个都是官方套件,直接安装即可。

完美实现手机照片自动上传至NAS并同步到网盘! - 第2张图片完美实现手机照片自动上传至NAS并同步到网盘! - 第3张图片

Synology Photos 是 Synology NAS(网络附加存储)设备上的一款强大的照片管理和共享应用程序。它集成了照片存储、管理、备份和分享等功能,旨在为用户提供一个安全、高效的照片管理解决方案。以下是一些 Synology Photos 的主要功能和特点:智能分类和搜索、多设备同步、分享功能、高效的备份解决方案、照片编辑。相册管理等。

Cloud Sync 是 Synology NAS 提供的一个功能,允许用户将本地 NAS 数据与云存储服务(如 Google Drive、Dropbox、OneDrive 等)进行同步。这个功能非常适合需要备份数据、实现数据冗余或在不同设备间访问文件的用户。以下是 Cloud Sync 的主要功能、使用场景以及设置步骤。主要功能:双向同步、单向同步、增量同步、自定义同步规则、版本控制、调度同步、文件过滤等。

手机上需要安装Photos这款APP,直接从群晖的官方网站下载。Photos这款APP是和群晖上Synology Photos是配套使用的,都是属于照片管理器。

具体使用方法不再多去赘述了,傻瓜式的安装、使用。简单原理就是通过手机Photos这款APP和群晖Synology Photos套件配合把手机照片自动上传至NAS,再通过Cloud Sync 自动同步到各大网盘等。今天早上测试了下,手机刚刚拍的照片,到百度网盘上就可以看到了,真的是实现了秒传。

这样,所拍摄的照片,手机→NAS→网盘,全自动化,再也不用担心硬盘坏掉了!

近期想搞个高配一点的小主机做个all in one,基本要求32G内存、2块4T硬盘、CPU嘛12300T或以上、多网口网卡等,要小,可以放在鞋柜里。大家有什么可以推荐的嘛!价位在3000以下!

 

 

 

写在老张博客十五周年

2024年10月9日 14:19

写在老张博客十五周年 - 第1张图片

真的没有刻意去记今天,只是今天偶尔看网站信息时,才注意到建站时间是2009年10月9日,算到今天,正好是十五周年。到我提笔止,老张博客十五年里,不包括本篇共发布了787篇文章。评论数为18412条,其中应该有一大半是我回复评论。浏览总次数为5230094次,乍看这523万浏览量蛮大的,其实这是长时间积累的,平均每天也不过千。

老张根据文章归档,来回忆下老张博客走过的十五年的路。其实老张建博客是在2008年,只不过那个时候对“数据安全”没有概念,搞个博客正常丢数据。目前的数据是从2009年10月9日一直使用到现在的,现在是每天做备份,生怕哪数把数据搞丢了。

2009.10-2010.7:摸索爬行期:

想不起来老张当初因为什么建博客了,根据2009年归档的所谓的文章来看,从2009年10月建站到2010年7月中旬,基本上是转载别人的文章或是自己简单发两句话。可能是前一年对写博客并没有什么经验,只是去折腾但并没有把折腾的过程记录下来。建站前一年,可以说是摸索爬行阶段。

2010.7-2011.4:辉煌成就期

从2010年7月28日《WordPress更换域名后所要注意的十件事》这篇文章开始,到2011年4月份,原创了大量Wordpress方面的教程,同时总结了SEO方面的技术经验文章。这一年时间里,是原创高质量文章最多的一年,很多篇教程当时被admin5等站长网站收录,当然也引来了很大的流量,可以说这一年是老张博客最为辉煌的一年。

2011.5-2018.9:歇菜苟活期

2011年5月份开始,歇菜了,这段时间应该去折腾易语言去了,因为出现了一些易语言方面的教程。也就是从那个时候开始,老张博客在“苟活期”,你说不更新吧,偶尔那么转载两篇文章,你说更新吧,一年也就是更新十来篇。老张博客的苟活期或是说“空白期”相当的长,从2011年5月一直持续到2018年9月,长达七年之久。

2018.10-今:平稳发展期

2018年10月份起,老张博客从技术型博客转到“技术生活类”博客后,才算是基本上稳定。也就是那这个时候开始,内容为记录一些自己折腾的过程,分享一些自己的生活。更新基本上算是有规律,达到每个月四五篇,一直保持到现在。也就是说,真正意义上的写博客只能算是2010年7月至2011年5月,以及2018年10月起到现在,满打满算,也就是6年时间。博客十五周年,而真正写博客也就是六年时间,也算是可悲哟。

博客大事件

结合着前段时间软云的跑路风波涉及的数据安全来讲,来说说老张博客这十五年来遇到了两件“大事件”。

第一件事就是2017年长时间不上博客,未能及时更新博客程序和各种插件,导致各项版本太旧,有黑客利用漏洞入侵了我的空间,所有网站文件全被挂马。这个技术方面的事自己是搞不来的,还是在“游子”的帮助下花了大量的时间才得以解决。

另外一件大事就是“游子失联”。游子,一个非常不错的空间商,他真的能和客户打成一片,包括我在内,他的长期客户非常多,我用他的空间有十余年时间。但是在2020年11月份,游子的所有服务器全部停机,而游子又联系不上。我在《历经一劫,博客重生!》详细介绍了整个事件的过程。好在后来在朋友的帮忙下,直接打款给IDC商后开通了一个季度的机器才把数据得以保存。对于游子的失联,我们所有群里客户并不是担心“赔偿问题”,而是考虑到游子的个人安危问题。有位客户离游子比较近,单独开车百余公里去找游子,功夫不负有心人,找到了游子的老婆。这时才知道,原来游子在给一家P2P公司做网络方面的技术顾问,最终这家公司资金断链而被起诉,被定性为诈骗,游子也被牵涉其中而被留置。到现在已经五年时间了,游子客户微信群一直还在,但是还没有游子的身影,不知道他过的怎么样了。

老张博客十五周年了,不管你的博客在大厂还是小厂,定期做数据备份,把数据牢牢的抓在自己手里,还会有下一个十五年!再下个十五年,无数个十五年。

Memos完美降级到Memos0.18.2版

2024年10月6日 05:18

Memos完美降级到Memos0.18.2版 - 第1张图片

前几天一直都在折腾Memos,原因就是我的Docker容器是利用《如何优雅的一键升级宝塔面板多个Docker容器》的watchtower项目,通过计划任务每周定时检测Docker版本并完成自动更新。所以我的所有Docker版本都是一直保持着最新。也就是这点,违背了“求稳不求新”的原则,导致出现了一些问题。最为严重是Memos,作者更新很随意导致新版本的数据库结构、API接口都发生了改变,与目前使用的“哔哔点啥”的memos页面出现不兼容。

国庆节前,折腾把《完美解决Memos页评论与博客哔哔页面评论互不显示问题。》的问题解决了,方法就是备份数据库文件后直接删除新版Memos容器,安装Memos0.18.2版老板容器,并恢复数据库文件。安装后并没有经过大久测试,结果新的问题出现了。降级后Memos不能发布内容了,乖乖,这可是个大问题。

经过分析,不能发布内容的原因就是新老版本的Memos的数据库结构发生了改变,那么解决的思路也就是把新版数据库数据结构修改为与memos0.18.2保持一致即可。

备份数据库、删除新版安装memos0.18.2版

我在《无需代码,宝塔面板Docker部署便签工具Memos》提到过,当初我们在部署Memos时,已经把Docker内的数据库文件memos_prod.db映射到服务器上,找到新版数据库文件下载到本地后,可以另存为其他名称后删除最新版本memos容器。这次我是直接使用代码安装的0.18.2版,代码如下:

docker run -d --init --name memos --publish 5230:5230 --volume /docker-data/memos/:/var/opt/memos ghcr.io/usememos/memos:0.18.2

利用Navicat Premium工具导出-修改-导入数据库文件

安装好0.18.2版之后,到/docker-data/memos/下同样把memos_prod.db文件下载到本地。

这个时候我们请出今天的主角,Navicat Premium,直接到官网下载即可,14天的试用时间,完全够你折腾了。利用Navicat Premium同时连接打开新、老数据库文件。

Memos完美降级到Memos0.18.2版 - 第2张图片

经过比较你就会发现新版数据库文件中表名为memo的字段比0.18.2版本多一列uid字段。第一思路就是在新版表memo的uid字段上直接右键点删除,结果报错,只能另寻思路,如果这一步哪位大神有什么方法,一定要分享出来,因为正面我的方法比较繁琐。

那简单方法行不通,只能通过繁琐的方法了,把数据库表的内容导出成可编辑的文件,在相应软件里把memos的uid字段删除后再导入0.18.2版的数据库。具体方法如下:

Memos完美降级到Memos0.18.2版 - 第3张图片

选中新版数据库memo表,选择工具-导出,这里我选择的是excel数据表(*.xls),导出后用ecxel打开你导出的表格,直接把uid这一列删除即可。注意,这个时候我们再连接0.18.2数据库的memo表,再选择工具导入,注意一定要选对文件类型把修改后的excel文件导入。这个时候,我们就完美地把memo这个表导入了。

其他表的内容按上步方法导出-修改-导入,其实也就是memo和表resource两个表需要删除uid字段,其他像标签、用户、用户设置、系统设置等表只需要把内容导出成excel文件后再直接导到0.18.2的数据库即可。这样就完成了所有的数据迁移工作。

停止容器,恢复数据,完美降级

在服务器上把Memos这个容器先停止,把0.18.2版数据库文件上传到你映射的目录,覆盖旧文件即可。再重新启动容器,OK,十分完美地把Memos0.22.2降到Memos0.18.2版。

经过这一周多时间的测试,再无任何问题,Memos降级完美完成!

软件工程师面试: TCP/IP协议是什么?

2024年10月4日 20:49

最近,在面试第一轮抖音(字节跳动)的伦敦职位(Site Reliability Engineer),被问到了这个问题:TCP/IP协议是什么?这个是考基本功,是每个软件工程师都要会的。

TCP/IP(传输控制协议/互联网协议)是一组网络协议,管理数据如何通过互联网和其他网络传输。它是互联网的基本通信模型,由两个主要层组成:

互联网协议 (IP)

IP 负责将数据包从源地址路由到目标地址。它工作在 OSI 模型的网络层。

  • IP 地址:互联网中的每个设备都被分配了一个唯一的 IP 地址,用于标识数据包的发送者和接收者。
  • 数据包路由:IP 将数据分成多个包,并通过不同的网络将其路由到目标地址。
  • 版本:IP 主要有两个版本:IPv4(32位地址)和 IPv6(128位地址)。

传输控制协议 (TCP)

TCP 负责确保设备之间数据传输的可靠性。它工作在 OSI 模型的传输层。

  • 面向连接:TCP 在传输数据之前会在发送方和接收方之间建立连接。
  • 数据完整性:TCP 通过确认、序列号和错误检查等机制,确保数据包按顺序无误地到达。
  • 流量控制:TCP 通过滑动窗口管理数据流,防止接收方超载。

TCP/IP 协同工作原理

  • 应用数据:应用层将数据(例如网页、电子邮件)发送到传输层(TCP)。
  • TCP 层:TCP 将数据分段,添加序列号和错误检查信息,并将其发送到 IP 层。
  • IP 层:IP 层将 TCP 段封装成 IP 包,附上源和目标 IP 地址,并通过各种网络路由数据包。
  • 接收端:在目标设备上,IP 层将数据包交给 TCP,TCP 重新排列并验证数据的完整性,然后将其传递给应用层。

TCP/IP 套件中的其他协议

  • UDP(用户数据报协议):一种无连接、速度更快的 TCP 替代方案,常用于视频流、在线游戏等实时通信。
  • HTTP/HTTPS(超文本传输协议):用于网络通信的应用层协议。
  • DNS(域名系统):将域名解析为 IP 地址。

TCP/IP 确保数据在网络间高效传输,保持可靠性、地址分配和路由,同时遵循互联网的基本通信原则。

TCP/IP 通常被描述为一个四层模型,但有时它可以与 OSI 模型(七层)进行比较。

tcp-ip-and-osi-model 软件工程师面试: TCP/IP协议是什么? 学习笔记 程序员 计算机 计算机 软件工程 面试

TCP/IP 4层协议和OSI的7层协议的比较

TCP/IP 四层模型

TCP/IP 模型简化为四层,旨在反映协议在现实网络中的工作方式。

应用层

这一层对应于 OSI 模型的前三层(应用层、表示层和会话层)。它包括 HTTP、HTTPS、FTP、DNS 和 SMTP 等协议。

传输层

负责设备之间的可靠通信。运行于这一层的协议包括 TCP(传输控制协议)和 UDP(用户数据报协议)。

互联网层

处理跨网络的数据包路由,类似于 OSI 的网络层。该层包含 IP(互联网协议),用于地址分配和数据包路由。

网络接口层(或链路层)

这一层负责物理网络(如以太网、Wi-Fi)和互联网层之间的数据传输。它对应于 OSI 的数据链路层和物理层。

OSI 七层模型

OSI(开放系统互联)模型更加细致,将网络功能分为七个层次。

  • 物理层(如电缆、交换机)
  • 数据链路层(如 MAC 地址、以太网)
  • 网络层(如 IP 路由)
  • 传输层(如 TCP、UDP)
  • 会话层(如管理应用之间的会话)
  • 表示层(如加密、数据格式转换)
  • 应用层(如 HTTP、FTP)

主要区别:TCP/IP vs OSI

TCP/IP 将一些功能合并为更少的层次(四层),反映了它在互联网通信中的实际应用。

OSI 是一个更加详细的概念模型(七层),主要用于教学和理论理解。

总结来说,TCP/IP 通常被认为是四层模型,而 OSI 模型则是七层模型。

英文:What is TCP/IP (4 Layer vs OSI 7 Layer)?

面试经历

面试题

面试技巧

面试其它

本文一共 1009 个汉字, 你数一下对不对.
软件工程师面试: TCP/IP协议是什么?. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 软件工程师面试: TCP/IP协议是什么? 学习笔记 程序员 计算机 计算机 软件工程 面试
The post 软件工程师面试: TCP/IP协议是什么? first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  2. 孩子喜欢的 cozmo 机器人 小儿子今年刚过5岁生日, 问他要啥生日礼物, 他说想要 cozmo 机器人. 我们都不知道这是啥, AMAZON一搜还不便宜, 均价200多到300多英镑都有. 估计是孩子在学校的时候知道的这机器人. 在AMAZON下了单, 很快就到了. 图像识别算法很厉害. 这机器人很厉害, 不需要告诉它, 它可以自己玩,...
  3. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  4. 这些年在英国开过的车 这个车是真的汽车,从2010/2011年开始学驾照,到2012年考过驾照(两次才过),到现在也有十几年的驾龄了,真的算老司机了。 现在开的是两辆车(第四和第五),分别是奥迪Q5和保时捷卡宴。目前每周加保时捷的油费大概是50英镑。 第一辆 Seat Ibiza 第一辆:在英国的第一辆小黄车 Seat Ibiza (西亚特·伊比飒) 离合很重,男人开的车,当时用来练手,最后面到谢菲而得/Sheffield因为住在市中心不太需要车,就给卖了。 第二辆 奥迪AUDI A6 这辆开了有近十年,当时从谢菲搬家到剑桥Cambourne大剑宝就是开得这车。开了近10年的奥迪A6卖给了车厂(内含开车成本) 我当时买的时候是7000左右,然后买来修了修又多花了1000多英镑,...
  5. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  6. Win10右键添加管理员权限.reg 保存以下为 *.reg 文件 双击 Windows Registry Editor Version 5.00 @="获取管理员权限" "NoWorkingDirectory"="" @="cmd.exe /c takeown /f...
  7. 老婆的配偶签证被拒 郁闷死了, 601镑签证费打水漂,一去不回!费钱费力. 去年12月份我请了律师拿到了永居.老婆是T1G签证的陪工签 (DEPENDENT VISA) 2016年4月份到期. 然后我就想说得趁早把她的签证转成配偶签(SPOUSE)这样她就可以尽快走五年永居的路线. 今天收到拒签信,原因是我没有提供 有工资进帐的那份银行帐单,我提供了我和我老婆的联名帐户, 但是工资并不是直接打到这个帐单上的.所以就这一点被拒了.完全不给解释,不给补材料的机会.601镑就这样再见了. 英国的签证寄出之后是先由另一个部门先收费, 收完费才正式审理,而且不管结果如何是不退钱的.后悔没让律师弄,也不至于到现在浪费这么多时间和金钱,签证还没过.由于原签证还没到期,所以还不能上述.估计只能等搬完家后年底请律师搞定这事. 真是郁闷, 600镑, 我可以再买一个IPHONE6,或者给我的新买的车换四个轮胎....
  8. 公司给配了台高配DELL笔记本 早上例会结束的时候我顺便说了一句 我的笔记本有点慢, 当时我并不知道我的经理远程用电话也参加会议了(他全程在听), senior staff SE 对着电话说, “peter, you hear that? btw, my disks are...

完美解决Memos页评论与博客哔哔页面评论互不显示问题。

2024年9月29日 14:08

完美解决Memos页评论与博客哔哔页面评论互不显示问题。 - 第1张图片

暑假两个月放飞自我后,近段时间开始收心了,把精力从游戏上转回到博客。第一件事就是把博客的“哔哔点啥”网页布局进行了调整,把内容的标签设置与评论图标一行,这样看上去就顺眼多了。虽然只是一个小调整,但是苦于自己的代码小白,还是找了AI帮忙。

目前我的哔哔点啥页面还是用《巧搬空白Koobai大佬Memos页面,完美与博客整合。》,哔哔点啥页面的工作原理就是直接调用Memos数据。Memos前期版本没有原生评论,而新版本即使有评论在memos的数据库里并非单独列。为了能让在memos以及博客的哔哔点啥页面有评论能力,便把《Artalk评论嵌入Memos,完美接近朋友圈、微博!暨宝塔面板Docker部署artalk评论系统》。

后来随着memos版本的升级,出现了个问题,就是在Memos在直接评论的内容与直接在哔哔点啥上评论的内容相互不显示了。因为当时评论数比较少,也并没有在意,这个问题一直也就拖到了现在。既然已经收心想折腾博客,那就索性把这个BUG也给搞定吧。

Memos的作者更新真的是很随性的,各种功能随意增减,导致很多人说Memos只是个项目不是个产品。前期版本单篇Memos显示匹配的路径是序号,用域名+M+序号形式,比如https://memos.laozhang.org/m/423;而后期版本匹配显示的路径却是内容前几个字符编码,比如https://memos.laozhang.org/m/GR65Lmbquyb5QuVuZgj9G7(打不开了,因为我的版本降了)。正是因为这次的升级,而导致了上述的问题。

老孙的帮助下,通过修改哔哔点啥的JS文件,把 var memo_id = data[i].id;修改为 var memo_id = data[i].name; ,是可以正常显示了,但是又有一个小问题,就是评论通知邮件里的链接又不匹配了。

后来询问了木木大佬、koobai大佬,才知,最为稳定的memos版本是0.18版,那解决的方法就是“降级”了!

之前我习惯于在宝塔面板下部署各种Docker,当时我是用了《无需代码,宝塔面板Docker部署便签工具Memos》。现在想来,还是代码更为方便一些。降级之前必须要很把你原来映射出来的文件夹备份并下载下来,那是你Memos全部数据。然后删除目前的Memos项目及镜像,重新用代码安装0.18.1版即可。

docker run -d --init --name memos --publish 5230:5230 --volume ~/.memos/:/var/opt/memos ghcr.io/usememos/memos:0.18.1

正常使用的这些Docker,我们应该保持一个原则“求稳不求新”,为了能正常运行,还是用稳定版本的为好!

 

解决常见的Windows开机无网络问题

2024年8月27日 15:48

解决常见的开机无网络问题

一般来说遇到win10/11 开机后网络无法使用直接点网络重置后重启,网络就会恢复

解决有网络无法正常浏览网页的问题

一般此种情况常见于之前开启过代理,但是代理软件关闭后未能将系统代理正确关闭。
需要手动将其关闭后网页浏览恢复正常。

解决由于 Network LightWeight Filter‌ 协议导致的无网络问题

系统升级后无法联网,网上搜了半小时,各种方法都尝试了,无果。
后来想起来今天五月份公司电脑同样遇到了这个类似问题。
然后禁用下面的协议问题解决。

网上找了一下 ‌Network LightWeight Filter‌ 的资料:
‌Network LightWeight Filter‌(NLWF)是一个网络协议,它在网络适配器和操作系统之间提供了一个轻量级的过滤机制。这个协议的主要功能包括滤波、改善信号质量、信号处理、信号分析和信号转换等‌1。具体来说:

‌滤波‌:NLWF可以对输入信号进行滤波,去除噪声、干扰或不需要的频率分量,从而得到更清晰、更准确的信号。
‌改善信号质量‌:通过滤波器,可以改善信号的质量,使其更加稳定、可靠、清晰。例如,通过低通滤波器去除高频噪声,使得音频信号更加纯净。
‌信号处理‌:对信号进行处理,如信号增强、降噪、去除干扰等。
‌信号分析‌:对信号进行分析,如频谱分析、相位分析等,帮助工程师了解信号的特性和性能,从而优化设计和改进系统。
‌信号转换‌:将信号进行转换,如模数转换、数字信号处理等,帮助工程师将信号转换为适合特定应用的形式,如数字信号处理、数据压缩等。
然而,在某些情况下,NLWF可能会导致问题,特别是在Windows系统中。例如,如果网关无法设置或系统检测后提示以太网适配器的驱动程序可能出现故障,并且有线和无线连接都无法上网时,可能是因为网卡里多了一个Network LightWeight Filter协议并且被勾选上了。取消选择该协议后,一般可以恢复上网功能‌2。此外,在某些情况下,如小米随身WiFi软件或特定的Windows更新可能会导致NLWF出现问题,需要通过卸载软件、取消勾选或卸载更新等方式来解决‌3。这些情况表明,虽然NLWF提供了轻量级的网络过滤功能,但在某些特定条件下,它可能会成为问题的根源,需要相应的调整或解决措施。

记一次被渗透测试

2024年8月24日 10:30

起因

昨天早上醒来,发现博客推送了几条无意义的评论,根据 IP 反查到域名,大致了解了一下,也没多想,把评论删掉了。

今天早上醒来,又一次遇到了同样的情况。大概是我设置了评论提交频率,所以垃圾评论只有几条。但是我想挖掘一下对方到底是何方神圣,记录下来复盘。

基本信息

评论提交者的昵称:gBqsPxAZ或者匿名

评论提交者的邮箱:testing@example.com,显然是假的;

评论提交者的 IP :222.180.198.54。

收集IP情报

在微步云情报社区查询到,该 IP 属于位于重庆的企业专线,早些时候就已经被打上了“恶意”标签。根据微步情报局掌握的信息,该 IP 地址在2021年07月22日到2024年08月16日期间发起了多次网络攻击。有2个与该 IP 同 C 段的 IP 地址也被判定为恶意/可疑。

微步云IP情报概览

既然是企业专线,那大概可以反查一下其解析的域名。该 IP 解析了很多xway.cn的子域名,尝试访问了一下,子域名无法直接访问。

到这一步的时候我还在想,会不会是某个安全意识薄弱的小微企业的服务器沦陷,被当成肉鸡发起网络攻击。但访问该域名主站后,这个想法被彻底打消,与之而来的还有一点阴谋论的感觉。

该域名主站截图

按理说,一个网络安全企业是不会发生上面我猜想的这种情况。看到右下角的“中小企业免费基础防护对接人”,总感觉哪里有点不对劲,脑海中浮现了以前某厂商攻击自己用户再借机卖防御的案例。

审计日志和措施

考虑到这种情况是连续出现,所以我查看了网站访问日志和 CDN 的统计信息。

截至写这篇日志时,网站访问日志的大小已有29MB,从六点多开始,该 ip 的访问记录超过两万次,请求内容大概就是扫描器访问的不存在路径;

CDN 控制台那边可以看到,8:30 的时候达到了最大带宽4.41Mbps,当时(不是截止当时)流量157.73MB,回源流量7.45MB,来自该 IP 的请求次数超过15万次。

在漏洞入侵分析中,该 IP 的攻击类型包括敏感文件访问、sql 注入和 xss 跨站攻击等。好在我博客是纯静态,所以通常情况下不存在这些漏洞,加上日志数量过大,所以没有逐一去分析。

态势感知里的攻击类型占比

这些攻击不像是 CC 那样具有很强的目的性,但为了安全起见,我还是采取了以下操作:

1.备份网站访问日志,当初公安网备的时候有要求,在特殊情况下可能会交给叔叔;

2.在评论系统中把其评论的昵称和邮箱设为违禁词,不允许提交评论;

3.将该 IP 添加到黑名单,当然也不是完全禁止访问,而是采用了比较温和的 js 质询。

其它猜想

在通过注册人反查域名的时候发现该注册人(企业)还有三个域名,其中两个是互联网安全相关的网站和论坛,另外两个看起来就像针对微软和office用户的钓鱼网站。

注册人反查域名结果

两个看起来像钓鱼网站的内容让我一度怀疑是不是护网行动带来的渗透测试(叔叔当初说过,每年都会对备案网站进行渗透测试),但是很快又打消了这种猜测,因为 Twikoo 群里有小伙伴也经历了类似的垃圾评论事件,而他的网站没有备案。

貌似钓鱼网站的单页内容

写在最后

11 点的时候我与对方工作人员取得联系,工作人员询问了我所在地域后,告知应该是网安总队的监测。同时一位大佬告诉我:公安网信授权网安公司对其辖区系统进行扫描或渗透,不需要你的授权,也不会违反网安法。但同时允许你直接向网安公司提交停止扫描的要求。

其实我每天面临的恶意扫描非常之多,CC 攻击也一直在持续。因为此前学习过网络web渗透,对网络安全还是有比较深刻的感触,所以我一直坚持使用纯静态的博客系统,相比动态网站程序,纯静态网页面对 sql 注入、xss 跨站等威胁时更安全一些。

乐子哥老翟

2024年8月15日 01:30

虽然老翟这个称呼看起来多少有点熟络,但他并非我的朋友,而是一个群成员。

老翟是河南人,1997年出生。今年上半年的时候加了我创建的一个车友群,而他也并非这款车的车主。

本着友好的方式,我们依然和老翟有过亲切的交流。他在群里的这些时间,也算是留下了许多“脍炙人口”的事件。

没有边界感

老翟的父母出资给他买了一辆逸达,此后也谈了一个女朋友。他常喜欢把他和女友腻歪的聊天记录发到群里,这大抵是喜欢分享的心理,因为除了晒和女友的聊天记录,他还会在群里发吃了啥之类的日常。

老翟月入大概5k,但出手颇为“阔绰”。一开始进群,他便很喜欢给群友发红包。他也非常喜欢打听群友是否有对象,遇到有对象的群友便忍不住追问相关情况或者索要照片。群友不愿搭理的时候,他便在群里发专属红包,附言大多数是“给你红包,说说你的女朋友”之类。

一开始我认为老翟是过于热情和自来熟的人,所以有时候在他不断追问打听别人的私生活时,我会提醒他要有边界感。

此外,老翟还加了一些群友,私聊中打听对方的私生活,并且主动给对方发自己的教师资格证(他现在没当老师)、聘用合同和照片之类的东西,似乎一点也不担心隐私泄露。

被骂也无所谓

老翟很快就在很多群友的心里留下了深刻的印象,虽然觉得他有点烦,但也不至于到言论太离谱的程度。

有一天,老翟在群里转发了他和他朋友的私聊记录,大致就是他朋友对目前面临的一个选择很苦恼,他却在群里开启话题,谈论他朋友连傍富婆的机会都不把握。这样的话题也引起了一些群友的调侃或是讨论,然后老翟把群里的聊天转发给他的朋友,大概是想表明“你看,这么多人都对傍富婆这种可遇不可求的机会惋惜,你应该抓住机会”。

而他朋友看到群友的发言后,对老翟私自把私聊转发到群里供大家讨论这种行为非常不满,于是对老翟破口大骂。老翟表现得很有礼貌,没有还嘴,而是道歉。眼看道歉无法获得对方的谅解,老翟说:“我给你发50的红包,你别生气了。”他朋友依然破口大骂,老翟便十块十块的往上加,而他朋友显然不稀罕这点臭钱。

我们是怎么知道这件事的呢,没错,老翟又把他朋友骂他时的这些聊天记录转发到群里了。虽然嘴上说着对不起,看起来老翟并没有意识到自己错在哪里。

给我开SVIP

三月份的时候,我给QQ开的 SVIP 到期,由于觉得这玩意没什么太大的作用,所以不打算再续费,创建的群聊也由2000人被缩减为500人群,彼时群内成员接近500个。

考虑到很多人加群之后并没有时间水群,所以我决定清理一部分长期未发言的群成员。老翟了解此事之后非常不满,最后经过“友好”沟通,他在官网原价240/年给我赠送了年费SVIP,而其它渠道100元左右就能开一年。所以此事也让群友们大呼“富哥”!

但是没过多久,老翟因为骂人还是什么缘故,被一位管理移出了群聊。然后老翟便屡次换小号加群辱骂管理,踢了好多个小号之后,总算是消停了一段时间。

前两张为群聊截图,后一张是老翟自己发的

老翟的回归

大概七月份,老翟换了一个号也换了一个马甲再次加入群聊。为了不被怀疑,他还把群名称改为了这款车的具体型号,位置也换成了陕A。他不再在群里发红包,也很少发言,所以一开始大家都没意识到,那个奇怪的老翟又回来了。

直到有一天,我提了一嘴打算买自行车的事,或者是更早以前,我就发现了他就是老翟。因为他的言语中处处都在针对和阴阳怪气我。由于他没有像以前一样总是骚扰群友和打听群友的私生活,所以我只是个人屏蔽了他的发言。

直到今天,他又莫名其面在群里怼我,还有道德绑架,比如“你居然抽烟,怎么为人师表的”这类言论,这是事后我解除屏蔽才看到的。

后来又追问某位群管理是不是女生,在被回怼“与你有关系?”之后,他立马开始道歉,并给那位管理发了一个专属红包。另一位二次元容易被当成是女生的管理又爆料:那人前半个小时还一堆私信问我如何在隔壁门对门妹子不发现的情况下,看她朋友圈。

管理受不了他的言论,询问能不能把他移出群聊,老翟在群里留下的最后一句话是:不可以,因为我是鲶鱼,你们都是沙丁鱼,只有我在,你们才能活着。

然而,老翟最终再次被管理踢出了群聊。

写在最后

我不知道该怎么去理解和评价老翟这样的人。一开始只是觉得他很热情,自来熟,以致于缺乏边界感,喜欢打听别人的私生活;后来又觉得他可能是不够成熟,甚至有些幼稚和孤独,所以才会那么喜欢分享他和女朋友的聊天,他的工资单,他的教资等等;而现在我突然觉得,他似乎很享受别人的批评和谩骂,活像一个抖 M 的人,所以每次发言才会那么逆天,像是刻意引起别人的批评。

写这篇日志和写老秦的时候是完全不同的心理。我非常同情老秦,但是对老翟我根本同情不起来。不止我们群,他加的另一个群都把他当乐子哥,他总是在努力获取别人的注意,私底下究竟是一个怎样的人呢,我无从得知。

手机端没有好用又安全的输入法

2024年8月6日 08:30

缘由

上个月末,inkss 跟我说,他决定再次把输入法换成 Gboard (即谷歌输入法),起因是他跟女朋友在微信上提了一嘴《唐朝诡事录》,下一刻就在 B 站的搜索框看到了这个填充文字。虽然他开启了搜狗输入法小米版的隐私模式,但是输入法每天都有几百 kb 的流量。

过了两三天,我一时兴起也换上了十年前体验过的 Gboard,那时候便有了“黑科技”滑行输入的 Gboard,如今会不会更好用了呢?

Gboard 体验

然而安装好后,我吐槽的第一句话便是“谷歌输入法是真的丑”。或许并非它真的丑,而是我非常不习惯它的键盘布局。

很不能理解gboard九键的布局

主观上不习惯的点是:搜狗输入法右上角是收起键盘,但是 Gboard 没有这个功能。

而在 gboard 九键布局中,我认为还有客观存在的不合理布局:红圈数字键盘和上档键的功能重复,蓝圈中高频标点块很小,并且逗号和键盘切换偏偏要挤在一起,粉色框的长按拖动光标也重复了。

inkss 则是用的 26 键,他说基本上常用的立马能打出来,选词比九键更快捷,于是我也开始尝试 26 键。

26 键非常容易误触,但是好在 Gboard 的自动纠错功能还不错,当我发现几乎可以盲打之后,我仿佛发现了新世界!

gboard2

难怪九键通常会有个单独的清除按钮,26 键几乎用不上那玩意,加上正常网络状态下,居然也可以直接使用 Gboard 的语音输入,我认为我可以开始习惯 26 键,并抛弃其它的输入法了。

但事与愿违,多体验了几天之后我发现了许多难以习惯或接受的问题。

比如我躺着玩手机,以往需要打字的时候,一只手抓着手机,另一只手的手指按九键输入,输入效率虽然低一点,但是影响不大;而如今换成了 26 键,意味着手指的移动距离要更远,效率受影响且容易打错字。换成九键的话,很可能无法中英混输,比如按九键的 778,候选框甚至不会出现“PPT”。

还有,多用了几天之后,发现 Gboard 的自动纠错也并没有那么厉害,时不时打一句较长的话时,看候选栏发现不知何时起竟然有了数字,这也导致后面的文字与前文不连贯,也不是我想要的。

更恼火的是,Gboard 输入其它相对低频的标点比较复杂(甚至没要求它能像搜狗输入法一样自动联想网址、邮箱之类的后缀),而且它居然没有中文模式下的书名号和省略号!

试试其它

既然用起来那么别扭,要不还是找个平替吧!搜狗百度讯飞甚至以前喜爱的手心输入法都不在我的考虑范畴,在 play 商店看到那些输入法强调“我们承诺,绝不收集你的个人信息”这类宣传语,我潜意识里都不相信了。

不知道从什么时候开始,我对互联网软件生态,尤其是国内的软件生态持一种非常消极的态度。一个聊天软件要塞各种花里胡哨的东西,一个交停车费的小程序开屏就是一个没有关闭按钮的广告,并且还会往剪切板里塞狗东的口令,一个支付软件也会给你推短视频或者理财广告……

而输入法可能比任何一个软件都更容易了解你。

此时我的目光瞄向了微软,微软的软件是介于国产系和谷歌系之间的,相对比较平衡的一种东西。如果你担心国产的笔记软件分析你的日记,而 Google keep 又不能直连,那么 onenote 或许是一个很好的选择,虽然软件本身做得稀烂;如果你不信任国内云盘,而 Google Drive 又不能直连,onedrive 或许是一个很好的选择。

好在微软确实开发了一款针对移动端的输入法——Microsoft SwiftKey Keyboard,还能和 Windows 端同步。

但是这种期望在我看到它的界面时再次落空。总的来说,输入法功能也有微软式中文(机翻),打字响应感觉比较慢,按键之后候选字出现有延迟,界面比 Gboard 更丑,不打字的时候候选栏永远显示着我登陆账户的那个 Email。

最后

今天晚上,我又不得不把手机输入法换回了搜狗,不管是九键还是 26 键,不管是自定义界面还是输入效率,从国人的使用习惯来说,Gboard 甚至不能与它相提并论。

但是,选择便利的代价,就像某度的 CEO 说过的那样,是用隐私来换取的。

综上,我主观认为,手机端没有一款好用又安全的输入法。

谈谈独立博客友链

2024年7月16日 19:40

事件起因

昨天,一条交换友链的评论里,对方博主有了一连串的回复,所以我很想就“友链”说点什么,不管是自证还是狡辩,总归是要说点什么才舒服。毕竟独立博客从某种程度上来说,就是博主自娱自乐的地方。

为了便于各位看官直观了解事情的前因后果,我尽量以时间线的方式展现我们在评论中的交流。如果你觉得可能不够客观,可以点击这里直达该评论

评论时间线

2024年7月1日

对方评论并留下了友链信息:有幸通过中文博客列表导航项目访问到贵站,希望有机会和您互换友链~

2024年7月11日

对方评论:看到您已经超过一周没有回复我了,我这边就先下链了,希望您可以回复一下

2024年7月11日

我回复:抱歉,友链页写了的“不熟可能会不添加”

2024年7月15日

对方连续回复五条:①哈哈,不过不熟怎么发现贵站呢?②鄙人一直都是认为,绝大部分网站间的互动都应起源于一次友链,如果不是有友链,很多站肯定是永远不会有互动的③更何况您所谓不熟不会加,但您并没有给我们希望和您相识的人一个机会,不是吗?④如果不是我再次回访,您都不打算回复我的评论了吗?⑤各位同为开往项目的一员,也是中文博客导航项目的一员,鄙人来申请您的友链也是十分客气的语气,但您的冷处理方式令我无法苟同,更无法理解

2024年7月16日

我回复:首先,我无法苟同你的观点。互联网大部分的网站互动并非从友链起源。我和一部分博主有相对比较密切的互动,但我们直到现在甚至还不是对方友链的一员。其次,我不止一次拜访过贵站,我自认为针对你的内容,我可能没有什么想要发表的评论,也认为未来可能不会有更多的互动。不如你也看看,你在我站留下的评论除了在友链页面,还有哪篇博文下面有吗?难道所谓的互动就是十几年前qq空间的互踩?最后,虽然我们可能同为比如开往计划的成员,但并不代表我就要因此做点什么。大家都是中国人呢。每一个我都要花费时间和精力去相处吗?请不要道德绑架我。

2024年7月16日

对方连续回复三条:①既然您也知道不可能所有人都能与他人的文章产生互动,您又为什么要强制他人要先在您这里眼熟呢?②与此同时请允许我纠正您的偏见,我自始至终没有想过道德绑架,但贵站确实对我的申请进行了冷处理,这点您又作何解释呢?如果是大家的留言您都没有回复,我自然不会来怪您,毕竟有些站点的确已经不在做下去了,但很显然我是七月一日申请的贵站友链,但直到您给五天前的他人申请回复都没有给我一个正常回复,这又是我应得的了吗?③我昨晚给贵站评论的态度完全来自我遭受的不公平对待,如果您曾主动回复我说您觉得没有眼缘、您觉得和我还不熟悉等等各种理由我都会欣然接受,并争取和您多互动再添加。但很显然,您宁可给别人回复也不回复我,我想在此以前我并没有任何行为招惹或冒犯到您吧?

2024年7月16日

我回复:我没有强制谁一定要跟我互动甚至眼熟,但是如果要友链那本该如此。友链不是挂个链接就完事,在链之前是“友”。还有你说我没有给你正常的回复,可事实上我已经回过了。如果你觉得我的做法让你认为没有被尊重或者自尊心破碎,那我可以给你道歉。

2024年7月16日

对方回复:首先,我接受您的道歉,但请您不要本末倒置,五天前他人的友链都是在发出后您主动回复的不添加,明明是同样的结果,为什么我就要被您“晾着”,偏偏要在我再发—条消息才肯回复我呢。另外,我已经申请您的QQ好友,我希望咱们都可以平静下来好好聊一聊,也就当了解彼此了,还望您同意一下

对方后来确实加了我的 QQ,附言:兹认为占用贵站珍贵的评论资源吵架想必是毫无意义的

关于此事

看过我前面更新的朋友应该知道,7月1号到7月7号的七天,我都处于非常忙碌和疲惫的状态中。在忙碌结束后,7月8号我更新了一篇日志。

对方提交友链评论信息的日期是7月1号,此后的一段时间我几乎无暇顾及博客互动。也有一些我通过 rss 订阅的博主有更新,但是没有及时去进行互动。此后的时间里虽然闲暇了下来,但是此前的评论我可能忽略掉了,没有及时回复。或者用时不时不回我消息的碎月的话来说,已经意念回复过了。

毕竟网络和博客都不是生活的全部啊,我无法做到面面俱到。

关于友链

在我写博客之初,也积极主动和许多有意思的博主申请交换友链。当然,我几乎能满足这些友好的博主并不苛刻的要求,比如有独立域名啦,有实质内容啦等等。

在去年还是前年,我停止了友链交换,并关闭了友链页面的评论框。但是期间也有个别博主在我其它文章页里提交友链信息,我可能没有回应,也可能回应过了。

在今年初,我决定重新开放交换,因为在这一两年我又认识了许多有趣的博主。同时也计划清理掉一部分无法访问的、没什么交集的和长期不更新的博客。

在重新开放交换后,我主动、单方面添加过几位博主的友链信息,比如 Jeffer.z 和网友小宋等;也有我们日常都有互动、比较熟悉却没有添加友链的博主,比如 obaby 等,其中 obaby 的域名太多但是每一个都很好记,所以我认为用不着多此一举。

有几位博主的博客可能没有提供友链信息,所以我手动去找需要填充的内容。这样做很大程度上是受了当初的友链博主(现在他的博客无法访问了)“李子白了”的影响。我认为在我博客的友链,应当是服务于我的,使我可以随时更便捷地访问其他博主的博客;而不是主要服务于其他的访客或者搜索引擎。

当然,有好多博主都整了个“朋友圈”,即通过 rss 订阅的方式,在自己博客展现其他博主更新的博文。我认为这才是更有效的独立博客互动方式,无论是对博主还是其他访客,文章外链肯定比单纯的网站外链更有价值。但是因为我技术菜又有拖延症,所以一直没实施这个计划。

在我的友链页面有一个小小的说明:

私以为,友链之所以叫“友链”,通常是因为先友后链,它的作用是记录并方便博主个人访问。

为此,我单方面添加了几位博主的链接,请博主见到后不要见怪。

\交换友链看眼缘和感觉,不熟可能不会添加!**

当初写这个说明,一方面是表明我的态度,另一方面也希望有些第一次来就直接提交友链信息的博主能够谨慎,因为一开始我总是认为对方提交了我却不添加很尴尬,这也导致了我的博客曾经出现过个别我确实不想添加的友链。但这样的说明似乎并没有什么卵用,因为还是不止一次有我从未见过的 id 在我的友链页提交友链信息。

如果都不熟,或者对方的内容确非我所爱,那贴一个外链的意义在哪呢?所以我想,友链要先“友”这一点没什么不妥。

写在最后

我没有通过上面那位博主的 QQ 好友请求,我在博客留 QQ 仅仅是因为公安网备的时候,叔叔要求我添加能联系到我的投诉和举报方式。

在我看来,加 QQ 可比第一次来就直接提交友链更没边界感。

当然,以上并非为批评谁。打心底里说,这位博主非常有教养,从始至终的语气和态度都很恰当,没有恶意的攻击和诋毁。我写这篇博文也并非是像小学生一样“挂网”,因为评论信息本就是公开可见的。

如果我经常和哪位博主互动,那说明我对你写的东西感兴趣。提不起兴趣的博客,其实真没有勉强自己互动的理由。

手动清理C盘的空间

2024年6月21日 01:00

前言

今天一时兴起想热心帮助网友清理 C 盘的占用,但是对方可能担心“远程控制”不安全所以委婉拒绝了我。看到有很多抽子都有C盘占用过高的问题,自己又不会清理。评论区也有抽子分享一些方法,不过很多我个人觉得不太实用。所以写一篇博文分享一下我的方法,纯小白向,大佬勿喷。

使用系统自带清理

Windows 系统自带的临时文件清理功能,一定程度上能清理出来一部分内容。

打开系统的“设置”,点击“系统”,点击“存储”,点击“临时文件”:

windows临时文件

进入之后会显示可清理的临时文件,一般来讲默认勾选的都可以直接清理,速度可能有点慢,等待自动完成就行:

windows临时文件清理

转移文档目录

因为很多软件比如QV的数据(聊天记录,缓存)都默认存在“文档”文件夹里,而这个文件夹默认又在C盘,所以越用占用越高。

文档文件夹占用

转移方法也很简单,点击“属性”中的“位置”,点击移动,在其它分区新建一个文件夹有序收纳就可以了。比如我这里是在 D 盘新建的文件夹LonelyGod来收纳:

文档文件夹转移位置

当然,除了文档文件夹之外,视频、图片、音乐等这类文件夹也可以如此操作。“桌面”文件夹不建议动,也不建议在电脑桌面放太多文件。

如果你要清理 QV 之类的缓存文件,可以使用它们自带的清理功能。

关闭系统休眠

系统休眠是指Windows在硬盘上预留一定的空间,当你点击休眠的时候,系统把内存里的进程缓存到硬盘上,下次唤醒从硬盘中读取,以恢复休眠之前的状态。其实系统休眠没什么存在的必要,短时间离开可以使用睡眠功能。

你可以在电源选项里查看自己是否打开了系统休眠,在设置的“存储”中有个“系统和保留”里面也可以看到,甚至在“关机或注销”的菜单里也能看到。

这是休眠打开的截图

打开 Windows PowerShell(管理员),在Windows 11上好像叫“终端管理员”。输入powercfg -h off,然后回车,再重启电脑。切记,重启不等于关机再开机!

关闭虚拟内存

如果你的电脑内存(注意内存不是硬盘存储空间)够大,或者你不会运行大型游戏、软件之类的,那么虚拟内存也可以关闭。因为即便是固态硬盘,读写速率也不如内存条快。

在设置的“存储”中有个“系统和保留”里面可以看到你是否开启了虚拟内存,如果有并且你想关闭,可以按照下面的方法:

关闭虚拟内存

注意:以上操作需要你有一定的计算机知识,以免设置不当的虚拟内存大小导致蓝屏!

关闭系统还原

从某种程度上来说,系统还原功能还是挺好用的。在你的计算机更新或者有一些特定的更改之后,系统会自动创建还原点,以便你在电脑蓝屏、无法启动等问题之后可以恢复到上一个还原点(快照)。这个功能可以按需选择是否关闭,也可以按需配置允许的使用量:

关闭或配置系统还原

进阶清理

完成上面那些步骤后你应该可以清理出来一部分磁盘可用空间了,但是或许对你来说还不够。

注意:以下操作需要你有一定的计算机知识,以判断文件是否可以删除!

下载软件SpaceSniffer,右键“使用管理员身份运行”,在界面中选择 C 盘,然后你就可以看到你的 C 盘下详细的目录了,并且软件会根据占用空间大小来显示:

spacesniffer

通常来说,AppData的占用是最高的,这个目录下存放了其它你安装的软件、游戏的数据及缓存文件。卸载软件也并不一定会自动清理掉这里面相应的文件。你可以点击任意文件夹,会自动进入下一级目录,自行判断哪些是不需要的,右键删除它就行了。

写在最后

虽然我是文科生,并且作为一个折腾了十几年计算机和网络的人,曾做过校园网的技术运维,也学习过网站渗透,甚至成了回不来的那个乌云论坛的白帽子,我还是会遇到各种各样棘手的问题。自己上网查阅,或者寻求大佬帮助,完事之后请大佬喝杯咖啡,都是在一边遇到问题,一边学习,一边解决问题。

当然,我也出于好心帮助过其他网友,在对方提出请我喝杯奶茶表示感谢的时候,我也拒绝了。有时候还是那种特别复杂难以解决的问题最迷人,并且授人以鱼不如授人以渔,所以写了这篇博文,希望能帮助到一部分与电脑斗智斗勇的网友。

BTW,如果你有什么电脑管家、卫士之类的工具,也可以使用它们清理,但效果往往并没那么好。

使用 1panel 自动申请和续签通配符证书

2024年6月4日 14:00

起因

自阿里云宣布不再提供一年期的免费证书后,腾讯云在今年4月25日起也不再提供一年期的免费证书。我的域名主要在 dnspod,所以也因此会受到影响。

好在服务器面板 1panel 提供了自动申请证书服务,虽然同样只有三个月的有效期,但是优点有二:

一是证书为通配符证书,无需逐个申请;

二是面板支持自动续签,大概可以算得上是一劳永逸。

开始折腾

其实整个过程也不算折腾,甚至不用文档,按照流程摸索着来,一次就能申请成功。

创建 Acme 账户

按照如下顺序点击“Acme账户”,输入你自己的邮箱。账号类型和密钥算法我保持了默认,这可能不是最优解。

输入邮箱创建Acme账户

提示:虽然不会验证邮箱,但是建议填写自己真实的邮箱地址。

创建腾讯云子账户

由于 dnspod 的 API 即将废弃,所以域名在 dnspod 的可以选择腾讯云。

在获取Secret IDSecret Key之前,我强烈建议创建一个腾讯云子账户,并且设定用户组和权限,尽可能避免不必要的风险。

创建子账户可以参考腾讯云官方的文档,这里我分享一下的配置的策略。

点击这里进入到腾讯云的访问管理控制台,点击“新建自定义策略”,选择“按策略语法创建”,选择“空白模板”,填写以下内容,名称自拟:

{
"statement": [
{
"action": [
"dnspod:DescribeDomainList",
"dnspod:DescribeRecordList",
"dnspod:ModifyRecord",
"dnspod:CreateRecord",
"dnspod:DeleteRecord"
],
"effect": "allow",
"resource": [
"*"
]
}
],
"version": "2.0"
}

当然,如果你不喜欢json,也可以选择“按产品功能或项目权限创建”,只不过这样稍微繁杂一点。

创建完成之后,还需要把它关联到用户/组/角色。

最后,点击左侧的“用户”,选择“用户列表”,点击自己创建的子账户,点击 API 密钥,新建一个密钥即可。

注意SecretKey仅支持在创建时查看,请及时保存SecretKey

新建API密钥

创建 DNS 账户

回到 1panel 中,点击“DNS账户”,再创建账户,输入刚才获取的Secret IDSecret Key就可以了。

创建DNS账户

申请证书

点击“申请证书”,参考图片填写:

申请ssl证书

如果你要申请的证书是特定的网站,可以选择“从网站中获取”,不过我觉得通配符证书更方便,所以选择了前者。为了能一定程度上“一劳永逸”,记得勾选上“自动续签”。

关于“推送证书到本地目录”我没勾选,因为我的服务器上不止一个网站目录,所以我是申请成功之后在“网站”的“HTTPS”里,手动选择了申请的通配符证书。

按照上述图片填写完成后,保存并点击申请,然后就可以看到申请日志:

日志显示证书申请成功

最后

前面也说过,这个过程其实并不算折腾。但是由于 1panel 是明文保存的Secret IDSecret Key,在权限策略和安全性问题上我纠结了很久,最终决定只赋予最少必要权限。

此外,由于我使用的 CDN 支持自动续签,所以我无需把服务器申请的证书推送到 CDN 那边,也给我节省了一些时间。

当然,如果对于上述的权限配置之类的有不同看法,欢迎赐教。

免费的代码AI辅助工具:百度comate

2024年5月18日 19:20

前言

其实我对百度并没有太多的好感,但是特殊环境下,百度的 AI 确实算得上是国内现有的一线水平。

并且对于一个文科生来说,写代码是一件比较困难的事情。此前在picgo-plugin-s3的基础上改写一个picgo-plugin-dogecloud我都花了许多时间,也请教了几位大佬。而如今,有一个适合国内宝宝体质的代码辅助 AI 又出世了,无法使用GitHub Copilot 的我,仿佛又看到了一些希望。

简介

百度comate 是基于文心大模型,结合百度编程大数据开发的一款代码辅助工具。目前支持以插件形式安装在 VS codeJetBrains IDEs 和 Xcode上面。支持代码生成、注释代码、代码解释和技术问答等功能,并且支持私有化部署。

使用

点击这里,然后在右上角可以找到下载安装的按钮,界面中分别对上述的三个工具都有安装指导。

在vscode中安装comate

VScode中安装完后,右下角会弹出一个登录栏,通过百度账号登陆可以不用去折腾什么License,即点即用。

我尝试了一下代码优化建议功能:

在picgo-plugin-dogecloud插件试用

价格

comate 为免费个人提供标准版订阅,还有专业版和企业版。对个人开发者而言,标准版的功能基本能够满足日常的需求。

comate的价格

最后

目前 comate 有个截至到5月30日的520宠粉节活动,有积分抽奖,专业版体验卡和京东E卡等可以兑换。使用我的邀请链接安装使用,我们俩都可以获得 100 积分,这简直就是双赢啊各位!

comate的520宠粉节活动

撇开活动,有一款免费国内的代码 AI 辅助工具可以使用,相信对于开发者们以后的开发都能有更大的效率提升,这比重新打开网页去问 chatGPT 肯定要方便很多。

网站卫士即将停止服务

2024年4月29日 22:00

前言

在我做博客的初期,尝试过各家提供的免费 CDN,尤其是在使用又拍云被刷流量导致欠费以后,我便更加青睐具有一定安全性的 CDN,奇安信网站卫士便是之一。

奇安信网站卫士前身是 360 网站卫士,后来奇安信从奇虎 360 分离出来成为了单独的公司,这个业务也就由奇安信来运营。

奇安信网站卫士停服

作为一款免费防 DDOS、CC 的高防 CDN,免费为公众提供了这么久的服务已经很良心了。可能受近几年效益的影响,奇安信此前官宣 2023 年年终奖归零,砍掉烧钱又不盈利的公益业务,也是可以理解的。毕竟有许多用户确实有高防的需求,奇安信无偿帮他们扛了这么多年。

奇安信网站卫士停服公告

由于我体验的时期,发现奇安信网站卫士的节点不够快,所以没有持续使用。在后来也算是找到了还不错的下家。

还能用什么

2021年的时候,我写过一篇《国内免费CDN和云存储评测分享》,目前国内提供免费 CDN 的厂商还是很多,并且越来越多的融合厂商和小厂商也为各位站长提供公益的接入。因为经历过被刷流量却没提醒,在这些厂商中,我没再和任何人推荐过又拍云。

如果同时需要云存储和 CDN,我首推融合 CDN 厂商多吉云。多吉云每月有免费 20GB 的 CDN流量,10GB 的云存储,还有 20GB 的视频云。多吉云主要使用的是腾讯云的 CDN,节点和速度上都有很不错的体验。工作人员曾说过,在设置了安全策略还是导致流量被刷,可以申请减免。后来我被刷过一次,虽然用不上补偿流量包,但是多吉云还是给了补偿。

如果对安全性有一定的要求,我推荐上海云盾。上海云盾不限流量,但是限制 5Mbps 带宽。体验版有一定的限制,并且 DDOS 直接回源。此前有大量用户涌入云盾,导致节点速度收到过一定程度的影响。

此外就是一些象征性收费或者完全免费的公益厂商,比如火毅盾、盾云安全、括彩云等等。但是我不建议使用控制台功能不够完善的服务,比如连基本的 QPS 限制、流量封顶策略之类的功能都没有,被刷流量又会带来一笔很大的费用。

最后

我打心底里感激这些为站长和博主们提供公益服务的厂商,也深知用爱发电需要很大的勇气和支出。不管用哪家的服务,一定要设置好安全策略,避免被别有用心的人攻击。当然,使用公益服务也要合法合规,不要滥用。一方面是支持和保护提供公益服务的厂商,另一方面也是保护自己。

放弃阿里云盘

2024年4月25日 03:50

起因

内测开始声称“永不限速”的阿里云盘如今已然成为了另一个百度网盘,所以前段时间开始,我就在对比选择下一个主力云盘。

今天偶然逛酷安,偶然看到酷友转发的疑似阿里云盘开发者群发布的公告,“第三方应用权益包”即将上线:

云盘客户端上线“三方应用权益包”(以下简称“权益包”),权益包可按月、按年购买。“权益包”与客户端已有的“SVIP 超级会员”是不同的两套权益,“权益包”提供在第三方应用使用云盘的上传、下载等权益,“SVIP 超级会员”更侧重在云盘移动端、电脑端客户端的使用权益。

购买“权益包”的用户,在任意三方应用访问阿里云盘文件时,享受高速下载通道高清点播清晰度等七项权益。若用户未购买“权益包”,依然可访问所有接口,只是无法享受权益。

简而言之,用第三方客户端以及使用 alist 添加的阿里云盘,可能很快就无法直接在线看原画视频、无法高速下载文件了。

影响

我在酷安看到有人在收阿里云盘账号,评论里有人提到 4.79GB 永久容量的昨天(4月23日)卖了六百五十块;而今天的“行情价”似乎普遍在两三百,价格腰斩。

不管卖不卖账号,这个公告都坚定了我离开阿里云盘的想法。

从内测开始的这几年,眼看着阿里云盘用户群越来越庞大,资源建设越来越丰富,网站论坛资源分享方式中,阿里云盘似乎也成了一个“标配”。

我充分理解云盘运营需要大量的花费,也能理解产品开发付费功能和服务。但是阿里云盘一开始的口号并没有能够贯彻下去,如今的阿里云盘似乎也成了曾经的屠龙少年。

这几年除了使用阿里云盘找影视资源,因为它的“永不限速”口号,我也把许多个人和工作的文件都转移到了阿里云盘上。今天在下载文件进行准备迁移的时候,才发现不知不觉我已经上传了这么多东西。使用官方客户端下载文件的速度最高只短暂跑到过 1M/s。

阿里云盘官方客户端的下载速度

此外,此前可以通过签到获得一天的影音权益卡或者会员天卡在上个月已经没有了,取而代之的是有时间限制的容量卡。我此前喜欢通过阿里云盘的电视客户端看电影,需要的时候临时兑换影音权益卡或者会员天卡,现在也不得不放弃了。

在这个公告正式生效后开始,也意味着我前不久才通过 alist 添加的阿里云盘无法再继续发挥更大的价值。同样受影响的还有许多人喜欢的“小雅”。

怎么办

即便价格腰斩,还是能看到很多人在出售自己的阿里云盘账号。但是我个人的建议是不要卖

阿里云盘有个“文件恢复”功能,默认开启。在这期间删除的文件可以通过回收站恢复,在回收站删除后,还可以通过“文件恢复”功能在 60 天内开通会员后恢复。即便关闭了该功能,再次打开,此前能恢复的文件依旧存在于列表之中。很遗憾的是,阿里云盘没有提供真正的“彻底删除”功能。

如果你的阿里云盘账号上传过个人文件和工作文件,贸然出售账号,极有可能因此泄露隐私

阿里云盘恢复功能

写在最后

我目前有一台 NAS,主要用的备份盘是 onedrive。国内众多的云盘中,其实我很看好运营商的网盘,比如移动云盘。移动云盘同样声称“永不限速”,这或许是作为运营商给它的底气。加上移动用户可以以很低廉的价格或者活动获得云盘会员,整体的使用成本还是非常具有吸引力。但是移动云盘的客户端实在是做得很糟糕。

阿里云盘未来会走向何处,我无法预测。虽然它以迅雷之势抢占了国内云盘的市场,但似乎并没有给百度网盘之类带来毁灭性的打击。个人用户本身肯定是更喜欢免费或者价格实惠的产品,未来会不会有下一个云盘再次崛起,再走这些老路,谁又知道呢?

Suno AI 音乐创作

2024年3月27日 04:30

前言

两年前,我偶然发现了一个可以生成音乐的网站(AIVA),网站只能生成纯音乐,虽然有各种风格,但是同一曲风生成的不同曲目,听起来多少感觉缺乏新意。

彼时,chatGPT 还没有公之于众,人们对 AI 能力的想象还很大程度局限于微软小冰之类的表现。但继 chatGPT 引发 AI 大浪潮之后,AI 的创作能力不再仅仅局限于生成文本,生成图片,甚至生成音乐和视频也有了非常大的进步。suno AI 的音乐创作能力究竟如何?

尝试

在登陆以前,suno 的广场(explore)上就有许多用户生成的音乐,排在第一的竟然是中文用户生成的作品。点击试听了一下,不知道该如何评价,毕竟我不是专门学音乐的,更不是专业的音乐人。

suno广场

登陆之后,点击 creat ,来不及多看,直接开始尝试。

我在歌词填写部分粘贴了我好几年前写的所谓的诗,但是又手贱点了一下 generate lyrics,导致歌词后面括号里自动生成了英文翻译,并且还给歌词分了节。随机选择的曲风我都觉得不太合适,就输入了一个 POP,从其他用户生成的内容来看,应该是支持多曲风的。

sunocreat

可能是字数限制,所以第一次尝试生成的歌曲中的歌词并不完整,并且自动翻译的英文部分原来成了和声。整体效果还不错,遗憾的是,歌词不完整。点击这里试听

sunov1

第二次尝试,我重新粘贴,没再点 generate lyrics,自动生成的音乐也还不错,但是显然对于多音字(如“目的”的“的”是唱的de),效果如下:

感受

虽然多年以前,微软小冰就有 AI 音乐“创作”和合成,比较出名的虚拟歌姬还有初音未来等等,但是整体来说,歌曲在声音的自然度和流畅度方面还是明显无法以假乱真。

Suno AI 的发展前景,可能无法取代真正的音乐人,但是会玩的音乐人说不定会使用 Suno AI 带来更多有意思的创作——可以应对歌迷的催更,但是,现场(Live)怎么办就另说了。

来自开源项目社区的歧视

2024年3月18日 09:20

前段时间,因为网络的问题,在各处请教解决方案的时候加了immotalwrt 项目的社区。里面大佬很多,也有人帮助我提供排查问题的思路,非常感激各位大佬。

今天晚上闲来无事,翻了翻群聊信息。在聊到最近遇到的问题时,透露了我使用的是重庆移动宽带,引来大佬的一阵阵吐槽。

仅从我主观来讲,重庆移动的宽带质量相较于多年以前确实有了很大的提升。起码在这次出问题以前将近一年的时间里,我的使用体验是非常不错的。网络速度不像以前会在晚高峰时大打折扣,连接电信服务器玩游戏的延迟很低并且也稳定。我没用过联通的宽带,但是在我的看法里,移动宽带肯定比电信宽带更具有性价比。

大佬吐槽之余,另一位管理员建议我换宽带,办联通可以找他,好像是联通的一级代理。从后来的对话中,不知是开玩笑还是怎样,提到过一句联通有赞助(不清楚是赞助社区还是项目)。

我暂时没有换宽带的打算,因为两年合约期才过不到一年,加上单位付费不用自己额外掏钱,最主要的是现在通过深度配置 smartDNS 姑且解决了之前遇到的网络问题——emm..看来真有可能是运营商的 DNS出了问题。

在得知我没有换宽带的打算后,社区群聊里的风向发生了变化。从吐槽之前群里的“狗哥”开始转移到嘲讽我,说我不会是“狗哥”的小号吧。我想为自己辩解,我说我有我的苦衷,我当然有我不换宽带的理由。

不知道何时开始,管理员就冒出了要把我移出群聊的发言。似乎那时候,我就变成了一个异教徒,虽然我并非重庆移动的狂热粉丝。

我理解并且充分尊重每个人对各自选择的自由,因为每个人是独立的个体。就像我认为电信宽带贵,但对有的人来说并不如此。我没有去嘲讽用电信宽带的人傻钱多,因为我认为它贵并不是它的用户群体的问题。同理,我也只是一个普通的宽带用户,而非重庆移动的工作人员,对重庆移动有任何的不满大可直接找他们反应,但是不应该把歧视转移到用户身上。

就好像,我不喜欢某品牌的手机,我自己不会去买,但是我不会歧视和嘲讽选择这个品牌的用户。

我认为,这是一种基本的素养,消费者何罪之有呢?

在受到歧视和嘲讽之后,我反问了一句:原来开源社区也有这种歧视?

看过我以前的博文的人应该都知道,我不止一次表达过对开源世界的赞美和尊敬,我非常感激那些为开源项目默默付出的大佬,他们就像侠客一样,手执利剑,消除不公,匡济天下。

只不过,这柄剑如今插在了我的身上,虽然我不是运营商,也不是利益相关者,我只是一个普普通通的用户而已。

这也再次坚定了我写独立博客的想法,因为总有那么些地方,我连为自己呐喊,为自己辩解的可悲的机会都没有。

OPENWRT断流问题得以解决

2024年3月15日 05:00

前言

目前没有出现网页解析失败的问题,但是仍会间歇性出现网络缓慢或断网问题,文章可能存在事实性错误

前阵子被 openwrt 拨号断流的问题折腾得心力交瘁,使用了一段时间的光猫拨号以后,甚至产生了“为什么非得要路由器拨号”的想法。

这阵子在 V 站、闲鱼、恩山无线论坛和 H 大的 immortalwrt-mt798x 项目 issue 中分别请教了问题,得到了很多热心网友的建议,但还是没有解决问题。

后来加了 immortalwrt 官方的社群,在群里咨询大佬后,有大佬给出建议,然后我找到了问题的根源!

简单来说:域名解析的时候被转发到群晖去了。

问题排查

在社群中描述了详细的情况后,大佬给出了他的思路,按照思路排查下去,症结浮出水面。

大佬首先让我执行 uci show dhcp,查看结果只有一个 IPV6 设置的问题,即我在 LAN 口将 DHCPv6 设置成了中继模式(hybrid)。而 WAN 口拨号后,自动生成的 wan_6 接口是能获取到 PD 前缀的,大佬说这个能不开就不开。

问题不在这里,于是我分别执行大佬给出的两条命令,然后持续 nslookup 域名,当出现错误时对比两者的情况。

第一条命令:

tcpdump -i br-lan udp port 53 -w /tmp/lan.pcap

这条命令是使用 tcpdump 抓包 LAN 口,把数据记录在 lan.pcap 文件中。

第二条命令:

tcpdump -i pppoe-wan udp port 53 -w /tmp/wan.pcap

和上条很相似,不过是抓包 WAN 口,把数据记录在 wan.pcap 文件中。

在持续执行 nslookup 的时候,除了有一个域名我输错,此外没有发生解析异常。在终止了 nslookup 后,我查看了 lan.pcap 文件,问题一目了然:

lan.pcap记录

我执行 nslookup 之后,域名解析被转发到了局域网的黑群晖设备中。

此前卖家建议在群晖里手动设置 DNS,以便开机后能正常同步时间,所以我把群晖的 DNS 手动设置成了 114.114.114.114,并且貌似最后一段我还不小心写成了 144

难怪时不时出现域名解析不正常的情况,原来就是群晖中设置了错误的 DNS 的锅。

解决方法也很简单,把群晖的 DNS 设置为自动,为了保险起见,在群晖中关闭了 DHCP Server

关闭群晖dns server

再次开启抓包,执行 nslookupDNS 显然没再被转发到群晖去了:

抓包显示解析正常

最后

在得到这个思路以前,我联系了运营商,对方告知他们最近没有升级宽带服务器和后台,但是对“是否因为整治 PCDN 限制光猫桥接使用”这个问题没有正面回答。最后又转到分公司来,师傅说后面约个时间,找一个专业的师傅上门看看。

其实我内心知道宽带线路和光猫是没有问题的,也不认为他们能检测出什么问题来。最后我请大佬发个收款码,请他喝一杯奶茶。大佬很低调,给了我 immortalwrt 项目官方爱发电的链接,于是我捐赠给了项目官方。

为我错怪的 IPV6,为我错怪的路由器硬件,为我错怪的路由器插件道歉!

回想起来,一开始我就确定是 DNS 解析的问题,但是由于找不到更多解决方案,甚至抓包也没抓到路由器 LAN 口,导致一直没有解决问题。每次刷新固件后总有问题被解决的错觉,而现在,应该是真的解决了!

更换宏碁 Swift 3 SF314-511 笔记本键盘

2024年7月25日 21:22

几年前给老婆买了这台宏碁 Swift 3 笔记本电脑,单从配置(11Gen I5/16GB RAM/512G SSD,当时四千多买的全新机)来看它的性能并不算高,但一直以来用着都还不错,不论是响应速度和续航体验都挺好,甚至超过了我那台小新 Pro…我也不知道为啥。

前不久,老婆突然要用的时候发现键盘几乎完全失灵了,我检查过后初步判定是键盘坏了…但从肉眼看不知道是什么引起的,也没见进水和挤压等等,难道是陈小果干的好事儿?事不宜迟我从万能的淘宝花了五十几块大洋下单了一个同款的原装键盘(封面图)回来,结果发现专程让老板送的螺丝刀根本没法用…笔电外壳的 12 颗螺丝是相对少见的六角花型,家里的螺丝刀也奈何不了……😒😒😒

想着省钱,于是又从拼多..... [ 阅读全文 ]


原文链接: https://www.shephe.com/post/replace-acer-swift-3-sf314-511-keyboard/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

Spikformer脉冲神经网络学习

2024年7月6日 13:33
近期我们进行了人工智能实训,我们小组选择的是脉冲神经网络,不同于原先的神经网络,这个网络采用的是脉冲信号,目前脉冲神经网络的效果并不是很好,但是因为是一个全新的神经网络架构,并且基于生物启发的计算方式,使得它们在处理稀疏和非结构化数据时具有独特的优势。

计算机网络期末总复习

2024年5月31日 00:48
应该注意到标题的改变了吧,本来是一章节一章节的复习,奈何我突然发现,老师画的重点和考研的重点并不是很符合,没办法咯,于是我决定将计算机网络考研复习部分的内容暂时搁置,后面逐步更新,反正一定是会更新的,因为408必考呀!然后将期末复习内容先整理出来,按照老师的考点进行复习。

不会再见,点心云!

2024年6月24日 11:46

在去年九月份的时候,写了一篇《利用家里闲置宽带,给宽带费回回血!》跟大家一起分享了如何利用PCND技术利用家里的闲置宽带给网费回回血。当时我配置了两台J4125,其中一台是all in one,里面跑了两个网心云,一个是迅雷插件版,另外一个是Docker版。而另外一台J4125则是单独跑了一个点心云。为了能有更大的收益,把家里的宽带从300M升级到了500M,上行是20M。利用爱快多拨,上行可以跑到50M。这两台设备,平均每月的收益能有150块钱左右。其实如果要是项目再早,收益还会更高,可惜没有赶上那个时候。

大概一个月前,突然发现家里的宽带卡了,不管是重启路由还是给光猫断电重拨都解决不了。用了测速软件一测下行才百十来M,上行就更低。最最为重要的是,发现公网IP也失效了,再打电信报修,客服在后台查询公网IP是正常的。以为是硬件问题,打10000报修,维修师傅来测试路线完全没有问题。后来和维修师傅聊天才知道,现在江苏电信正在大力查处PCND,只要查到宽带降速、公网IP停止。就连你长时间PT下载都会把你的宽带降速。维修师傅说你这个情况算是好了的,只是给你降速,就在我们同小区有一家查到之后就直接停宽带。我的个乖乖,真的是怕了。为了减少不必要的麻烦,经过思考,还是把点心云、网心云给下了吧。

PCND大概停了有两周后,再打电话报修。报修什么,宽带还没有给我恢复、公网IP也没有给我恢复呢。报修了,维修师傅又到现场了,但是解决不了,说是后台原因。难道就这样完蛋了?找在电信公司的朋友帮忙解决吧,他也就是一个电话的事情,一切搞定。唉,问题搞定了,又少不了一顿酒给他。

项目停掉了,那台单独跑点心云的J4125就在我身旁吃灰呢,得要把它放在海鲜上给卖掉了哟。至于宽带,也不会再去降到300M。因为以前单独300M宽带的就是800块钱一年,而现在虽然是79的套餐,但是有500M宽带、5个手机号共享500分钟通话、共享40G流量呢,还是很划算的了!

由“软云事件”想到的!

2024年6月13日 08:56

初识软云_RuanCloudf是在去年11月份大佬论坛上看到的,当时他在论坛上搞促销活动,便买了他一台香港VPS活动机,2C2G的一年133块钱。这台VPS就拿来当备用服务器,在上面折腾一些Docker待稳定运行之后再迁到CloudCone 的主服务器上。虽然是活动机,但是网络还是非常稳定的。

在今天三月份,软云找到我,说想在我的网站上投放广告,给我的报酬就是免费送一台4C4G5M的香港安畅服务器。因为之前有用他的香港活动机,对他家的机器还是比较满意,便答应了。在是否撤下我原来的CloudCone 广告时也协商一致,就是把送我的香港服务器配置提升至8C8G10M,并口头协议长期有效,当然是给他写一篇博文推广。这也就是他推出的“站长扶持计划”。

和软云合作的不止我一个,还有博客界知名度很高的杜老师说邹江博客等。如果我一人给他推广可能没有什么影响力,但是三五个一起推广,在我们这个博客圈里还是有一定有影响力。最为关键的是软云推出的活动机性价比真的是高。如果没有后续的事情发生,可以说可能还有一部分博友会入手他家的香港安畅机。

五一假期的时候,收到软云QQ通知,说是香港安畅全线下架,原因就是注册会员没有要求实名而导致很多人在香港安畅服务器做了非法的事情而被查。从这一点明眼人都可以看出来是服务商管理疏忽而导致被查服务器下架,责任在于服务商。可是很多博友要求软云退款的时候却被告之余款不能原渠道退回,只能退到软云个人中心余额。另外一种可以选择国内服务器后再补偿配置。其实于这件事对于我们做博客的来说之所以选择香港的就是想不用备案而省事的,补偿国内的服务器真的是没有什么意义。另外就是服务器下架的原因是管理不善,与博主们无关,不能因为你的管理不善的后果来让博友承担。

唉,以后不会再有这样的合作了,虽然这样只是扶持、只是广告,但是无形当中也等于给他做了“担保人”。很多博友中看着我们的“担保”才去购买的。这样一来,无疑给我们自己的声誉带来了一定的影响。

其实,作为博主们选择服务器还是很难的,大厂的服务器有保障但是太贵,而小厂的服务器便宜吧但是又没有保障,说下架就下架说跑路就跑路。还是那句话,为了自己数据的安全,一定要记做每天备份,否则后悔真的来不急。

和软云终止合作后,我还是搬回到了CloudConeCloudCone家的服务器虽然不是性价比最高,但是胜在稳定。如果你信任不过小厂,那还是来用CloudCone家的吧。

拿下了zhangbo.net完成ICP及公安备案,正式启用!

2024年5月23日 15:05

域名,于博主来说,这真的是一个老生常谈的东西了。对于域名的使用,我相信几乎所有的博客都不至一次的换过博客的域名吧。人,就是善变的动物,对于自己的域名也是同样,某断时间想搞个短域名玩玩,或又是某个时间想搞个主流域名玩玩,再过一段时间还又想搞一些非主流的域名玩玩,到最后手里都有那么多的域名在吃灰。曾经我迷恋过短域名,搞过bm.md这个域名,但是拿来只是放在手里吃灰,还好后来被原价卖了。

因为我的博客名称一直用“老张博客”或是“张波博客”,所以域名也就是围绕这两个名称换来换去罢了。最早的是用imzhang.com,后来在游子的帮助下注册了zhangbo.org这个域名,这个域名我使用时间最长,应该用有十来年,后来被人7000块钱收购了,收去搞什么引流去了。把zhangbo.org卖了之后用过一段时间的izhang.org。后来在邹江博客的帮助下,成功《抢注了laozhang.org》。其实对于“laozhang”这个拼音,在之前也有关注,曾经laozhang.cn可以抢注的时候我都报了名,但是因为那段时间一直使用zhangbo.org并没有打算去换域名,所以虽然报了名但在竞价的时候拍了出价,最终被人600块钱抢走了。没几天我联系的那个人想着加个一二百块钱给买过来,结果人家报价是2万一分不少。乖乖,炒域名的真的是十年不开张,开张管十年呀!

曾经我也用过一年续费1330块钱的“贵族域名”,那就是zhang.bo,结果《启用zhang.bo之后,我成了调侃的对象》,这个域名用了几个月就被我停掉了。随着时间的推移,手里的域名就慢慢的积累,那么多的域名放在手里只有两个作用,一是续费,另外就是“自慰”了。在2023年底的时候,下定决心《将博客减法进行到底!》,手里除了这个博客的域名,其他的域名不再续费。

前几天五一放假的时候,同样又是在邹江博客的帮助下拿下了我姓名全拼的域名zhangbo.net。对于这个域名,并没有十分坚定的想法换成主博客的域名,还是想着把ICP备案和公安备案给做了放在国内,这样一些国内的免费的东西也可以用用。

其实很多人,特别是新建站的朋友都会问把博客放在国内还是海外,而大部分的回答答案也是一样的。放在海外不需要备案没有管束,而放在国内需要备案,各种规矩特别多放不开等等。其实想想,网络也不是法外之地,即使你放在海外你做了不该做的事情照样会被请去喝茶。

既然要把zhangbo.net放在国内,那服务器选择又是个问题,大家都知道国内常规的服务器价格真的是太贵,还好阿里云的99一年的活动还在,搞了两年。但是两年后何去何从又不知道了。域名和服务器都在阿里云,便提交备案。现在备案真的是方便,记得以前备案的时候服务器商还会寄拍照用的背景布给你,而现在全是在网上操作。5月2日注册的域名,5月7日提交ICP备案,一周后ICP备案通过,当即便提交了公安备案,5月20日公安备案通过。公安备案当时提交的是非交互式,想着过几天申请修改给交互式的看看,因为非交互式是不给开评论的。

目前手里也就是laozhang.org和zhangbo.net这两个域名了,估计应该会长期持有下去。

利用docker-compose方式搭建极简朋友圈!

2024年5月16日 09:08

前段时间“朋友圈”还是非常火的,每天更新博客真的太累,就不如每天写两句“朋友圈”,一句话,一张图片即可。便有很多人找WordPress的“朋友圈主题”,感觉用WordPress来跑极简的朋友圈,真的是没有必要,今天老张就向大家推荐Docker版的“极简朋友圈”!

极简朋友圈项目地址是https://github.com/kingwrcy/moments,作者是Mblog的作者,我在《宝塔面板Docker部署个人微博程序Mblog-前后端不分离sqlite版》有过介绍,大家有兴趣可以移步看看。

以前我部署Docker项目时习惯地在宝塔的可视面板里部署,虽然那样看着比较直观,但是多多少少还是有些麻烦,今天老张就来简单点,利用docker-compose方式进行部署。

1.创建docker-compose目录

进入宝塔面板,打开文件管理,进入你的Docker的映射数据目录里,我们可以把所有的Docker的项目都映射到一个总目录,总目录下再分子目录,这样便于管理。比如我在服务器的根目录下创建了Dockerdata,用来放置Docker项目的映射数据,不同的Docker项目,创建不同的子目录。

2.创建docker-compose.yml

这里我们来创建Moments目录,在Moments目录下创建文件,命名为docker-compose.yml ,将下段代码复制到该文件内即可。

利用docker-compose方式搭建极简朋友圈! - 第1张图片

 

version: '3'
services:
moments:
image: kingwrcy/moments:latest 
ports:
- "3000:3000"
volumes:
- moments-data:/app/data
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
volumes:
moments-data:

3.运行docker-compose命令

利用SSH工具远程进入服务器,进入到moments目录下,一定要进入到该目录下,命令是cd /XX你的Docker映射目录/moments/,进入目录后,我们来启动docker-compose,直接输入命令docker-compose up 即可

利用docker-compose方式搭建极简朋友圈! - 第2张图片

 

命令输入后开始跑代码,最后提示“ All migrations have been successfully applied.”后该Docker项目即安装完成。用你服务器IP+3000端口即可访问。

4.反向代理

如果不想用IP加端口方式访问,可以进行反代设置,具体方法可以参考老张的《宝塔面板反向代理,用域名访问Trilium

 

 

❌
❌