星期五, 十二月 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) 记录, 等转过去了再设置这些记录. 

星期日, 六月 18, 2023

167 clash meta mihomo 内核, 机场 tunnels 隧道 实现绕过机场审计

前置条件1: 有自己的非大陆服务器, 网络质量较好(不需要 大陆-服务器 的, 是服务器本身的网络质量). 
前置条件2: 稍微懂点linux命令. 
前置条件3: 使用clash内核/clash meta内核访问网络, 如路由器, 台式机, 安卓手机等. 
前置条件4: 对netflix spotify等流媒体无解锁需求. 如果有需求, 需写规则rules. 


老友前几天发来两个链接, 讲的是 clash relay 和 tunnels. 
https://luxirty.com/article/chain-proxy-powered-by-clash-tunnels
relay无法中转udp流量, 新的tunnels能解决这个问题. (20240813 更新: 此说法有误, 根据文档, relay 支持传输 UDP,前提是代理链的头尾节点都要支持 UDP over TCP。目前支持 udp 的协议有 vmess/vless/trojan/ss/ssr/tuic)

最终能实现这种效果: 
1自己的网络 <-> 2机场 <-> 3自己搭的服务器
这中间有三环, 中间都是加密的, 所以可以无视机场审计. 有点类似tor那种网络, 但简单一些. 

为什么可以绕过机场审计? 
因为12会有机场审计, 但机场得到的 将要去连接的地址 全都是3. 而3是自己搭的肯定不会有审计. 

我用的是clash meta内核, 不管是路由器上, 我的windows电脑上, 还是已root过的安卓手机上. clash meta内核相较clash premium那些分支, 一些设置比较人性化, 之前的博文也提到过. 
所以这篇文章就只写clash meta内核的, 当然, 其它clash内核也可以用, 因为tunnels节点不是clash meta的专属功能. 如果你使用cfw这样的客户端, 应该也能实现, 你得写到mixin里面试试. 


一、服务端
先把服务端搭好, 就是 [3自己搭的服务器] 这部分. 服务端我也直接用的是clash meta的内核, 当然用v2ray内核也可以. 

1) 从releases中下载符合自己服务器架构的版本: https://github.com/MetaCubeX/Clash.Meta/releases 我倾向于下载带版本号的版本, 而不是alpha版本. 另外服务器或老电脑可能要用 -compatible 版本, 作者wiki我该使用哪个版本
我下载了 clash.meta-linux-amd64-compatible-v1.14.5.gz 文件. 

2) 解压之后, 把clash这个文件上传到服务器的一个位置, 如 /root/clash下. 

3) 下载geoip.dat文件. 我推荐精简版本. 
完整版: https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip.dat 完整版其实用不上, 因为服务器端就只是作为一个出口, 无脑获取数据并传递给机场即可. 
改名为GeoIP.dat并传到服务器的 /root/clash下. 这个文件夹下现在就有两个文件了. 注意clash文件的执行权限要给. 
4) 在这个目录下新建一个config.yaml 里面写的是服务端的配置. 
log-level: error
#socks-port: 853
#allow-lan: true
#bind-address: 0.0.0.0
#authentication:
#- users:password
geodata-mode: true
geox-url:
  geoip: https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat
listeners:
  - name: myvmess
    type: vmess
    port: 853
    listen: 0.0.0.0
    users:
     - username: 1
       uuid: ff7b825c-0b86-456d-9e93-412f90846552
       alterId: 0
       udp: true
       cipher: auto
dns:
  enable: true
  nameserver:
    - 'https://8.8.4.4:443/dns-query'
    - 'https://8.8.8.8:443/dns-query'
  default-nameserver:
    - '8.8.8.8'
    - '8.8.4.4'
rules:
  - GEOIP,PRIVATE,REJECT
  - MATCH,DIRECT

上面有五行注释起来了,  这五行的意思是, 公网开放一个socks5端口, 但是这种代理方式无加密, 我实际测试发现无法绕过机场审计. 用vmess就可以, trojan没试. 
如果你只需要socks5, 那就把整段listeners全部删掉. 如果你需要vmess或者其它加密代理, 那就把上面那五行注释删掉. 
你可以进行第5步了. 

*老友还测试过vmess+grpc trojan+grpc, 得出的结论是vmess下载最快, 两个grpc速度(千兆宽带)不到50MB/s, 但延迟较低. 如果你需要grpc, 请搜索 network: grpc 和 grpc-opts

5) 创建一个systemd服务, 以实现clash服务端在开机时能自启动. 
进入/etc/systemd/system/文件夹, 新建一个文件, 起名为clash.service 这个clash就是服务的名字. 自己也可以换成别的如meta.service
文件内容如下, 如果改动了clash文件夹的位置, 注意修改ExecStart: 
[Unit]
Description=clash
After=network.target
[Service]
ExecStart=/root/clash/clash -d /root/clash
WorkingDirectory=/root/clash
Restart=always
[Install]
WantedBy=default.target

然后打开控制台, 执行
systemctl daemon-reload

并设置clash服务为开机自启: 
systemctl enable clash

启动clash服务: 
systemctl start clash
或者
service clash start

启动后可以通过 netstat -lntp 命令来看 配置文件中指定的853端口 是否已经开启. 
*如果开启成功就进行下一步, 如果没开启成功, 去/var/log/下打开syslog文件, 翻到最底下来看clash内核的报错提示. 

