星期六, 四月 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

 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

星期二, 十月 24, 2023

174 clash meta filter 正则表达式 必须出现某节点名, 且不区分大小写. 另外, 不得出现某节点名, 且不区分大小写

因为自己在使用 clash meta 的时候, 有一个需求, 就是必须筛选美国节点, 并排除带有 群组、订阅、通知 字样的节点. 

直接上正则: 

    filter: (?i)^(?!.*(?:群组|直连|官网|群组|通知|套餐|剩余|更新订阅|direct))(?=.*(?:美国|usa)).*$

正则加了i以不区分大小写. 写得像屎山但确实能用. 写在 proxy-groups 中使用, 举例: 

proxy-groups:

  - name: load_balance

    type: load-balance

    use:

      - 1

      #- 2

      - 3

      - 4

    url: https://www.gstatic.com/generate_204

    interval: 300

    filter: (?i)^(?!.*(?:群组|直连|官网|群组|通知|套餐|剩余|更新订阅|direct))(?=.*(?:美国|usa)).*$

    disable-udp: false

    lazy: true

    strategy: consistent-hashing  #round-robin|sticky-sessions


再举例: 

  - name: all_us

    type: url-test

    use:

      - 1

      #- 2

      - 3

      - 4

    url: https://www.gstatic.com/generate_204

    interval: 300

    filter: (?i)^(?!.*(?:群组|直连|官网|群组|通知|套餐|剩余|更新订阅|direct))(?=.*(?:美国|usa)).*$

    disable-udp: false

    tolerance: 0

    lazy: true


用 use + filter + 开lazy 的好处是, 不会对所有节点检测延迟, 减少一些服务器压力, 毕竟这个东西我设置的是每5分钟遍历一次的. 

星期六, 十月 21, 2023

173 小米Max高配版 Mi Max Prime (代号Helium) 刷安卓10 类原生 crDroid 或安卓7.1 类原生 lineage

流程参考了我这篇: 

162 红米k20pro 刷 crDroid 安卓13 取消data分区加密

以及主要参考了 小米MAX(标准版/高配版)免解锁Bootloader刷入LineageOS

mimax没有vendor, 所以只需要刷firmware. 以下是完整流程: 

0, 备份自己的应用数据, 可以使用 neo-backup 来获得几乎等同于以前 titanium backup 钛备份 的备份体验. 并使用多系统工具箱备份字库/基带文件. 侧边栏 - 字库备份和还原 - 备份完整字库(包含完整基带). 为什么要备份完整的字库/基带? 

1, 进入 fastboot, 用 miflash pro 刷入底包:  helium_global_images_V9.2.1.0.NBDMIEK_20171219.0000.00_7.0_global_18678acae5.tgz 如果http的链接速度过慢可以尝试https. 这个服务器好像限速了, 我下载的时候一直是1MB/s的速度. 截至发帖之日, 可以把下载链接中的 bigota.d.miui.com 域名替换为 hugeota.d.miui.com 来实现加速的效果 (如果你在路由器或本地电脑上使用adguardhome, 可以添加规则 bigota.d.miui.com^$dnsrewrite=NOERROR;A;123.6.13.6 来达到hosts重定向的效果, 这比每次下载时改链接省事得多). 

2, 进入 fastboot, 用 bat 刷入twrp recovery, 可以用官方的twrp-3.7.0_9-0-helium.img, 也可以用nijel8的twrp_v323-4_hydrogen-helium_nijel8-MOD.img, 我用了官方的 (本来想去找wzsx150的, 但是他的表格里面没有helium...).

3, 在 recovery 中刷入 firmware, 可以用xiaomifirmwareupdater的10.2.2.0.NBDMIXM, 也可以用nijel8的MIUI Global-9.2.1.0, 我用了9.2.1.0这个, 使用起来没什么问题, wifi/热点/国内运营商/国外运营商/蓝牙/信号/流量... 

4, 在 recovery 中刷入刷机包, 有安卓10的 crdroid 和安卓7.1的 lineage: 

crDroid-6.27-20220217-UNOFFICIAL-Android10.0-helium-XDA-_firewall_.zip

lineage-14.1-20180915-FINAL-UNOFFICIAL-Android7.1-helium-XDA-nijel8.zip

crdroid的安卓10还有gapps的版本, 不太喜欢毒瘤在后台运行, 喜欢谷歌应用的可以去下载带有gapps的zip刷机包. 

crdroid的安卓10刷机包无加密(刷完机进入系统再进入recovery会发现data分区已加密), 所以无需修改 fstab, lineage的不清楚, 应该也没有加密, 但还是建议在第4步和第5步的中间, 在 recovery 中挂载 system 分区, 并检查 /system/system/vendor/etc/fstab.qcom 文件有无加密, 参见我的 162 号文章: 162 红米k20pro 刷 crDroid 安卓13 取消data分区加密. 

