星期五, 一月 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.

星期二, 八月 06, 2024

178 mihomo (clash meta) 内核在访问 gstatic.com 和 googleapis.com 非大陆域名 / IP 走 DIRECT 直连 的问题

一直使用 openclash + mihomo (原 clash meta) 内核运行在路由器上, 最近似乎规则有些问题, 谷歌的 cdn 总是直连. 过一会又发现它在走代理, 而且基本都是这几个域名: 

ssl.gstatic.com
www.gstatic.com
*.googleapis.com

最早怀疑是 IPv6 的问题, 因为我最近把它打开了, 后面发现不是. 

然后是怀疑 geoip 出了问题, 我用的是 https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat 这个只有 cn 和 private 的 dat, 关键代码如下: 

geodata-mode: true
geox-url:
   geoip: "https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat"
   geosite: ~
   mmdb: ~
   asn: ~

因为它是 dat, 内容不可见, 我就换成了纯文本的 ipcidr + rule-set 的形式, 这种规则的好处是, ip 段可见, 方便排查. 代码如下: 

rule-providers:
  CN4:
    type: http
    path: cn4.txt
    url: "https://raw.githubusercontent.com/gaoyifan/china-operator-ip/ip-lists/china.txt"
    interval: 604800
    proxy: Tunnels
    behavior: ipcidr
    format: text

  CN6:
    type: http
    path: cn6.txt
    url: "https://raw.githubusercontent.com/gaoyifan/china-operator-ip/ip-lists/china6.txt"
    interval: 604800
    proxy: Tunnels
    behavior: ipcidr
    format: text
rules:
  - IP-CIDR,255.255.255.255/32,REJECT,no-resolve
  - IP-CIDR6,ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128,REJECT,no-resolve
  - GEOIP,PRIVATE,DIRECT,no-resolve
  - RULE-SET,CN4,DIRECT,no-resolve
  - RULE-SET,CN6,DIRECT,no-resolve
  - MATCH,Tunnels

像上面这样的配置, 跑了几天, 依旧不行, 有时候使用谷歌正常, 也有时候浏览器在转, 一转我就知道这二币又去直连了:

然而我的 ipv4 段里面, 根本没有 172.217.31.10: 

172.81.192.0/18 = 172.81.192.0 - 172.81.255.255

那特码的就怪了, 没有规则你凭什么匹配成 DIRECT 直连? 排查过 openclash 的运行配置, 和我写的 rules 一样, 就那么几条, 没有加别的.

后来被折腾得烦了, 直接上 rule-set 看看吧, 于是就多加了一段,  代码如下: 

rule-providers:
  GOOGLE:
    type: http
    path: google.yaml
    url: "https://******/google.yaml"  #配置在下面, 自己简单写的, 本地加载的话上面改成 type:file 具体看配置手册
    interval: 604800
    proxy: Tunnels
    behavior: classical
    format: yaml
rules:
  - IP-CIDR,255.255.255.255/32,REJECT,no-resolve
  - IP-CIDR6,ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128,REJECT,no-resolve
  - GEOIP,PRIVATE,DIRECT,no-resolve
  - RULE-SET,GOOGLE,Tunnels
  - RULE-SET,CN4,DIRECT,no-resolve
  - RULE-SET,CN6,DIRECT,no-resolve
  - MATCH,Tunnels

写在了 cn4 和 cn6 (或者是 geoip,cn) 的上面, 观察了几天, 问题解决了, 那几个撒币域名解析的香港地址也不直连了... 

不想去 github 提 issue 了, 我觉得他们肯定也懒得回我😂


以下是谷歌配置 google.yaml: 

