问题简述VSCode 的 remote ssh 插件方便开发者使用本地编辑器连接远程服务器进行开发,但是一旦运行某个程序产生了端口时,它就会利用 SSH 隧道自动转发端口到本地。比如:# webpack 或 vite 开启 dev server npm run dev有时我们并不想要这样的功能,因为本来就是经济型服务器,这样做会加重服务器的负担,导致间歇性的连接断开。经过一番搜索后,在 Github issues 里找到了 解决方案关闭方法在 settings.json 根节点下添加一行:{ "remote.autoForwardPorts": false }或者工作区:{ "settings": { "remote.autoForwardPorts": false } }

Nickel
Nickel 2022-03-13

问题简述

很多网站为了导流,使用了 openwrite 这个工具,想要阅读全部的文章就必须关注公众号,然后回复关键字,输入验证码。比如 这个网站 上是关于 opencv 的中文文档,即使关注了公众号,关闭标签页再打开仍要操作一遍,很是麻烦

介绍原理

向公众号回复关键字后,微信会推送消息到站点服务器,站点服务器会调用 openwrite 的接口获取验证码,然后把验证码返回给手机微信。

我们看到验证码,把它输入到网页上,点击提交时网页会调用 openwrite 的验证码校验接口,校验成功就会继续加载其他段落,此时全文就呈现出来了。校验失败就会给你一个提示。

关键就是跳过 关注-回复-输入 这些步骤,直接调用 openwrite 获取验证码的接口,然后自动输入到文本框,然后触发提交。全程看不到阅读全文按钮和弹出的模态框,体验十分美好!

代码实现

Tips:最好的方式就是把这段代码加到油猴里面,这样就可以自动化执行了。
  • 首先判断站点是否安装 jquery 和 openwrite 插件,然后再去判断阅读全文是否已经被处理过。因为处理过后是没有阅读全文按钮的,当切换到其他页面时不做判空控制台会报错。
  • 然后把站点在 openwrite 注册的 blogId 和 openwrite API 接口 url 拼接一下,通过 jquery 发送 ajax 请求,返回的数据是一段结构很简单的 html,用 jquery 简单处理一下,拿到验证码(code)。
  • 用 jquery 把验证码输入到文本框内,然后触发【提交】按钮,模态框就消失了。
(function () {
  if (!btw || !$) {
    alert("找不到btw或jquery");
    return;
  }

  let hasMoreBtn = $("#read-more-btn").length;
  if (!hasMoreBtn) {
    console.log("尽情阅读叭,没有讨厌的验证码啦!");
    return;
  }

  let blogId = btw.options.blogId;
  const baseUrl = "https://readmore.openwrite.cn/code/generate?blogId=";
  const openwriteUrl = `${baseUrl}${blogId}`;

  $.get(openwriteUrl, (data) => {
    codeHtml = $.parseHTML(data)[18];
    code = codeHtml.innerText;
    $("#read-more-btn").click();
    setTimeout(() => {
      $("#btw-modal-input").val(code);
      $("#btw-submit-btn").click();
    }, 1000);
  });
})();

油猴脚本注释如下,scikitlearn 这个站点也用了 openwrite,可以一并加进来。

// ==UserScript==
// @name         OpenWrite 破解
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       Henrenx
// @match        https://www.scikitlearn.com.cn/*
// @match        http://www.woshicver.com/*
// @icon         https://www.google.com/s2/favicons?domain=scikitlearn.com.cn
// @grant        none
// ==/UserScript==

总结思考

其实就是抓了 openwrite 验证码获取接口的漏洞,如果调用这个接口还需要再加一些其他字段,比如在站点注册时分发一个 privateKey,那么这个接口就不是任何人都能调用的了。


问题简述在做 web 或其他开发时,前期的后端服务是建在本地的,因此我们一般使用 localhost 来对本地服务进行调用,但是如果你的另外一个小伙伴也要调用你的本地服务要怎么办呢?因为我们个人的电脑是不具备公网 IP 地址的,这个时候就要用到内网穿透准备工作使用内网穿透技术,需要准备的材料如下:云服务器 它的作用是 “流量转发”,当地球某个角落的电脑对你的本地服务进行调用时,会先将请求发送到此服务器,然后服务器会转发到你的本地。一个域名这个并不是必须的,但是有它的话会更有牌面。如果他人调用你本地服务时,输入:XXXX.com 是不是会比 123.124.125.126 显得高级一些。而且有了域名,会更好记一些,4 个 3位数可能你要记好久才能记得住。内网穿透工具 这个工具其实有很多,比较出名的有 花生壳、ngork、frp、natapp 等,百度一下就会找到很多堆这样的工具。我用过花生壳、natapp 和 frp,其实道理都是一样的,就是配置起来稍有些不同。这里说明一点:natapp、花生壳可提供免费的隧道,就是按照它官网上的文档,下载一个 exe 可执行文件就可以实现此功能,不用像