6) https://github.com/MetaCubeX/Clash.Meta/releases 下载适合自己电脑/路由器/安卓手机的版本. 电脑启动靠bat手动运行(有黑框不能关)或者alwaysup小工具创建服务(无黑框)自启, 路由器用openclash调起内核运行, 安卓手机有clash meta for magisk, 之前的文章提到过这个magisk模块, 就不多讲了. 将主程序放到正确的位置后, 开始config.yaml配置: 

#port/tun/dns等配置, 根据自己的需求来写, 不一定要和我的一致. 下面是win10电脑的演示配置
mixed-port: 0
port: 0
redir-port: 0
tproxy-port: 0
socks-port: 0
allow-lan: false
bind-address: 127.0.0.1 #'*'
mode: rule
log-level: silent
ipv6: true
external-controller: '127.0.0.1:90'
secret: 'yacd_is_my_Password1'
external-ui: dashboard
enable-process: false
geodata-loader: standard  #memconservative #standard
geodata-mode: true
geox-url:
  geoip: https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat
  geosite: ''
  mmdb: ''
unified-delay: true
sniffer:
  enable: false
profile:
  store-selected: true
  store-fake-ip: false
dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 192.168.255.1/24
  nameserver:
    - tcp://127.0.0.1:53
  default-nameserver:
    - 223.6.6.6
  proxy-server-nameserver:
    - https://1.12.12.12:443/dns-query
    - https://120.53.53.53:443/dns-query
tun:
  enable: true
  stack: gvisor
  device: tun
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - 192.168.255.2:53
#演示配置结束, 上面的内容仅供参考. 下面才是重点:

proxies:
  - name: "隧道"
    type: vmess #类型和服务器端保持一致
    server: 127.0.0.1 #就是127.0.0.1, 别改成自己的服务器
    port: 7777
    uuid: ff7b825c-0b86-456d-9e93-412f90846552 #和服务器端保持一致, 下面两个参数也一样
    alterId: 0
    cipher: auto
    udp: true #一定要加, 不然udp会直连, 踩过的大坑

tunnels:
  - network: [tcp, udp]
    #127.0.0.1别动, 端口号要和上面proxies里的port保持一致. 
    address: 127.0.0.1:7777
    #下面写你自己建的服务器:端口, 不要管协议, 协议在上面proxies"隧道"里, 它会带着协议那些参数进隧道,  这里就只写你自建的服务器:端口
    target: 1.1.1.1:853
    proxy: Proxy

proxy-providers:  
  机场1:
    type: http
    url: "机场的订阅链接https://blabla"
    path: 1.yaml
    interval: 21600
    health-check:
      enable: false
      url: https://www.gstatic.com/generate_204
      interval: 300
  机场2:
    type: http
    url: "第二个机场的订阅链接https://blabla"
    path: 2.yaml
    interval: 21600
    health-check:
      enable: false
      url: https://www.gstatic.com/generate_204
      interval: 300

proxy-groups:
  - name: Tunnels
    type: select
    proxies:
      - 隧道
      - Proxy

  - name: Proxy
    type: select
    proxies:
      - 机场1
      - 机场2

  - name: 机场1
    type: select
    use:
      - 1
    filter: ^((?!(直连|官网|群组|套餐|剩余|更新订阅|截止|邀请)).)*$  #剔除这些关键词的节点

  - name: 机场2
    type: select
    use:
      - 2
    filter: ^((?!(直连|官网|群组|套餐|剩余|更新订阅|截止|邀请)).)*$

rules: #根据自己的喜好添加规则
  - IP-CIDR,255.255.255.255/32,REJECT  #给AdGuardHome拦截广告用的, AGH返回255的ip, clash reject阻断, 不然clash会认为是劫持, 会将广告域名流量拉进代理导致去广告失效. 之前的博文提到过这个大坑. 如果没有自建的dns则不需要这条, 删掉即可
  - OR,((GEOIP,PRIVATE),(GEOIP,CN)),DIRECT  #局域网或CN直连
  - MATCH,Tunnels

看起来很复杂, 也确实很复杂, 当初还不懂的时候能给我绕晕.. 

proxies这里只写了一个127.0.0.1, 并带上了自建服务器中的type, cipher, alterId, uuid这四个参数, 它们要带进隧道的, 所以要和自建服务器的保持一致, 别写错了. 因为两个博主都没提到这个事, 搞得我折腾了很久也没搞定, 感谢老友帮忙.

proxy-providers没什么好说的, 就是自己的订阅链接, 如果自己只有一个机场, 那就只写一组即可, 把机场2那组删掉. 

proxy-groups, 第一层Tunnels可选隧道还是直接走机场. 当自己的服务器挂了或者不想用隧道了, 就可以选Proxy改为走机场了. 
第二层Proxy是选机场的, 如果上一层选了隧道, 那这里就是, 选择指定的机场和自己的服务器进行连接. 
第三层可以选机场里的节点. 

这三层就完全实现了, 在隧道和机场切换(开关隧道), 并能指定哪个机场中的哪个节点 和自己的服务器进行链接. 

连上路由器ssh, 用 netstat -an 看了下出站情况, 目的地都是机场的国内服务器. 完美. 提醒一句, 机场落地(梯子节点)建议选和你自建的服务器相同的国家/地区, 如: 自己搭的服务器在新加坡, 那么机场节点也选择新加坡, 距离近的看不出多少差距, 但速度确实能有很大的提升. 可以试试远的, 例如美国或者英国这种, 就能明显地看出速度和延迟上的差异. 

搞定, 收工!

星期五, 六月 16, 2023

166 Beelink GK55 BIOS 固件 v5.1 (包含视频和文本教程) beelink gk55 bios firmware v5.1 (tutorial mp4+pdf included)

