星期日, 九月 07, 2025

188 IPv6 only 服务器上 Mihomo 入站 + 安装 WARP

环境与需求: 

IPv6 only 小鸡, 想上双栈 warp, 同时开放一个 socks5 端口, 用于 Mihomo 连入. warp 不要像 tun 那样来占用我的整个小鸡网络. 

流程: 

目标网站 - warp - socks5 - Mihomo - 机场 - 我的设备 

 

1, 运行脚本

wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh

2, 选

3. 为 IPv6 only 添加 WARP 双栈网络接口
1. wireguard 内核 (默认)
2. 非全局
1. 使用免费账户 (默认)
3. 使用 VPS 初始设置 (默认)

3, 选 13 安装 wireproxy 和进行设置, 最后可能会出错, 会显示如下信息, 看起来像是安装完成, 但是 wget 解析域名的时候解析到了 IPv4 的地址, 所以返回了 Network is unreachable: 

 进度 1/3: 安装系统依赖……

--2025-09-07 09:11:58--  https://github.com/pufferffish/wireproxy/releases/download/v1.0.9/wireproxy_linux_amd64.tar.gz
Resolving github.com (github.com)... 20.205.243.166
Connecting to github.com (github.com)|20.205.243.166|:443... failed: Network is unreachable.
--2025-09-07 09:11:58--  https://gitlab.com/fscarmen/warp/-/raw/main/wireproxy/wireproxy_linux_amd64.tar.gz
Resolving gitlab.com (gitlab.com)... 172.65.251.78
Connecting to gitlab.com (gitlab.com)|172.65.251.78|:443... failed: Network is unreachable.
0% [Working]
gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now
0% [Waiting for headers]
 进度 2/3: 已处理好 WARP 配置文件

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [128 kB]
Hit:3 http://archive.ubuntu.com/ubuntu jammy-security InRelease
Fetched 128 kB in 8s (16.3 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
157 packages can be upgraded. Run 'apt list --upgradable' to see them.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
openresolv is already the newest version (3.12.0-2).
iptables is already the newest version (1.8.7-1ubuntu5.2).
net-tools is already the newest version (1.60+git20181103.0eebece-1ubuntu5.4).
dnsutils is already the newest version (1:9.18.30-0ubuntu0.22.04.2).
0 upgraded, 0 newly installed, 0 to remove and 157 not upgraded.

 进度 3/3: 寻找 MTU 最优值已完成

 创建快捷 warp 指令成功
 WireProxy 还未安装

4, 直接去下载 wireproxy 的 amd64 包, 放入 /usr/bin/ 下, 给 0755 权限, 注意不是放在 /usr/local/bin/ 里面

https://github.com/whyvl/wireproxy/releases

5, 修改 /etc/wireguard/ 下的各项配置文件, 保证 dns 不为 IPv4. 不然 wireproxy 服务会报错:

journalctl -xeu wireproxy.service


-- Support: http://www.ubuntu.com/support
--
-- A start job for unit wireproxy.service has finished successfully.
--
-- The job identifier is 3900.
Sep 07 09:46:52 HK-LXC wireproxy[13136]: 2025/09/07 09:46:52 lookup engage.cloudflareclient.com on 8.8.8.8:53: dial udp 8.8.8.8:53: connect: network is unreachable
Sep 07 09:46:52 HK-LXC systemd[1]: wireproxy.service: Main process exited, code=exited, status=1/FAILURE
-- Subject: Unit process exited
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- An ExecStart= process belonging to unit wireproxy.service has exited.

修改 warp.conf 底下的 DNS 和 Endpoint 为 IPv6, 改 Endpoint 是因为域名不知道去哪个弱智 IPv4 DNS 请求导致不能解析, 所以就直接写成固定的 IPv6 地址:

DNS = 2606:4700:4700::1001,2606:4700:4700::1111
Endpoint = [2606:4700:d0::a29f:c001]:2408

修改 proxy.conf 底下的 DNS 和 Endpoint 为 IPv6, 如上.

5, 再次执行 warp 命令, 选 2.连接 Wireproxy (warp y) 或者直接执行 warp y

如果还启不来, 看看是否有 wireproxy 的服务:

systemctl list-unit-files | grep wire

如果没有服务, 手动添加一个, 注意从 /lib/systemd/system/wireproxy.service

[Unit]
Description=WireProxy for WARP
After=network.target
Documentation=https://github.com/fscarmen/warp-sh
Documentation=https://github.com/pufferffish/wireproxy
[Service]
ExecStart=/usr/bin/wireproxy -c /etc/wireguard/proxy.conf
RemainAfterExit=yes
Restart=always
[Install]
WantedBy=multi-user.target
systemctl daemon-reload

service 命令如果启动还有报错, 尝试手动运行

/usr/bin/wireproxy -c /etc/wireguard/proxy.conf

可能会看到

2025/09/07 09:59:06 lookup engage.cloudflareclient.com on 8.8.8.8:53: dial udp 8.8.8.8:53: connect: network is unreachable

这样的报错, warp 或者一键脚本擅自修改了 resolv.conf 也就是系统 DNS, 改回 IPv6 的即可, 如

nameserver 2606:4700:4700::1001
nameserver 2606:4700:4700::1111

另外可能有端口占用的问题, 从 netstat -lntpu 会看到哪个进程占用, 干掉端口占用的进程或者用脚本换新的 socks 端口. 


Mihomo 入站只需提一嘴, 会搓配置的人一看就懂

#config.yaml
log-level: silent
ipv6: true
tcp-concurrent: true
listeners:
  - name: myvmess
    type: vmess
    port: 80
    listen: 0.0.0.0
    users:
     - username: 1
       uuid: c441dae3-1176-4640-9c51-666e2f80d92c
       alterId: 0
       udp: true
       cipher: auto
proxies:
  - name: warp
    type: socks5
    server: 127.0.0.1
    port: 1080
    udp: true
dns:
  enable: true
  listen: 127.0.0.1:53
  ipv6: true
  nameserver:
    - https://[2606:4700:4700::1001]:443/dns-query#DIRECT
    - https://[2606:4700:4700::1111]:443/dns-query#DIRECT
  default-nameserver:
    - https://[2606:4700:4700::1001]:443/dns-query#DIRECT
rules:
  - MATCH,warp

注意 proxies 里面 udp 要开, 查看 udp 是否能通, 去 https://networktest.twilio.com/ 网站检测一下就行, 如果 udp: true 忘记写了的话, twilio 里面第一条  NTS: TURN UDP Connectivity 会显示 failed. 

nameserver 我用了 Cloudflare 的两个 doh 来查询, warp 只管和 ip 之间的流量, warp 用的是 udp 53 的传统 dns, 我完全不信任这种协议. 

星期三, 六月 11, 2025

187 使用 header editor 将搜索引擎中的 steam reddit epic play 自带语言参数去除

现在搜索引擎根据搜索关键词的语言爬到带语言参数的链接, 比如 
https://www.reddit.com/abc?hl=zh-Hans
https://store.steampowered.com/abc/?l=tchinese
https://store.epicgames.com/zh-Hant/p/abc
https://play.google.com/abc/abc/?hl=zh_HK

有时候要看英文, 还得去网页里切换语言, 但是它下次从搜索引擎点进来又带链接参数, 就又是目标语言. 这样很烦. 

可能还有别的方法, 但我喜欢使用 header editor 来重定向请求. 如果你熟悉这款插件, 直接复制粘贴规则就可以, 如果你期望能找到更简单的方法, 那么这篇博文不适合. 

Name 起个规则名字
Rule Type 是操作类型, 注意这里是 请求重定向 Redirect request, 而不是 修改请求头 Modify request header.
Match Type 选择第二个, 正则表达式 Regular expression. 
执行类型选常规, 也就是 normal. 
右边可以新建一个组 Save Group
其它的照着填. 

Reddit:
https:\/\/www.reddit.com\/(.*)((tl=zh\-hans)|(tl=zh\-hant))(.*)
https://www.reddit.com/$1$5 

Steam:
https:\/\/store\.steampowered\.com\/(.*)((l=tchinese)|(l=schinese))(.*)
https://store.steampowered.com/$1$5

Epic:
https:\/\/store\.epicgames\.com\/((zh\-CN)|(zh\-Hant))\/p\/(.*)
https://store.epicgames.com/en-US/p/$4

Play: 
https:\/\/play\.google\.com\/(.*)(hl=[a-z]{2}(_[A-Z]{2})?)(.*)
https://play.google.com/$1$4

当然这些正则不一定是最优解, 但我用着还不错, 尤其是 reddit, 机翻看着十分难受, 有时候需要双语对照着翻译, 老美逛论坛用俚语或者开玩笑玩梗的有很多. 

星期五, 四月 25, 2025

186 3D 泳池 手机壁纸 电脑壁纸 下载

 
来源拼多多, 一分钱买的. 都是引流的垃圾商家, 推广字节旗下的悟空浏览器.
图片应该都是拿 ai 生成的, 分辨率很高, 可以自己用画图工具缩放至 30%, 就是正常大小了, 原图链接在博客顶部的 yandex disk 网盘中. 因为 yandex 网盘限制 1GB 单文件, 所以分卷了, 三个都要下载, 约 2.67 GB 大小. 不要点 download all 下载打包 zip, 这种方式是单线程, 速度很慢. 另外, 不知道解压的人直接滚出我的博客.
如果此文对你有帮助, 请留下评论, 无需注册.

星期四, 二月 27, 2025

185 Firefox 火狐浏览器 原生 profiles 便携启动

先发我之前用的旧方法, 用 portable.exe 启动 + vbs 脚本将 portable.exe 设置成默认浏览器, 由 portable.exe 接管浏览器的启动. 

Firefox portable.exe: https://portableapps.com/apps/internet/firefox_portable

Firefox vbs 脚本: https://gist.github.com/winhelponline/057064a1dadb3eb9b0aa2b6f05a0331a

(Firefox 可自动升级或手动升级, 不需要离线包)

Chrome portable.exe: https://portableapps.com/apps/internet/google_chrome_portable

Chrome vbs 脚本: https://gist.github.com/winhelponline/5ba152dd99e41a9cd4e1b2eb79085fd5

Chrome 离线包(可解压出 chrome-bin): https://github.com/Bush2021/chrome_installer/releases

这个方法我认为不好, 每次启动依赖 portable.exe 有时候此进程异常会导致从其它软件点链接点不开, 而且浏览器打开的时候后台还会有一个 firefoxportable.exe 监视 firefox.exe 的启动和退出. 所以在网上找了 Firefox 火狐浏览器原生使用 profiles 来进行便携启动的方法.

1, 备份好当前的浏览器数据, 在 %LocalAppData%\mozilla 和 %AppData%\mozilla 里面.

2, 将浏览器数据移动到一个非 C 盘的地方, 比如 D:\Software\Firefox\Data (可选)

3, 浏览器打开 about:profiles 点击 Create a New Profile 按钮 (浏览器是英文的, 按钮就那么几个, 简中的自己找就行) 

4, Enter new profile name 这里给用户起一个名字, 目录就选第二步浏览器数据所在文件夹, 比如 D:\Software\Firefox\Data

5, 如果有 set as default 之类的按钮, 将新的 profile 设置成默认. 其它乱七八糟的 profiles 可以删除+删除文件. 删除之前自己做好备份.

6, 浏览器主程序 firefox.exe 创建快捷方式到桌面, 双击打开即可. 


如果还要多开, 以实现不同用户同时使用浏览器: 

1, 打开 about:profiles 创建多个 profiles, 名字不能相同, 相同不让创建. 比如 名称为 abc.

2, Firefox 主程序 firefox.exe 右键发送快捷方式到桌面, 更改目标为 D:\Software\Firefox\App\firefox.exe -P abc -no-remote

这个 no remote 就是为了防止浏览器识别互斥体, 从而实现不同用户同时使用浏览器, 这里的用户指的是不同的 Firefox 浏览器 profiles, 至于火狐账号, 登不登都无所谓, 看自己喜好. 

 

注意, 不要创建了新的 profiles 目录之后(文件夹为空, 无数据), 再从别的地方把浏览器数据拷过来, 这样的话大量扩展会失效, 因为找不到路径, 直接在创建 profiles 的时候, 指定已经存在的浏览器数据文件夹就行了. 

另外, profiles 的配置存放在 %AppData%\mozilla\firefox\ 底下, installs.ini 和 profiles.ini, 如果想要带着浏览器数据到处走, 这两个文件一并带上, 新电脑上先放好这两个文件才能继续进行下一步.


感觉这个功能做得不如 Chrome 方便.

星期五, 一月 17, 2025

184 Oracle VirtualBox 最后一个能够安装任意目录的版本

今天要在一台新电脑上用虚拟机, 官网下载了最新版的安装包, 发现安装不上, 目录不正确, Invalid installation directory 什么的错误, 网上查了下, 发现是 v7.0.14 以及之前的版本有一个漏洞可以进行提权, 所以它就限制了只能装 C 盘(或者把 C 改成 D 才安装), 要么就是改安全选项卡里的继承权限... 

所以根据攻防社区链接的信息来看, 最后一个能 任意目录安装 virtualbox 的版本是 v7.0.14, 实际测了一下发现确实是这样, 14 的下一个版本是 16, 中间没有 15, 安装 16 的时候就不能选择任意目录了. 

注意了, 本人是个人使用, 平时也就临时用用毒瘤软件, 或者测测可疑的执行文件, 并不是正规生产环境, 如果你是正规生产环境或者安全级别较高的环境, 不要使用旧版本, 再次强调它有提权漏洞.

水一篇博文, SB 龟壳真是越来越厦碧了, 听说它不交 JavaScript 的版权之类的东西, 也被社区骂了, 不过骂没什么用, 屎还是那坨屎 🖕 .

星期二, 一月 14, 2025

183 回退到 Telegram 第一个支持 "引用回复 + 高亮选中的局部文字" 的版本

目前 Telegram 的客户端越来越像史, 安卓端的强制显示官方动态, 全端的送礼物和星星, 频道内容中间穿插的垃圾广告 等等, 所以我有回退到旧版本的需求.

 

支持引用回复+高亮的第一个版本: 

Windows v4.11.2 (https://github.com/telegramdesktop/tdesktop/releases/tag/v4.11.2) 其实 v4.11.1 也可以引用回复, 只是不支持高亮选中的局部文字. 
Android v10.2.0 (https://www.apkmirror.com/apk/telegram-fz-llc/telegram/telegram-10-2-0-release/) 是第一个版本, 而且 引用回复 + 高亮选中的局部文字 两个需求都支持. 

感谢蓝点网 Telegram 版本更新功能及变化的文章, 节省了大量一个个版本安装测试的时间.


如果你只需要图片遮罩, 可以参考互联网上的 Telegram 新闻, 比如这篇:

Telegram 更新, 可以為相片/影片加防劇透特效

星期六, 十二月 21, 2024

182 Firefox 火狐浏览器 清除 console 控制台中的历史执行记录

从 Google Chrome 切到 Mozilla Firefox 已经有一年了, 除了网络异常的错误代码非常沙比以外, 火狐用起来感觉还不错. 

最近碰到一个问题, 由于在 console 控制台下跑了 JavaScript 脚本, 发现无法清除历史记录, 就像 cmd 上下键和 ssh 上下键那样可以直接恢复回来, 很烦. 

网上搜了一下, 开发者们大概在五年前就在烦恼这个问题了, 解决方法也非常简单, 在 console 中执行:

clearHistory()

就这么简单. 

 

感谢以下来源:

https://stackoverflow.com/questions/58021428/delete-firefox-javascript-console-history

https://support.mozilla.org/en-US/questions/1269646

 

星期一, 十二月 09, 2024

181 向日葵插座在 mihomo 内核控制的局域网下无法联网的问题 | override-destination 参数是否需要打开 | 关于 Encrypted Client Hello (ECH) 的一些实际使用经验和见解

最近折腾的东西有点多, 只讲和文章有关的吧, 编译了一个 OpenWrt 包给路由器刷上, 抛弃openclash 这个臃肿的插件, 使用 OpenWrt-mihomo, mihomo 插件需要 OpenWrt >= 23.05, Linux Kernel >= 5.10, firewall4, 我比较懒就直接重装系统了, 新系统是自带插件的. nftables (firewall4) 涉及系统核心防火墙, openclash 又是屎山, 所以升级失败是很正常的.

如标题所说, 向日葵插座和米家设备一样, 需要跳过域名嗅探的. 

根据我的测试, c1pro 型号和 c2 型号(多了个电量显示和电量统计的功能) 是不一样的, c1pro 需要多加一个域名. 

如果是 c1pro 插座, sniffer 这样写:

sniffer:
  enable: true
  force-dns-mapping: true
  parse-pure-ip: true
  override-destination: true
  skip-domain:
    - '+.oray.com'
    - '+.oray.net'

如果是 c2 的, 把 com 域名去掉, 这样写: 

sniffer:
  enable: true
  force-dns-mapping: true
  parse-pure-ip: true
  override-destination: true
  skip-domain:
    - '+.oray.net'
  sniff: #这里我比较激进, 嗅探了所有端口, 以防漏网之鱼
    HTTP:
      ports: [1-65535]
    TLS:
      ports: [1-65535]
    QUIC:
      ports: [1-65535]

为什么 c1pro 的会多一个? 因为在我实际测试中, 如果不加, 在配对的时候添加成功, 但设备重启后无法联网, 在 app 里面就会显示离线. 

另外, 我记得向日葵的插座在通信时连接的不止一个域名, 好像是不定期切换的, 所以我直接用了 +. 来匹配所有, 懒得一个个添加了, 不然三天两头离线. 


如果关闭 override-destination 其实也行, 但我为了防止漏网之鱼, 尤其是伪造域名 sni 请求(比如 cloudflare+浏览器doh 组合而成的 Encrypted Client Hello (ECH), 其实原理也是伪造一个 sni 是 cloudflare-ech.com 有没有子域名具体忘记了, 这样的话, 如果我开启 override, 我的 mihomo 内核就成了一个内网的"墙", 伪造域名的网就不通, 一定程度上拦截了伪造域名, 主要是防国内毒瘤), 所以就打开了. 

提到了 ECH, 那就再讲讲目前 ECH 的实际使用形式, 截至我发文的 2024年12月9号, 必须是浏览器打开 DNS over HTTPS ( DoH ), 然后才能在开启 ECH 功能的网站上使用, 墙看到的就是一个固定的域名(目前是这样的), cloudflare-ech.com, 那这个特征也非常明显, 不排除以后墙掉. 说是 Encrypted 我是质疑的, 这其实是伪造, 和 vless + xtls-rprx-vision 那种伪造是一样的. 只不过后者是个代理协议, 能指定伪装域名罢了. 我测试过, 不能以在路由器上使用 doh 的形式形成 ech, 哪怕是在使用的电脑上设置一个 AdguardHome 服务, 再让它去请求 doh 服务器也不行. 必须是浏览器本身. Google Chrome 或者 Mozilla Firefox 都可以, 中间不能有中介. 如果你的上网环境没有 Mihomo 的保护, 那这个 ech 算是一种保护的手段, 即使不要 ech 只用 doh 也是很好的保护, 但我在局域网内的设备是有去广告和阻止数据收集的需求的, 综上所述, 我选择 override-destination: true 以及不用 Encrypted Client Hello.

星期四, 十月 17, 2024

180 Telegram 养号日记

忘了在哪听说 DC1 的号很容易死, 所以想注册一个 DC1 区的账号. 打算注册后自己日常使用.

2024-09-30 02:31:51, 在 sms-activate 上使用美国真实号码接码注册, 期间私聊了一个检测 dc 区的机器人, 添加了我的大号并互为好友, 并用大号发了消息, 小号回了消息. 二十几分钟就死了. 

2024-10-02 02:10:39 买了一个成品号. 在 sms-activate 的 Ready made accounts 模块下, 购买了合作商 hStock 平台上商家的成品号(直接去 hstock 买或者多选几家这种交易平台货比多家其实也行, 那样更好, 因为我在 sms-activate 有余额不想浪费钱, 所以就以贵一倍的价格买了),  "Canadian Telegram account, including 2fa+session+tdata+json". 
首登信息也就是 session 如下:
Meizu PRO 7 Plus
Application: Telegram Android 10.15.1
System version: 12 (31)
Location: Toronto, Canada, 2024/9/29 at 20:29
二登信息如下:
****(计算机设备名)
Application: Telegram Desktop 5.5.5 x64
System version: Windows 10
Location: ****, Hong Kong, 2024/10/2 at 02:15
三登信息如下:
****(我的某台常用实体安卓手机, 上面登了两个老号, 是一个客户端同时登三个号, 没有多开或分身)
Application: Telegram Android 10.14.0
System version: 13 (33)
Location: ****, Hong Kong, 2024/10/10 at 4:24 (我的 IPv4 和 IPv6 均为代理地址, 是固定的, 二登和三登期间无 IP 变化, 此 IPv4 和 IPv6 地址上还有我的另外两个大号, 日常使用. 另外, 此手机+此双栈 IP 地址上还死过两个 dc1 账号)

哪个时间点干了什么事, 我都会非常详细地写在下面, 如果没写就是没做. 

时间线和流水账:  
2024-10-02 ~02:15, 二登. 改 2FA 密码. (用户名有, 卖号的早就设置好了, 我没动它) 设置了头像、自我介绍. 随便翻了翻设置, 没动. 
期间, 置顶了"收藏夹", 偶尔打开看一下, 然后点 X 关掉, 收进系统托盘(桌面右下角托盘图标). 
2024-10-04 ~16:00, 设置了姓名、退出了电脑版(没有退账号, 只是 Windows 版客户端右键托盘图标的退出), 于 18:24 重新打开.
期间, 时间过了八天, 依旧是偶尔打开看一下, 然后点 X 关掉. 
2024-10-10 04:24, 三登. 三登时安卓客户端要求我必须设置邮箱(注意这里的设置邮箱不是两步验证邮箱), 即这个账号以后是主邮箱号, 而非手机号. 随后收应用内验证码登录成功. 将 隐私 - 谁可以看见我的手机号码 设置为 "不允许任何人", 谁可以通过手机号码找到我 设置为 "我的联系人", 出生日期 设置为 "不允许任何人", "同步通讯录" 在三登时就未开启. 在安卓端搜索 durov 并关注了他的频道, 往上翻了翻频道动态. 在 Windows 端也翻了翻频道动态. 
期间, Windows 端长期挂着, 依旧是偶尔打开看一下, 往上翻翻 durov 的频道动态, 然后点 X 关掉. Android 端日常使用两个大号, 小号偶尔切过来看一下, 同样往上翻 durov 的频道动态. 
2024-10-17 05:38, 换绑手机为 英国某实体卡. 将最早的首登 session 踢下线. 修改了自动终止旧会话的时间为 "3个月". 设置了两步验证邮箱.
2024-10-21 05:35, DC5 大号主动添加其为联系人, 并在 windows 客户端上也添加了 DC5 大号为联系人, 互发了一条消息.
2024-11-01 05:45 使用 @where_is_my_dc_bot 机器人, 并发送自己手机里的一张下载的图片, 来检测自己所在的 DC 区. 返回 DC1 Miami, Florida, United States. (注意, 发图片不要发贴纸 Sticker, 否则会返回错误的地区)
2024-11-05 01:22, 由于把 tdata 误删除, 在二登设备上重新再用 应用内验证码 登录. 登录成功. 随后用手机把之前旧的二登 session 终止会话了. 

 

至此, Telegram 养号我认为就已经完成了, 由于我的大号关注了很多频道, 打算于 2025 年 1 月再操作大批量关注的事情, 并且将会以每天关注 10 个的进度进行. 如果账号正常, 此文将不再更新.


卖号的提供的 Windows 版 tdata 为最简结构, 有这些文件就可以双击打开即可自动登录: 

📂tdata
 ├─📂账号十六位, 16 进制字母数字
 │    └─📄maps
 ├─📄key_datas
 └─📄账号十六位后面跟 s

如果你也追求极简, 日常需要数据迁移时, 带着这些文件走即可. 

==============

又买了一个 DC2 的小号, 懒得记录详细日志了, 说下关键操作. 

2024-11-01 卖家机器注册+2FA启用, 位置 里斯顿-维吉尼亚州-美国, 首登登录机器 win7.
2024-11-02 卖家 tdata 二登登录, 2FA改密码, 位置 巴格达-伊拉克.
2024-11-05 我买到手, tdata 三登, 改名字改头像, 改用户名, 改2FA密码. 位置 香港.
2024-11-07 @where_is_my_dc_bot 检测自己账号所在区, 为 DC2, 属实. 关注 durov 的频道.
2024-11-08 苹果手机四登, 安卓手机五登, 位置为同一 IP 的香港.
2024-11-10 安卓手机上改绑定的手机号为实体手机号.
2024-11-11 大号主动加其联系人并私聊, 小号同时也加大号. 
2024-12-09 没问题, 号没死, 长期在线. 偶尔点开看一眼. 此号同上面那个号一样, 打算于 2025 年 1 月再操作大批量关注的事情, 并且将会以每天关注 10 个的进度进行. 如果账号正常, 此文将不再更新.

现在 DC 1245 都集齐了^_^ (DC3 早已关闭)

星期三, 九月 04, 2024

179 JavaScript 书签, 生成指定位数随机字符密码, 并自动复制到剪贴板

为什么没有用 Bitwarden 自带的密码生成功能呢? 因为这货会存储在历史记录里, 每次还得去清除掉 :'( 


需求和 Bitwarden 一样, 生成一个 18 位的密码(这个可以自己调整), 要求如下:

  • A-Z  (I O 除外, 因为它们容易和 小字母l 和 数字0 混淆)
  • a-z
  • 0-9
  • !?@+-*/=  (这些是手机上常见的符号, 没有加上 # 号是因为 Firefox 有个 Bug, 包含 # 后面的代码中的空格会被转换成 %20, 使用上没影响但是跨浏览器不方便, 所以就把 # 去掉了, 这个 Bug 在 Chrome 上不存在)
  • 这四组必须都要出现至少一次 (也就是说, 密码必定是包含 大小写字母、数字、特殊符号)
  • 点击书签即可生成, 并自动复制到剪贴板中


可读版本:

javascript: (function() {
    function shuffle(array) {
        for (let i = array.length - 1; i > 0; i--) {
            const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]];
        }
        return array;
    }
    function generatePassword() {
        const lowerCharset = "abcdefghijklmnopqrstuvwxyz";
        const upperCharset = "ABCDEFGHJKLMNPQRSTUVWXYZ";
        const numberCharset = "0123456789";
        const specialCharset = "!?@+-*/=";
        const allCharset = lowerCharset + upperCharset + numberCharset + specialCharset;
        let password = [lowerCharset[Math.floor(Math.random() * lowerCharset.length)], upperCharset[Math.floor(Math.random() * upperCharset.length)], numberCharset[Math.floor(Math.random() * numberCharset.length)], specialCharset[Math.floor(Math.random() * specialCharset.length)]];
        for (let i = 4; i < 18; i++) {
            password.push(allCharset[Math.floor(Math.random() * allCharset.length)]);
        }
        return shuffle(password).join('');
    }
    const password = generatePassword();
    const textBox = document.createElement("textarea");
    textBox.value = password;
    document.body.appendChild(textBox);
    textBox.select();
    document.execCommand("copy");
    document.body.removeChild(textBox);
    alert(password);
})();


压缩版本:

javascript:(function(){function shuffle(array){for(let i=array.length-1;i>0;i--){const j=Math.floor(Math.random()*(i+1));[array[i],array[j]]=[array[j],array[i]];}return array;}function generatePassword(){const lowerCharset="abcdefghijklmnopqrstuvwxyz";const upperCharset="ABCDEFGHJKLMNPQRSTUVWXYZ";const numberCharset="0123456789";const specialCharset="!?@+-*/=";const allCharset=lowerCharset+upperCharset+numberCharset+specialCharset;let password=[lowerCharset[Math.floor(Math.random()*lowerCharset.length)],upperCharset[Math.floor(Math.random()*upperCharset.length)],numberCharset[Math.floor(Math.random()*numberCharset.length)],specialCharset[Math.floor(Math.random()*specialCharset.length)]];for(let i=4;i<18;i++){password.push(allCharset[Math.floor(Math.random()*allCharset.length)]);}return shuffle(password).join('');}const password=generatePassword();const textBox=document.createElement("textarea");textBox.value=password;document.body.appendChild(textBox);textBox.select();document.execCommand("copy");document.body.removeChild(textBox);alert(password);})();


注意, 存为书签使用的 JavaScript 脚本不能有注释, 至少 Firefox 不能有, 不然 // 后面的代码会被 urlencode 掉. 

存成书签, 需要使用的时候点击一下就行了, 截至发文之时, Firefox 可以在扩展页内使用(比如 moz-extension:// 或者某个扩展的新标签页), Chrome 必须在正常网页中使用(比如 https:// http://网站).

代码由 ChatGPT 生成, 版本为免费用户的 GPT-4o.