payload:
  - DOMAIN-SUFFIX,ytimg.com
  - DOMAIN-SUFFIX,amp.dev
  - DOMAIN-SUFFIX,android.com
  - DOMAIN-SUFFIX,api.ai
  - DOMAIN-SUFFIX,app-measurement.com
  - DOMAIN-SUFFIX,app-measurement.net
  - DOMAIN-SUFFIX,appspot.com
  - DOMAIN-SUFFIX,material.io
  - DOMAIN-SUFFIX,recaptcha.net
  - DOMAIN-SUFFIX,gstatic.com
  - DOMAIN-SUFFIX,google.com
  - DOMAIN-SUFFIX,googleapis.com
  - DOMAIN-SUFFIX,g.co
  - DOMAIN-SUFFIX,flutter.dev
  - DOMAIN-SUFFIX,flutterapp.com
  - DOMAIN-SUFFIX,firebaseapp.com
  - DOMAIN-SUFFIX,firebaseio.com
  - DOMAIN-SUFFIX,blogspot.com
  - DOMAIN-SUFFIX,youtube.com
  - DOMAIN-SUFFIX,youtu.be
  - DOMAIN-SUFFIX,g.co
  - DOMAIN-SUFFIX,withgoogle.com
  - DOMAIN-SUFFIX,googleusercontent.com
  - DOMAIN-SUFFIX,ggpht.com
  - DOMAIN-SUFFIX,googlevideo.com
  - DOMAIN-KEYWORD,gvt
  - DOMAIN-KEYWORD,ampproject
  - DOMAIN-REGEX,^gvt\d\.com
  - DOMAIN-REGEX,^.*\.goog

以上是我根据自己的使用习惯和需求写的, 参考了 https://github.com/blackmatrix7/ios_rule_script/blob/master/rule/Clash/Google/Google_No_Resolve.yaml 但没有完全使用, blackmatrix 作者的这个版本算是懒人配置, 里面还有 cn 域名. 我为了防止自己的服务器送中, 把所有谷歌大陆域名都屏蔽掉了, 还有一些广告域名也是. 规则这个东西, 千人千面, 根据自己的需求来我觉得最好不过了. 

对了, 上面的规则里有正则 DOMAIN-REGEX, ≤1.18.1 的版本是用不了的. 发布博文时, 使用的版本是 1.18.7

星期六, 四月 20, 2024

177 解决 安卓电视盒子 开机后无法联网 的问题

早先买了一个 HK1RBOX R2 安卓电视盒子, 这种外贸盒子的优点是, 任意安卓软件都可以装, 相对电视板载芯片而言, 配置较高, 可以单独换, 电视只当显示器即可. 系统版本还是 a11 的 armv8. 


(不得不提一嘴, 有的安卓盒子芯片是 armv8 的, 但系统不是, 这就 tm 的很草丹了, 比如 魔百盒九联UNT413A 这一款, 一定一定要避雷. 你想想你的电脑, win10 装个 32 位, 肯定不利于以后扩展, 国内应用商店这几年都强制 64 位应用了, 过两年你买这么个破 armv7 系统的盒子就没法装软件了... 系统倒是有 root 但刷机不好刷, 且懒得折腾)


前几天折腾 AdguardHome, 精简掉了一些自己写的规则, 晚上就发现我的电视盒子就连不上网了... 有域名请求, 但就是连不上, 试过: 

1, 卸载重装 adguardhome luci-app, 不行

2, 卸载重装 openclash, 不行

3, 重置路由器设置重新配置, 不行

4, 重置安卓盒子的系统, 不行

5, fakeip 或 redirhost 外加 udp-tun (混合模式), 不行

起初以为是 mihomo (meta) 内核的 fakeip 问题, 最后排查了也不是... 特码的, 局域网里其它设备都能正常联网, 就这破玩意不行...


这时候已经折腾了五个小时, 突然在 metacubex 面板中发现, 家里的一台傻逼苹果设备, 一直在连接 time.apple.com, 几乎是每分钟都有一条新连接, 于是按照这个方向去查了查, 然后才想起来, 之前在精简规则的时候, 把常用 ntp 重定向到阿里云 ntp 的规则删了, 就是这条: 