装成洋大人发邮件才要来的, 直接问大陆客服, 随便糊弄几句就没声了...

邮件原文:

Hello there.

Thanks for your letter and sorry for the trouble.

Does your PC work? If not, you can flash BIOS. 

Here is the BIOS File----https://beelink.oss-cn-hongkong.aliyuncs.com/MINI%20PC/GK55/BIOS%E5%92%8CEC/GK55DDR4_v5.1bios.zip

Here is the Tutorial-----https://mega.nz/file/zzo2zRpD#cv7PEz299rng-MBsTisYRGxrIJodoeXgq_CIz90tu4k

I hope it can help you and look forward to your feedback

If you have any questions, please feel free to let us know.

Best regards!

Yuki

support-pc@bee-link.com


刷写可以通过引导启动和Windows系统两种方式. 如果链接失效了, 可在本博客顶部的网盘附件中下载. 

我自己测试通过引导启动是刷写成功的. win系统内刷写未测. 

星期三, 六月 14, 2023

165 telegra.ph 的反盗链问题

经常从telegram电脑版点出来telegra.ph的链接,  微信公众号和小红书都会屏蔽掉telegra.ph的引用...

其实把 request header 请求头 里的 referer 值去掉就行了, 这时候就要用到chrome扩展 header editor 了. 这个扩展可以修改请求头响应头, 还有取消和重定向请求之类外的操作. 支持正则和URL匹配. 

github: https://github.com/FirefoxBar/HeaderEditor

chrome web store: https://chrome.google.com/webstore/detail/header-editor/eningockdidmgiojffjmkdblpjocbhgh

三年没更新了, 不过这种东西也不需要更新. 

照图配置: 



附上正则(match rules):

https:\/\/.*\.qpic\.cn\/.*

https:\/\/.*\.xiaohongshu\.com\/.*


header value可以留空, 但我为了更真实一点, 我写了referer请求头:

https://mp.weixin.qq.com/

https://www.xiaohongshu.com/


效果如图, 1微信公众号, 23小红书图片和视频. 






对了, 小红书视频如果不是 *.xiaohongshu.com 而是什么xhscdn的话, 可以举一反三嘛. 加一条header的事情. 


164 GTA5 rockstarservice.exe 无限重启, 服务自动删除自动启动, 提示 "Rockstar Games 库服务连接失败。"

我的文档\Rockstar Games\Launcher\launcher.log 报错日志:

[2023-06-14 00:19:22.788] [WARNING] [bgsvc] [svc_transactionqueue] 1 transaction(s) are timing out when sending ping.

[2023-06-14 00:19:22.788] [WARNING] [bgsvc] [svc_transactionqueue] Service timed out.  1 queued transaction(s) timed out, 1 queued transaction(s) total.

[2023-06-14 00:19:22.790] [WARNING] [bgsvc] [svc_transactionqueue] Service timed out.  1 queued transaction(s) timed out, 0 queued transaction(s) total.

[2023-06-14 00:19:22.796] [WARNING] [bgsvc] [svc_transactionqueue] Service timed out.  1 queued transaction(s) timed out, 0 queued transaction(s) total.

[2023-06-14 00:19:22.798] [WARNING] [bgsvc] [svc_transactionqueue] Service timed out.  1 queued transaction(s) timed out, 0 queued transaction(s) total.

[2023-06-14 00:19:22.800] [WARNING] [bgsvc] [svc_transactionqueue] Service timed out.  1 queued transaction(s) timed out, 0 queued transaction(s) total.

[2023-06-14 00:19:22.802] [WARNING] [bgsvc] [svc_transactionqueue] Service timed out.  1 queued transaction(s) timed out, 0 queued transaction(s) total.

[2023-06-14 00:19:22.804] [WARNING] [bgsvc] [svc_transactionqueue] Service timed out.  1 queued transaction(s) timed out, 0 queued transaction(s) total.

[2023-06-14 00:19:22.805] [ ERROR ] [Main ] [svc] Service was requested to restart, restarting!

[2023-06-14 00:19:22.805] [WARNING] [Main ] [svc_transactionqueue] Failing all transactions due to error with the service!

[2023-06-14 00:19:22.805] [ ERROR ] [Main ] [svc_mem] Service reports allocation failure.

[2023-06-14 00:19:22.805] [ ERROR ] [Main ] [svc_mem] Allocation failure during service initialization.

[2023-06-14 00:19:22.805] [ ERROR ] [Main ] [launcher] Failed to allocate shared memory.

[2023-06-14 00:19:22.805] [ ERROR ] [Main ] [error] ************************************************************************

[2023-06-14 00:19:22.805] [ ERROR ] [Main ] [error] * Setting error condition

[2023-06-14 00:19:22.805] [ ERROR ] [Main ] [error] * Category:  1   (ERROR_CATEGORY_LAUNCHER)

[2023-06-14 00:19:22.805] [ ERROR ] [Main ] [error] * Code:      159 (0x9f)

[2023-06-14 00:19:22.805] [ ERROR ] [Main ] [error] * Extra:     

[2023-06-14 00:19:22.805] [ ERROR ] [Main ] [error] * Localised: Rockstar Games 库服务连接失败。如果您一直遇到这个错误,请通过 https://support.rockstargames.com/hc/zh-cn 与 Rockstar Games 客户服务人员联系。

[2023-06-14 00:19:22.805] [ ERROR ] [Main ] [error] ************************************************************************