5, 下载 magisk 最新版, 并改后缀为 zip 并用 recovery 刷入. (注意: 进入系统后, magisk还会提示 下载启动器/修复 之类的, 照着提示操作就好, 修复选直接安装即可. 对了, 后续如果更新 magisk 建议进入 recovery 刷入, 我的 redmi k20 pro 选的直接安装, 然后无限重启, 又进入 recovery 重新装入 zip 包之后才正常)

magisk 两个常用模块推荐: shamiko 基于 zygisk 的 magisk hide, 能绕过一部分国内sb应用的root检测. lsposed 一个支持高版本安卓的 xposed 框架. 剩下的玩法自己研究吧. 

6, 折腾完测试运行正常后, 记得再次使用多系统工具箱备份基带文件. 侧边栏 - 字库备份和还原 - 备份完整字库(包含完整基带). 


* 如果后面再没有其它大佬接手的话, 安卓10是我目前能找到的、最高能刷到的、最为稳定的安卓版本. 


星期二, 九月 19, 2023

172 关闭 Google Chrome 右键以图搜图在侧边栏打开(Lens), 关闭右键搜索在侧边栏打开, 关闭强制显示的其它书签按钮

chrome://flags/#enable-lens-standalone

chrome://flags/#side-search

chrome://flags/#power-bookmarks-side-panel

三个全关. 

截至发布之日前有效. 当前版本: 117.0.5938.89 (有时候chrome不依赖版本, 有可能是灰度更新. 我中午睡觉起来之后就发现多了个"其他书签"关不掉...)

星期四, 八月 10, 2023

171 Thanox 使用 情景模式, 打开 youtube revanced 自动解冻 microg, 关闭时自动冻结

反感谷歌全家桶, 又大又蠢, 但又想用登录账号的YouTube, 找到了个PureTuber, 发现被骗了, 除了登录账号之外没有一点用处, 个性化推荐没有, 收藏没有, 订阅列表也没有. 

想捡起来revanced重新玩一下, 但这个货需要搭配microg使用, 而且microg必须在后台. 这就太草丹了, 于是我又想起了我的付费"手机管家":thanox, 它的功能有很多, 我主要用来压制毒瘤(划掉卡片即冻结), 它还有个情景模式(英文名profile), 类似tasker, 实现很多触发型任务. 

直接上json代码: 

[

{

"name": "启动YouTube",

"description": "如果开启了YouTube,则关联启动microG. 触发条件: 当revanced切至前台+microg为冻结状态",

"priority": 1,

"condition": "frontPkgChanged == true && to == \"app.revanced.android.youtube\" &&  pkg.isApplicationEnabled(\"com.mgoogle.android.gms\") == false ",

"actions": [

"pkg.enableApplication(\"com.mgoogle.android.gms\")"

]

}

]


还有一段是关闭youtube后冻结microg的:

[

{

"name": "关闭YouTube",

"description": "如果关闭了YouTube,则关联冻结microG. 触发条件: 当revanced卡片划掉",

"priority": 2,

"condition": "taskRemoved == true && pkgName == \"app.revanced.android.youtube\"",

"actions": [

"pkg.disableApplication(\"com.mgoogle.android.gms\")"

]

}

]


感谢: 

https://github.com/Tornaco/Thanox/issues/85

https://tornaco.github.io/Thanox/docs/profile

星期五, 七月 21, 2023

170 上古卷轴online 使用 legendary 启动器启动时提示 启动器接收到令牌错误信息 或者 elder scrolls launcher has received a token error 的解决方法



运行这一行命令: 

netsh winhttp reset proxy

只要显示下面的内容就表示重置成功了↓

当前的 WinHTTP 代理服务器设置: 直接访问(没有代理服务器)。


昨天epic商城上古卷轴网游周免, 就是和GTA5一样的付费网游, 没有时长卡之类的说法. 

epic game launcher epic启动器就是一坨大小为900MB的electron屎山, 所以我用了开源命令行版的legendary第三方客户端. 用法见 github 说明 或者我的 reddit 帖子


原神, 启动!

*.exe launch 4d0ff75b922447649057c237c0bd1545

但是他嘛的加载之后提示 启动器接收到令牌错误信息, 然后卸载重装英文版, 还是一样的报错 elder scrolls launcher has received a token error. 

起初怀疑是 legendary 的 auth 授权问题, 结果发现装了 epic game launcher 那坨屎山之后也是一样, 启动了一会出现黄色小感叹号... 

网上搜索得知是代理或者winhttp的问题. 知乎链接 CSDN链接 感谢他们. 

星期三, 七月 19, 2023

169 clash meta 使用 url-test 进行节点择优, 并使用此节点组成隧道

此前我在博文中写了 167 clash内核/clash meta内核, 机场tunnels隧道 实现绕过机场审计 这篇文章, 利用 clash 的 tunnels 功能, 实现了 自己的宽带网络 <-> 机场 <-> 自己搭的服务器 这种类似简单 tor 网络的功能. 

自己手上有几个机场, 来回选节点有点麻烦, 于是就用 proxy-groups.type: url-test 这个功能来进行择优, url-test组其实机场订阅里经常会看到, "自动选择"就是 url-test, 这个组的选择结果必定是延迟最低的节点, 再用这个延迟最低的节点去和"自己搭的服务器"对接, 形成隧道. 