/(\S*pool\.ntp\.org)|(ntp\.ubuntu\.com)|(\S*nist\.gov)|(time\.cloudflare\.com)|(time[0-9]*\.apple\.com)|(time[0-9]*\.google\.\S*)|(time[0-9]*\.android\.com)|(\S*\.stdtime\.gov\.tw)|(time\.windows\.com)/$dnsrewrite=NOERROR;CNAME;ntp1.aliyun.com

但是我 udp 特码的没有问题啊, discord 网页版, 还有 webrtc 测试, 都是好的... 


也不知道为什么, 总之加上重定向了之后, 就稀里糊涂地把问题解决了.

那为什么时间校准服务影响了盒子联网? 我觉得这类 sb 盒子都是一个德性, 时间校准后, 系统才能 "激活", 一位博主也碰到了同样的问题: 

https://www.monoko.jp/androidtv-activate-online/

感谢这篇文章

星期五, 十二月 29, 2023

176 CCTV 央视视频 获取 m3u8

截至发文之日, 一年之后的 2024年12月21号, 依旧是没有绿屏现象的.

JavaScript: jQuery.getJSON("https://vdn.apps.cntv.cn/api/getHttpVideoInfo.do?pid=" + guid,

function(result) {

    var content = result.hls_url.link(result.hls_url);

    var match = content.match(/<a href="(.*?)">.*?<\/a>/);

    if (match && match.length === 2) {

        var fullUrl = match[1];

        var modifiedUrl = fullUrl.replace(/maxbr=\d+/, 'maxbr=2000');

        var textarea = document.createElement("textarea");

        textarea.value = modifiedUrl;

        document.body.appendChild(textarea);

        textarea.select();

        var successful = document.execCommand("copy");

        document.body.removeChild(textarea);

        if (successful) {

            console.log("文本已成功复制到剪贴板")

        } else {

            console.error("无法复制文本到剪贴板")

        }

        console.log(modifiedUrl)

    } else {

        console.log('error')

    }

});


在 console 里粘贴此代码回车. m3u8 地址会自动粘贴至剪贴板, 感谢 google bard 的帮助. 
根据 网上的方法 修改而来

星期二, 十二月 05, 2023

175 使用 php 提取 clash 订阅中的 proxies (代理节点)

使用时, 传入base64加密的订阅即可, 如

订阅地址: https://123.xyz/api/v1/client/subscribe?token=ffffffffffffffffffffffffff&flag=clash

则获取链接为: 

https://example.com/this.php?url=aHR0cHM6Ly8xMjMueHl6L2FwaS92MS9jbGllbnQvc3Vic2NyaWJlP3Rva2VuPWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmJmZsYWc9Y2xhc2g= 

*注意 php 要 php-yaml 模块

 

<?php

$url = base64_decode($_GET['url']);


$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_HEADER, true);

curl_setopt($ch, CURLOPT_USERAGENT, 'clash.meta');

$response = curl_exec($ch);

$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);

$header = substr($response, 0, $header_size);

$body = substr($response, $header_size);

curl_close($ch);


if (preg_match('/^subscription-userinfo: (.*)$/mi', $header, $matches)) {

    $user_info = trim($matches[1]);

    header("Subscription-Userinfo: $user_info");

    //header("Content-Type: text/html; charset=UTF-8");  //如果显示有乱码就把这行打开

}


$yaml = yaml_parse($body);

$proxies = $yaml['proxies'];

echo yaml_emit(['proxies' => $proxies]);

?>  

中间那段 subscription-userinfo 的作用是, 如果订阅中 (v2board) 有这个请求头, 会一并获取回来, 可以获取剩余流量信息, 最终效果是能在客户端中展示, 如我用 metacubexd 面板, 就会展示在其中. 

使用脚本获取订阅的原因是, 有些机场写了大量规则, 好几兆, 自己有写rules所以根本用不到, 所以用php做一个过滤, 感谢老友帮忙写php