[2023-06-14 00:19:22.805] [ ERROR ] [Main ] [launcher] Displaying error message: Rockstar Games 库服务连接失败。如果您一直遇到这个错误,请通过 https://support.rockstargames.com/hc/zh-cn 与 Rockstar Games 客户服务人员联系。

[2023-06-14 00:19:23.920] [WARNING] [Main ] [svc] Error starting service! (exit code 1)

[2023-06-14 00:19:26.923] [DISPLAY] [Main ] [svc] Starting service (attempt 2 / 3)...

[2023-06-14 00:19:27.024] [WARNING] [Main ] [svc] Error starting service! (exit code 1)

[2023-06-14 00:19:27.313] [DISPLAY] [Main ] [launcher] Shutdown requested: true, false

[2023-06-14 00:19:27.330] [DISPLAY] [Main ] [launcher] StartShutdown - Now in progress

[2023-06-14 00:19:27.347] [DISPLAY] [Main ] [app] Application quit requested (exit code: 0)

解决方法如图所示, 在服务中指定为当前帐户即可. 如果无密码帐户报错就设置个密码. 点确定完了记得重启服务. 手动自动无所谓. 

垃圾启动器...玛德, 我前面被这个萨比问题气到卸载, 装的盗版重温剧情, 今天线上更新, 又重装rockstar launcher, 问题依旧, 折腾了半天终于解决了, 感谢 reddit/u/jcbastosportela

来源: reddit/r/GrandTheftAutoV_PC

星期三, 三月 22, 2023

163 类原生 安卓13 webview, 将 com.android.webview 转换为 com.google.android.webview

装了个lineageos改的安卓类原生, 名叫 crdroid, 都用了快一个月了, 今天才发现webview包名是 com.android.webview, 我服了, 这就说明我没法直接用apk更新成 google play 上的 webview. 

方法有两种, 第一种是安装 lineageos 自己维护的, 但是更新较慢, 可能一个大版本才更新一次.  webview: https://www.apkmirror.com/apk/lineageos/android-system-webview-2/


第二种是利用 adb shell settings 将 webview 提供者改为 com.google.android.webview. 

在电脑上的adb命令行中输入
adb shell settings put global webview_provider com.google.android.webview


或者在手机命令行(如MT文件管理器)中输入
sudo
settings put global webview_provider com.google.android.webview

put完以后, 可以用get查询一下: 

adb shell settings get global webview_provider
settings get global webview_provider

如果返回的是 com.google.android.webview 就说明改好了. 它这个更改是长期的, 不会重启后丢失. 


还有一种办法是反编译改 /system/framework/framework-res.apk -> res/xml/config_webview_packages.xml , 用MT改, 改完不要自动签名. 
但是我发现这种方法并不适用 类原生 crdroid android 13, 因为在这个xml中, stable beta dev canary aosp 这五个版本都存在, 且都为true. 而且还有签名信息. 

如果你在使用第二种方法的时候安装完重启之后, 在 开发者选项 - webview实现 里面看不到新版本, 也有可能是签名的问题, 不是核心破解的那种签名, 我的理解是, 你的webview apk的签名和framework res xml里的签名对不上, 所以不显示, 我的就是这种情况. 从apkmirror下载的200MB的111核就不行, 从apkpure下载的xapk用MT转换成apk的也不行, apkpure直接下载的apk包(armv7+v8)的就可以. 


这篇博文中提到的方法均参考自 https://gitee.com/akenclub/android-web-view 感谢作者提供的方法, 终于能用上 google play 的 webview 了!

星期六, 三月 04, 2023

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

下载firmware V12.5.6.0.RFKCNXM, https://xiaomifirmwareupdater.com/firmware/raphael/
下载android 13 rom, https://crdroid.net/raphael/9
下载magisk 25.2, https://github.com/topjohnwu/Magisk/releases, 把下载的apk改名为zip就是magisk刷机包了. 

1, 把 firmware, rom, magisk 三个zip包复制到 /sdcard/ 下面. 

=====双清+刷入系统↓=====
2, 进twrp recovery, 格式化data分区. 

3, 按照 1firmware, 2rom 的顺序, 把zip包依次刷入, 3magisk先不刷. 

=====取消data分区加密↓=====
4, 在twrp的界面中挂载vendor分区. 然后在电脑上打开adb, 进入 adb shell. 
cp /vendor/etc/fstab.qcom /sdcard/
然后再把fstab.qcom拷出来, 用adb的push取出文件也行. (提一嘴, 这和本文无关.一些老emmc设备好像都没有加密, 我的mimax安卓10和mi6x安卓11都没有加密)

5, 把拷出来的fstab.qcom文件打开, 找到 /data 段, 可能有两条. 一条ext4一条f2fs, 去掉
,fileencryption=ice
,fileencryption=ice
这两条, 注意逗号, 别出现两个逗号连在一起的情况了. (许多教程连后面的什么wrappedkey也带上了, 我实际测试发现只需要把fileencryption参数去掉即可, 在twrp下, data分区可以挂载, 也可以操作里面的文件. 如果加密的话, twrp无法挂载data, 挂载界面勾不上 ☑ Data )


然后放在sdcard下, 用命令拷回去. 或者用push也行. 



完成之后可以用cat看一眼, 
cat /vendor/etc/fstab.qcom

6, 继续在adb shell里输入代码. 
echo 'KEEPFORCEENCRYPT=false' >>/cache/.magisk
回车
echo 'KEEPVERITY=false' >/cache/.magisk
回车

7, 回到手机上, 在twrp里安装magisk包. 完成后重启系统. 

8, 在下一步下一步设置引导完成之后, 进入 设置-安全-更多安全设置-加密与凭据 这里, 查看"加密手机"的状态, 应该是"手机未加密"了. 