写法如下: 

proxy-providers:

  1:

  #第一个机场

    type: http

    url: "https://订阅链接"

    path: 1.yaml

    interval: 21600


  2:

  #第二个机场

    type: http

    url: "https://订阅链接"

    path: 2.yaml

    interval: 21600


proxy-groups:

  - name: Tunnels

    type: select

    proxies:

      - 出口1

      - 出口2

      - Proxy


  - name: Proxy

    type: select

    proxies:

      - 机场1-自动选择

      - 机场2-自动选择

      - 机场1

      - 机场2


  - name: 机场1-自动选择

    type: url-test

    use:

      - 1

    tolerance: 0 #这是一个差值, 如果设置成50, 举个例子: 现在内核自动选择的节点延迟100ms, 新一轮测速中有一个节点是50ms, 那将会切换到50ms的节点. 再举个例子, 现在内核自动选择的节点延迟100ms, 新一轮测速中有一个节点是52ms, 那将不会切换到52ms的那个节点. 这个值设置为0和不写这项 其实是没有区别的, 我习惯写上. 

    lazy: true #只测选择相关的, 不会整个机场节点都测速. 比如你在下面用filter筛选出了美国节点, 那url-test就只测这些select相关的, 以及美国节点. 

    url: https://www.gstatic.com/generate_204

    interval: 300

    disable-udp: false

    #这个正则是排除这些节点名的意思, 留作备用 ^((?!(群组|直连|官网|群组|套餐|剩余|更新订阅)).)*$

    filter: 美国 #这里重点提一下, 有时候择优的节点是日本, 延迟很低, 但我的落地服务器在美国, 按照 家宽-国内中转日本的机场-美国落地服务器 的链路来走, 最高速度没变, 但doh这种dns请求, 延迟会高出好多, 所以我filter选出了美国节点, 延迟会少一点. 


  - name: 机场2-自动选择

    type: url-test

    use:

      - 2

    tolerance: 0

    lazy: true

    url: https://www.gstatic.com/generate_204

    interval: 300

    disable-udp: false

    filter: 美国


  - name: 机场1

    type: select

    use:

      - 1

    filter: ^((?!(群组|直连|官网|群组|套餐|剩余|更新订阅)).)*$


  - name: 机场2

    type: select

    use:

      - 2

    filter: ^((?!(群组|直连|官网|群组|套餐|剩余|更新订阅)).)*$


rules:
  #- PROCESS-NAME,com.kiwibrowser.browser,DIRECT
  - IP-CIDR,255.255.255.255/32,REJECT
  - IP-CIDR6,ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128,REJECT
  - GEOIP,PRIVATE,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,Tunnels #注意这里是最终的select

星期三, 六月 28, 2023

168 Spaceship 域名托管至 Cloudflare 并设置 DS(DNSSEC) 记录时踩过的坑 一直在 Propagation 然后失败

懒的截图了, 直接打字吧. 

起因是从某telegram频道得知, spaceship域名服务商注册>6位纯数字xyz域名只需要$0.67. 

我就注册了帐号, 买了个域名, 确实是这个价, paypal支付, 续费目前也是$0.67的价格. 支持dnssec, 隐私也可以全设置成private, whois只能查到一个给你开case的链接.

1, 我先使用的是spaceship自带的dns, 填好了自己A记录的ip之后, 系统就一直在Propagation, 大概有半个小时, 最后的结果是google cloudflare两个全球dns一直是Propagation, 其它地区都正常. 这时候我试了一下223.5.5.5 / 120.53.53.53 / 114.114.114.114 / 1.1.1.1 / 8.8.8.8, 全都返回 SERVFAIL, 我真是R了狗了. 又等了半个小时, 还是这样. 

2, 又托管到了vps的dns上, 结果还是一样. 又浪费了好长时间. 

3, 最后换到了cloudflare上, 然后照着cf的指引加了a记录, aaaa记录, 和dnssec, 但出现了新的问题, Propagation持续了半个小时左右, 然后全都失败了... 再试, 等了半小时继续失败...  这个时候我去查whois, NS记录特码的确实是cloudflare给的啊... 然而cf面板里一直是等待验证... 

4, (解决办法)在spaceship面板里, 切换回spaceship的ns, 然后把dnssec关了(这时候我的a/aaaa等记录已经删干净了, 如果有dnssec也删掉或者关掉), 不用等Propagation, 切换成Cloudflare的ns记录, 如果有dnssec记录, 也都删掉. 然后Cloudflare面板里删掉这个域名, 重新添加. 


等了十几分钟后, Propagation里面Cloudflare已推送成功, Cloudflare面板里也有权限管理了. 

现在再去Cloudflare里面设置dnssec. 

码的, 折腾了一天. 


总结: 当你迁移的时候, 不要留系统默认的或者你自己设置的 DS (DNSSEC) 记录, 等转过去了再设置这些记录.