用于 centos 相关的操作系统基本操作# 查看 firewall 服务状态 # 出现 Active: active (running) 表示是启动状态。 # 出现 Active: inactive (dead) 灰色表示停止,看单词也行。 systemctl status firewalld # 查看 firewall 的状态 firewall-cmd --state # 开启、重启、关闭、firewalld.service服务 service firewalld start service firewalld restart service firewalld stop # 查看防火墙规则 firewall-cmd --list-all查询、开放、关闭端口# 查询端口是否开放 firewall-cmd --query-port=8080/tcp # 开放80端口 firewall-cmd --permanent --add-port=80/tcp # 移除端口 firewall-cmd --permanent --remove-port=8080/tcp #重启防火墙

Nickel
Nickel 2022-02-24

问题简述

目前已经不建议这样搭建,建议使用 docker,因为开箱即用

当你拥有一台闲置的云服务器,可以尝试使用 nginx 搭一个静态文件访问服务,nginx 自带的那个服务界面是不太美观的,本文使用 nginx + fancyIndex 来做一个美观的静态文件访问服务。

如果想分享文件给别人,既不想拿优盘拷贝,而操作系统自带的文件共享服务也玩不来的话,可以试试 Everything。它不仅可以快速检索文件,还具有文件服务器的功能

下载软件包

# 解压 nginx
tar -zxvf *.gz

# 解压 fancyindex,需要两次
xz -d *.xz
tar -zxvf *.tar

安装配置

如果服务器已经安装了 nginx,可以先 备份 一下,然后重新编译安装,不然就被直接覆盖了!

找到 nginx 解压后的根目录,执行以下命令:

# 以 centos 为例,先安装几个依赖模块
yum install gcc -c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel

#安装前的配置 把对应的目录更换一下
./configure --prefix=/opt/nginx  --add-module=../ngx-fancyindex-ngx-fancyindex --with-http_stub_status_module --with-http_ssl_module

#编译并安装
make && make install

#创建软链接
ln -s /opt/nginx/sbin/nginx /usr/bin/nginx

后面的两个 --with xxxx 指的是 SSL 模块,nginx 默认不加这个,因为要用到 HTTPS,所以这里选择加上。

编辑配置文件

粘贴如下内容到 nginx.conf

server {
    listen 443 ssl;
    listen 80;
    server_name wiki.wannax.cn;
    charset  utf-8;
    ssl_certificate ../cert/wiki.wannax.cn.crt;
    ssl_certificate_key ../cert/wiki.wannax.cn.key;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;

    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    if ($scheme = http) {
        return 301 https://$server_name$request_uri;
    }
    location / {
      include fancyindex.conf;
      root /www/wiki.wannax.cn;
    }
  }

其中需要修改的是:

 server_name ---------- 域名
 ssl_certificate ------ 证书位置(下面示例中 cert 是目录,和 conf 目录同级)
 ssl_certificate_key -- 证书秘钥位置
 location ------------- 需要修改 root 为你服务器上某个目录(wiki.wannax.cn 是个目录)

如果你不想使用 SSL,或者没有证书的话,配置很简单:

server {
    listen 80;
    server_name wiki.wannax.cn;
    charset  utf-8;
    
    location / {
      include fancyindex.conf;
      root /www/wiki.wannax.cn;
    }
  }

下载主题

下载地址

解压命令:unzip *.zip

此压缩包包含两个主题,一个明亮、一个暗黑,自己选择。

把其中一个主题的目录移动到你的静态文件目录那块,和上面的 location root 保持一致即可

移动命令:mv xxxx /www/wiki.wannax.cn/fancydark (mv 后面的 xxxx 和 / 之间有空格)

把主题根目录下的 fancyindex.conf 移动到 nginx 的 conf 目录下

编辑 fancyindex.conf

fancyindex on;
fancyindex_localtime on;
fancyindex_exact_size off;
fancyindex_header "/fancydark/header.html";
fancyindex_footer "/fancydark/footer.html";
fancyindex_ignore "fancydark";
fancyindex_ignore "README.md";
fancyindex_ignore "HEADER.md";
fancyindex_name_length 255;

其中,fancyindex_ignore 指的是对外不显示哪些文件目录,此处配置的是主题目录不对外显示,但是仍可以通过浏览器手动访问此目录

fancyindex_header 与 fancyindex_footer 是两个 html 文件,默认位于此主题中,如果你有一点 html 和 css 和 js 的基础,可以自己改写一下。

最后一点工作

下面的命令可以管理 nginx

nginx -t              #检测 nginx.conf 是否语法正确
nginx             #启动 nginx
nginx -s reload      #重载 nginx
nginx -s stop     #停止运行 nginx

开启 nginx 的服务后,在浏览器地址栏输入你的域名,就可以看到努力的成果了。