更新系统之后, 在重启之前需要重新修改一遍, 用MT文件管理器等有root权限的改. 不然就会出现 Can't load android system. Your data may be corrupt.

=====刷机完毕=====

为什么不用twrp (wzsx150版)里面的取消强制加密? 因为这个刷机包在操作过这项之后, 会卡在第一屏, 动画一直转但进不去系统. 所以花了一下午时间捋顺了手工修改的方法. 

星期日, 一月 15, 2023

161 clash meta windows 内核, 以服务模式运行

前面的文章提到, meta内核一些方面做得很好, 比如代理服务器可以单独配置dns来解析, rules provider的url域名, 也可以根据rules判断规则进行解析. 这货也有十分气人的地方, 那就是以服务模式运行. 

最近一直在研究clash, 包括premium和meta两个分支. 最后选择了meta, 但是这货以服务运行一直有问题, 有大问题...

我倾向于把meta核做成系统服务, 因为服务可以在用户登录windows前运行起来, 而开机自启项不行, 必须是用户登录后.

如果直接写一个sc, 带上meta.exe和配置文件目录.\data, 它会在运行了几分钟之后闪退(我的yaml配置没有任何问题)

sc create "1meta" binpath= "%~dp0meta.exe -d \".\data\"" start= auto displayname= "1meta" type= own error= ignore

如果我写一个独立的exe, 让这个独立的exe注册为服务, 每次开机把clash meta内核调起来, 那么会有两种情况: 
要么我的独立exe无法调起meta内核, 就这样一直几M的内存占用; 

要么就是他妈的调起来meta内核, 内核1GB+的内存占用;

尝试用clash for windows 的 service.exe 小工具注册服务, 问题依旧. 
尝试用 administrator 身份以服务方式自启独立exe或者meta内核, 问题依旧. 
尝试把服务注册成 start= delayed-auto (延迟自启动), 有时候行, 有时候不行, 而且这个等的时间太长了. demand (手动) 这个也不行. 
尝试把服务注册成 type= share 也不行. 服务名后面还会出现几位随机字符. 


我怀疑过自己写的独立exe有问题, 但又能有啥问题... 就三行代码, 两行引用库, 一行执行进程(非shell), 在登录进系统之后, 双击这个exe都能正常运行. 


为啥clash meta以服务模式运行做不好, 我怀疑是这货在静默状态(loglevel: silent)依旧进行初始化时的日志输出.

最后找到了个工具 AlwaysUp, 有点类似 linux 的 supervisord, 守护进程监控的一款软件, 简单配置一下就行. 以管理员身份运行, 不要以默认的system身份运行. 没错, 权限要低一点, 不然抽风... 另外, 建议把内存占用监控打开, 还有开机后等待x秒后再运行, AlwaysUp这个破解版很多, 有注册机, 自己找吧. 发几张截图: 





守护服务的进程占用也就4MB左右. Clash meta 进程占用约40-50MB左右. 

我也不知道为什么用了一个工具它就正常了... 总之凑合用吧, 额外4MB内存的服务自启项我还是给得起的. 


当前clash meta内核版本号: 1.14.1

160 安卓手机 clash meta for magisk 和 adguard home magisk 组合使用, 以及 config.yaml 的常用参数解释

最近研究代理工具上瘾, 其实也是为了更好地上网😂 前面研究了 clash for windows mixin 的多机场切换, 昨天研究了安卓如何不开 vpn 进行上网. 因为不想在前台挂一个软件, 还有小锁的图标. 

于是就发现了 clash for magisk. 其实 cfm 有两种, 一种是原始的核, 好像叫 premium, 还有一个就是本文所讲的 meta 核了. 

我发现 meta 核相较 premium 核多了很多功能, 参见完整配置示例:
https://docs.metacubex.one/example/ex1 

比如, 

1, dns.nameserver 支持 doq

2, dns.fallback 支持 group, 新手看着可能很奇怪, 举个例子就知道了: 🔰国外流量

3, dns.fallback-filter 支持 geosite , 你可以在这多加个 geosite: geolocation-!cn 让非 cn 的域名走 fallback dns.

4, dns.proxy-server-nameserver, 是指如果梯子节点是域名的话, 用此 dns 来解析. 这个就非常实用了, 因为最近研究的这么多机场, 基本节点服务器都是域名. 

5, proxy-groups.filter, 这个是支持正则表达式筛选的, 可以非常方便地筛掉带 "官网, 群组, 直连" 之类无用的节点. 

6, rule-providers.url 支持走代理访问, 有些规则比如去广告的, 或者 google 的, 一整个列表以订阅的方式获取, 这个 url 可能来自 githubusercontent 或者别的被屏蔽的域名, 这时候 clash meta 会自动从 rules 里判断此 url 是否该走代理. 


以上是我这次研究总结出的 meta 核的亮点. 看得云里雾里的是吧, 我写这篇文章的目的就是为了避免谁再折腾 cfm 折腾十几个小时才有结果. 


clash meta for magisk 是利用 tun 网口来实现代理的(在 clash meta for magisk 开着时, 不能开启 vpn 工具, 比如 httpcanary), 我在 telegram 频道和 github 上找了一些 cfm 但效果都不满意, 有的模块完全就是大杂烩, 在我手机上装完 cpu 直接起飞了... 我的需求是 clash for magisk 能正常运行, 并且和我的 dns, 也就是 adguard home magisk 正常对接. 我的 ahm 里面做了分流, 国内的域名写了个名单, 走国内的 dns over https, 国外的域名和我没有维护的域名, 全部走谷歌的 doh, 也就是 https://8.8.8.8/dns-query https://8.8.4.4/dns-query. 解析出来以后, 该直连的直连, 该代理的代理.

流程图如下图所示, 分流的同时保护了自己的隐私: 


难点就在于, 8888这个doh如何也走代理. 所以要用到 clash meta for magisk 的 tun, 类似你在 clash for windows 见到的 tun 模式, 打开后, 系统网卡列表里面会多出一个 clash tunnel. 那么安卓手机上也是一样, 会在 ifconfig 网卡列表中多出一个可以自定义名称的 tun 网口. 下面我把配置贴出来. 大家使用的时候用在线的 yaml 检测工具检测一下语法, clash meta 出问题可能就是因为空格没对齐. 

注意下面的配置是 meta 的, 我不想用 premium 之类的核因为它的部分功能不全, 之前已经列出来过几条. 下面的配置代码中, meta 专属配置我也会备注. 

第一段配置: 

mixed-port: 0 #在安卓手机上, 这些端口都可以不用开
port: 0
redir-port: 0
tproxy-port: 0
socks-port: 0
allow-lan: true #允许局域网, 可以关掉. 当然如果你有usb共享/热点共享的需求, 可以打开. 
bind-address: '*' 
mode: rule #规则模式, 下面的rules节点要自己维护. 
log-level: error #日志记录级别error, 调试的时候可以写成 debug, 调试完记得改回来
ipv6: false #不开ipv6
tcp-concurrent: false #meta专属配置, 如果dns返回多个IP, 将全部并发连接, 最终选择握手最快的IP进行连接. 访问CDN会给机场造成压力, 我关了
unified-delay: true #meta专属配置, http204的真实延迟时间检测, 经过测试和与adguardhome返回结果的时间对比, 打开更准确一些. 感谢大佬的帮助. 参见adapter/adapter.go的代码"unifiedDelay". 
geodata-mode: true #meta专属配置, true使用.dat, false使用.mmdb
geodata-loader: memconservative #geodata载入内存用小内存模式还是标准模式, 标准模式就换成 standard 我的geoip只有170多K, 也不用geosite, 所以测试看不出两者差距. 
geox-url: #meta专属配置, 自定义geo的更新地址. meta默认是完整版, 我只需要geoip精简版, private和cn就够了. 
  geoip: https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat
  #mmdb: https:// #指定mmdb的
  #geosite: '' #如果不需要, 可以强制留空, 就写两个单引号
external-controller: 127.0.0.1:9090 #浏览器访问http://127.0.0.1:9090/ui来管理
external-ui: clash-dashboard #你安卓手机clash目录下的管理面板网页的文件夹,是一些html和js, 可以下载meta专用的yacd.
#tcp-concurrent: true #meta专属配置, tcp并发连接, 作用自己看完整配置示例
#enable-process: true #meta专属配置, 允许进程名, 配合下面的rules使用, 可以分应用来写rules规则. 
sniffer:
  enable: false #meta专属配置, SNI嗅探我没开, AdguardHome应该够用了. 
profile:
  store-selected: true #保存上次使用的节点, 文件会存在clash配置目录的cache.db中
  store-fake-ip: false #保存fake-ip地址, 用不上这个功能. 因为我的dns和adguardhome对接
dns:
  enable: true
  listen: 127.0.0.1:5335 #我的adguardhome magisk
  nameserver:
    - 127.0.0.1:5353 #我的adguardhome magisk
  default-nameserver:
    - 223.6.6.6 #只能是IP, 且不能是IP形式的doh dot doq等. 此功能用不上, 它是用来解析域名nameserver的, 如https://doh.pub/dns-query, doh.pub是域名, 所以要用到223.6.6.6解析出IP来. 我上面已经是IP了, 不用解析, 所以用不上. 
  #fallback: #fallfack用在这种场景, nameserver和fallback同时解析, 前面nameserver返回的IP不是CN的时候就会取fallback里的IP, #Proxy是下面第二段里走代理的 group name. Fallback 用不上, 因为我adguardhome magisk的8888走tun代理访问, 无劫持. 
  #  - 'https://8.8.4.4:443/dns-query#Proxy' #走代理
  #  - 'https://1.0.0.1:443/dns-query#h3=true' #强制开启HTTP/3
  #  - 'https://8.8.8.8:443/dns-query#Proxy&h3=true' #走代理且强制开启HTTP/3
  #fallback-filter: #dns 是无污染的 adguardhome magisk 8888, 所以用不上
  #  geoip: true
  #  geoip-code: CN #当nameserver解析到的IP不是CN时, 再走fallback
  #  geosite: 
  #    - 'geolocation-!cn' #meta专属配置, 当geosite对应的国家不是CN时, 再走fallback
  proxy-server-nameserver:
    - https://120.53.53.53/dns-query #当下面节点服务器是域名时, 走这个dns来解析
tun:
  enable: true
  stack: gvisor #system和gvisor, 当在手机上ifconfig无法看到tun网口时, 可尝试另一种. 也可以试试lwip, 这个lwip是meta专属参数
  device: tun #ifconfig里面可以看到的网口名
  auto-route: true #meta专属配置, 自动路由,这块我不懂,照着默认配置来就行
  auto-detect-interface: true #自动检测网口, 当你切换至流量/wifi时, 以及usb共享/热点共享, tun能自动识别上网的网口. 
  dns-hijack: #dns劫持, 设置成0.2可以和adguardhome magisk一起使用, adguardhome magisk 在 iptables NAT 上转发 53 至 adguardhome 的 5353端口, 这个hijack 和 adguardhome nat 转发没有冲突. 如果有问题可以尝试下面两个, 我对这块也不懂😂
    - 198.18.0.2:53
    #- 198.18.0.1:53
    #- any:53


#部分参数甚至官方文档也没有提及, 从代码里可以大致看到其作用: config/config.go
#下面是第二段配置

proxies: #静态配置, 维护起来较为麻烦, 我建议留空, 去配置下面的proxy-providers
proxy-providers:
  机场1:
    type: http
    url: "clash格式的订阅链接"
    path: 机场1.yaml
    interval: 21600 #这么多秒更新一次订阅, 21600s=6h
    health-check:
      enable: false #健康检查, 用下面的url来检查这个组里面所有的节点
      url: http://www.gstatic.com/generate_204 #HTTP204状态的链接
      interval: 300 #每5分钟检查一次
  机场2:
    type: http
    url: "clash格式的订阅链接"
    path: 机场2.yaml
    interval: 21600
    health-check:
      enable: false
      url: http://www.gstatic.com/generate_204
      interval: 300
  机场3:
    type: http
    url: "clash格式的订阅链接"
    path: 机场3.yaml
    interval: 21600
    health-check:
      enable: false
      url: http://www.gstatic.com/generate_204
      interval: 300
  #机场4, 可以继续写, 把上面的一段复制下来, 防止空格问题
proxy-groups:
  - name: Proxy
    type: select
    proxies: #下面写每个订阅里面包含所有节点的group name. 在你订阅里找proxy-groups, 里面选一个包含全部节点的组名, 注意名字后面 type 是 select. 
      - 🚀 节点选择 #记住这些 proxy-groups.name
      - port1
      - port2
      #- 机场4的 proxy-groups.name, 可以继续写, 记住这些顺序
  - name: 🚀 节点选择 #改这
    type: select
    use:
      - 机场1
    filter: ^((?!(IAPL|群组|直连|官网|群组|套餐|剩余|更新订阅)).)*$  #排除正则, 排除这些关键字. 包含正则请自己发挥
  - name: port1 #改这
    type: select
    use:
      - 机场2
    filter: ^((?!(IAPL|群组|直连|官网|群组|套餐|剩余|更新订阅)).)*$
  - name: port2 #改这
    type: select
    use:
      - 机场3
    filter: ^((?!(IAPL|群组|直连|官网|群组|套餐|剩余|更新订阅)).)*$
  #- name: 机场多可以继续写...
rules:
  #- PROCESS-NAME,com.kiwibrowser.browser,DIRECT #配合第一段代码中的enable-process: true使用, 中间是包名, DIRECT则是指定这个应用程序直连. 
  - IP-CIDR,8.8.8.8/32,Proxy #adguardhome magisk里的两个dns, 我单独拉出来了, 让它们走代理. 
  - IP-CIDR,8.8.4.4/32,Proxy
  - GEOIP,PRIVATE,DIRECT #内网IP直连, 如192.168
  - GEOIP,CN,DIRECT #adguardhome magisk解析出来的CN IP走直连
  - IP-CIDR,255.255.255.255/32,REJECT,no-resolve #adguardhome magisk专用的拦截IP, 比如拦截了sentry.io这个域名, 那么adguardhome magisk将返回255.255.255.255这个IP, 又因为rules这里面, 255.255.255.255这个IP是REJECT(拦截), 所以达到了去广告的效果. 
  - MATCH,Proxy #除了以上几条规则以外, 其它的全部走代理. 注意这个 Proxy 是我在proxy-groups里面起的组名, 不要以为Proxy就是代理, 它是个组名, 只不过组名里都是代理节点, 所以它才走了代理. 


我用到的 clash meta for magisk 模块:
https://t.me/MagiskChangeKing/126


这个模块还带一个安卓APK的图形界面, 目前有这些功能: 开关, 查看流量使用/内存和CPU占用, 热更新配置(不用重启clash meta内核, 就可以让改动后的clash meta配置生效), 更新geo文件, 内部打开网页面板(不需要调起浏览器), IP检查, fast.com测速. 
https://t.me/MagiskChangeKing/159

还有一个配置检测工具: 

https://t.me/MagiskChangeKing/135

星期三, 一月 11, 2023

159 虚拟币(USDT)的转账手续费

最近在研究机场, 部分机场的第四方手续费都是6% 8%的, 但也发现一些机场的付费方式支持 USDT (TRC20链路), 我看机场的 USDT 转账方式付费都没有手续费, 20块的月付就收20. 

结果他妈的掏了些钱, 买了点 USDT, 发现 Withdraw(转账给别的地址) 的手续费他妈的离谱!!!

欧易的 USDT TRC20 链路转账手续费是 0.8 USDT, 也就是 $0.8 左右. 


币安更他妈离谱, 1 USDT, 也就约为 $1...

https://www.binance.com/en/fee/cryptoFee

买一个十几块二十几块月付的机场, 我他妈的还得交这么高的手续费, 

星期一, 一月 02, 2023

158 利用 Javascript, 让 Clash For Windows 的 mixin 同时支持多个机场切换, 而不用频繁修改 MATCH (以及 yaml + 多机场 的 proxy-providers 写法)

在154号文章中讲到, 利用混合配置 Mixin 将 Clash For Windows 和 AdGuard Home 组合起来使用, 但是 mixin 使用的 Yaml 是静态的, MATCH后面跟的是组名, 每个订阅的组名又不一样, 这就是说, 每次切换节点我还得改, 十分蛋疼. 

于是我在这里找到了解决方法, 从 Yaml 切换成 Javascript. 博主的代码中好像有些错误, 因为它在我这运行报错... 规则也会反过来, MATCH跑到第一位去了... 我也都将其改正了. 
注意 'GEOIP,CN,DIRECT', 'IP-CIDR,255.255.255.255/32,REJECT,no-resolve', 这两句的顺序不能写反了, 我测试发现写反了会导致 AdGuard Home 屏蔽掉的域名又特么被拉进代理解析了... 

我的需求: DNS 走我的 AdGuard Home, 局域网流量直连, 解析出来的 CN IP 直连, 其余一律走代理, 无流媒体需求. 

自己按需修改规则即可. 注意, 如果用 tun 不要使用 fakeip dns 模式, 不然你外部自建的 dns 就废了. 


module.exports.parse = ({ content, name, url }, { yaml, axios, notify }) => {


    // 通用设置

    content['mixed-port'] = 1081;

    content['allow-lan'] = true;

    content['ipv6'] = false;

    content['bind-address'] = '*';

    content['mode'] = 'rule';

    content['log-level'] = 'error';

    content['unified-delay'] = true;

 

    //DNS

    content.dns = {

        'enable': true,

        //'listen' : '127.0.0.1:5335', 

        'nameserver': [

            '192.168.10.1:5335'

        ],

        'default-nameserver': [

            '192.168.10.1:5335'

        ]

    };


    // 自定义 DIRECT / REJECT 条目

    //先清空 rules 以达到覆盖的效果

    content['rules'] = []; 

    [

        'IP-CIDR,192.168.0.0/16,DIRECT,no-resolve',

        'IP-CIDR,10.0.0.0/8,DIRECT,no-resolve',

        'IP-CIDR,172.16.0.0/12,DIRECT,no-resolve',

        'IP-CIDR,127.0.0.0/8,DIRECT,no-resolve',

        'IP-CIDR,100.64.0.0/10,DIRECT,no-resolve',

        'IP-CIDR6,::1/128,DIRECT,no-resolve',

        'IP-CIDR6,fc00::/7,DIRECT,no-resolve',

        'IP-CIDR6,fe80::/10,DIRECT,no-resolve',

        'IP-CIDR6,fd00::/8,DIRECT,no-resolve',

        'GEOIP,CN,DIRECT',

        'IP-CIDR,255.255.255.255/32,REJECT,no-resolve',

    ].forEach(rule => {

        content.rules.push(rule);

    });


    // 自定义走梯子的条目, 无需写尾部的后缀, 末尾带上逗号

    const customProxy = [

        'MATCH,',

    ];


    // 需要对每个 Plan 配置相应的 GroupName

    var proxyGroupName = '';


    if (name == '订阅名1.yaml') {

        proxyGroupName = 'proxy';

    } else if (name == '订阅名2') {

        proxyGroupName = '🚀 节点选择';

    } else if (name == '订阅名3') {

        proxyGroupName = '🔰国外流量';

    }

    // 还可以继续添加


    customProxy.forEach(rule => {

        content.rules.push(rule + proxyGroupName);

    });


    // Debug

    // axios.get('http://localhost:4016/openFile?path=' + yaml.stringify(content));

    return content;

}



更新:  其实 yaml 也行, 只不过它那个空格太厦碧, 我从网上东拼西凑总是报错, 下面是测试能用的. 成功的标志是, 常规 - Clash 核心( API 端口) 右边有个小芯片图标, 点开有你修改的 mixin 的内容, 而且主界面左侧会多出来一个 "服务商".  博客复制出来的代码可能还会有缩进问题, 请仔细检查, 妈的真的服了 yaml 了...

mixin:

  mixed-port: 1081

  allow-lan: true

  bind-address: '*'

  mode: rule

  log-level: error

  ipv6: false


  dns:

    enable: true

    #listen: 127.0.0.1:5335

    nameserver:

      - 192.168.10.1:5335

    default-nameserver:

      - 192.168.10.1:5335

 

  proxy-providers:

    机场1:

      type: http

      url: "填节点订阅网址, 如果是v2board的机场面板, 记得加上 &flag=clash"

      path: 机场1.yaml

      interval: 21600

      health-check:

        enable: true

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

        interval: 300


    机场2:

      type: http

      url: "https://v2board的面板订阅/api/v1/client/subscribe?token=123&flag=clash"

      path: 机场2.yaml

      interval: 21600

      health-check:

        enable: true

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

        interval: 300


    机场3:

      type: http

      url: "https://sspanel的面板订阅/link/123?clash=1"

      path: 机场3.yaml

      interval: 21600

      health-check:

        enable: true

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

        interval: 300


  proxy-groups:

    - name: Proxy

      type: select

      proxies:

        - cnix  #这里填机场提供的订阅里面, 含有一堆节点的那个组名(proxy-groups底下的name, 一般在type: select的前面, 我这里是随便举例写了个cnix)

        - 代理流量

        - amy

      

    - name: cnix  #和上面对应

      type: select

      use:

        - 机场1

      

    - name: 代理流量

      type: select

      use:

        - 机场2

      

    - name: amy

      type: select

      use:

        - 机场3


  rules:

    #- 'PROCESS-NAME,clash,REJECT' #安卓上防止回环, win上没见出问题

    - 'GEOIP,PRIVATE,DIRECT'

    - 'GEOIP,CN,DIRECT'

    - 'IP-CIDR,255.255.255.255/32,REJECT,no-resolve'

    - 'MATCH,Proxy'