星期日, 一月 15, 2023

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'


星期二, 十二月 27, 2022

157 v2rayN + AdGuard Home 的组合使用, 解决 拦截的域名被拉进代理并解析成功 的问题

前面我在154号文章中提到, Clash For Windows 和 AdGuard Home 默认是有冲突的: 拦截的广告域名被拉进了代理并解析成功. 那篇文章也讲了如何处理这个问题. 

v2rayN 和 AdGuard Home 组合使用时, 也存在同样的问题...


最近在研究各个机场, 观察入口和落地, 速度, 是否支持 torrent 域名等. 有很多的机场订阅, 也有很多的节点, 这时候 v2rayN 就显得比 Clash For Windows 好用许多了, v2rayN 支持批量节点测速, 尤其是 检测真实连接延迟(https://www.google.com/) 和 下载速度(http://cachefly.cachefly.net/10mb.test) 能比 Clash For Windows 更加真实地反映出这个机场在我这个地理位置的性能. 

但是和 Clash For Windows 一样, 有一点非常操蛋, 又把我在 AdGuard Home 拦截掉的广告域名拉进代理解析🤨... 

文档也不是没有, 但对我来说, 看起来有点费劲: 
https://www.v2fly.org/config/dns.html#dnsobject
https://www.v2fly.org/config/routing.html

经过一番折腾, 我就把我设置好的配置, 带上截图分享出来, 以帮助有需要的人. 

当前的版本是: v2rayN 5.3.9 (2022/12/13), 这也是 v2rayN 5 的最后一个大版本. 以后的版本可能有所改进或变动, 可能会更好. 这是未知数, 而且我懒得更新博客😂

====

v2rayN 需要配置两处地方才能实现 V2rayN + AdGuard Home 的组合使用, 既能走自己的 dns 去广告, 也能正常国内外分流. 


参数设置和路由设置. 首先进到参数设置 - (Core)DNS设置:

{
    "servers": [
        "tcp://192.168.10.1:5335",
        {
            "address": "192.168.10.1",
            "port": 5335,
            "skipFallback": true,
            "expectIPs": [
                "ext:geoip.dat:private"
            ]
        },
        "localhost"
    ],
    "clientIp": "",
    "queryStrategy": "UseIPv4",
    "disableCache": true,
    "disableFallback": true,
    "tag": "AdGuard Home"
}
把这个粘贴上去, 当然你直接填一个 localhost 也行, 代表使用本机系统设置的 dns . 我是两个都加上了, 192.168.10.1:5335 是路由器上搭的 AdGuard Home. 而 localhost 是网卡设置里面的 192.168.10.1. 至于 server 为什么要用 tcp://, 因为我写 udp:// 的话, dns 请求就被拉进代理了, 如果不写协议, 只写个 "192.168.10.1:5335", 则会报错: failed to create server > app/dns: failed to create client > app/dns: failed to create nameserver > parse "192.168.10.1:5335": first path segment in URL cannot contain colon
对 v2rayN dns 这块我特码的也是一知半解, 所以就直接复制粘贴上去最好🤦‍♂️

clientIp 其实就是 edns, 就近原则分配IP地址, 访问有 cdn 的大网站时会有加成, 国外 8888 1111 都支持 edns, 国内的都不太行. 目前 AdGuard Home 支持带上edns0头转达至上游, 我测试过. 这个 clientIp 的参数可以改为你附近的IP路由, 比如你实际IP是123.123.123.123, 你就改成 "clientIp": "123.123.122.1". 也可以去访问自己宽带的省运营商官网获得官网IP, 总之自己发挥, 不要写自己真实的 ip 以免出现安全问题. 
剩下几个参数看英文就知道啥意思, 最后一个 tag 名会出现在日志中.

core我选的都是xray, 我路由器上也是这个核, 用习惯了. 自己选自己喜欢的. 


下面是路由设置, 我选了 IPOnDemand 和 mph 算法. 上面发了链接, 官方文档中说 mph 效果好. 域名解析策略有点曹蛋, 我用通俗易懂的话说概括一下: 


这是官网的文档: 
AsIs:只使用域名进行路由选择,默认值;
IPIfNonMatch:当域名没有匹配任何基于域名的规则时,将域名解析成 IP(A 记录或 AAAA 记录),进行基于 IP 规则的匹配;
当一个域名有多个 IP 地址时,会尝试匹配所有的 IP 地址,直到其中一个与某个 IP 规则匹配为止;
解析后的 IP 仅在路由选择时起作用,转发的数据包中依然使用原始域名。
IPOnDemand:当匹配时碰到任何基于 IP 的规则,立即将域名解析为 IP 进行匹配。

在 Clash For Windows Mixin 里的语法就简单得多, 上面这段看得我特么头疼, 我总结下实际测试结果. 
AsIs: 和下面 IPIfNonMatch 一样. 
IPIfNonMatch: AdGuard Home 也没接到 dns 请求, 网页也无法访问, ERR_PROXY_CONNECTION_FAILED: 

IPOnDemand:是正确的选项, 我就不截图了. 

下面来配置规则, 借助geoip就变得非常容易了, 只需要配置三条规则: 

第一条是block, 阻断, 255.255.255.255 是我在 AdGuard Home 中的拦截专用的 IP 地址. 
第二条是direct, 直连, geoip:private,geoip:cn 意思是私有网络地址(局域网那几段) + 中国IP走直连. 
第三条是proxy, 代理, 保持默认. 
剩下的是系统默认规则, 删除或改为 false. 
因为我这 DNS 用的是 dns over https, 没有劫持, 不用担心 DNS 污染问题, 所以就没开 geosite:cn. 广告屏蔽也不需要, 我自己在 AdGuard Home 里面维护. 

最后看看效果: 


国外走代理, 国内走直连, AdGuard Home 屏蔽的也正常屏蔽了, 网页返回 403. 

几个 v2rayN 的使用建议: 
1, 配置好之后记得在系统托盘右键, 把系统代理改成自动. 
2, 订阅可以分组. 
3, 底下的日志太多, 可以在设置里面把日志等级改为 none, 或者在日志上面右键, 设置信息过滤器, 可以选过滤 代理日志 或者 直连日志. 也可以用正则改成过滤掉 代理+直连+拦截, 把这个粘贴进去
^(?!.*(proxy|direct|block)).*$

星期一, 十一月 14, 2022

156 如何快速消耗流量(Windows)

前面找流量消耗工具, 找了一堆网页版的, 不靠谱, 运行几个小时就挂了. 

突发奇想, 在windows上用curl或者wget之类的工具, 实现无限下载删除. (如果担心硬盘的话, 可以用内存虚拟一块硬盘出来). 

从这里下载curl windows版, https://curl.se/windows/ , 保持文件结构, bin/include/lib之类的所有文件夹都留着保持不动, 不然加载不出依赖会报错. 然后写个简单的批处理: 

@echo off

:S

curl --output D:\1.iso https://download.microsoft.com/download/3/B/D/3BD9DD65-D3E3-43C3-BB50-0ED850A82AD5/SQLServer2012SP1-FullSlipstream-ENU-x64.iso

del /f /s /q D:\1.iso

del /f /s /q D:\1.iso

goto S

 

文件大小 3.63 GiB. 

*注意curl是单线程的. 可以多开实现满速. 

星期一, 十月 03, 2022

155 google chrome 浏览器便携化的一个方法, 可以设置成默认浏览器打开, 并且userdata不乱跑

原理还是白嫖paf, 只不过我找了个vbs脚本设置portable.exe为默认浏览器. 

1, 首先去https://portableapps.com/de/apps/internet/google_chrome_portable下载一个paf.exe结尾的文件. 用7zip等工具把它解压出来, 得到other app 7ztemp等文件夹, 和GoogleChromePortable.exe文件, 这里只保留 app文件夹+GoogleChromePortable.exe. 

2, 从这里https://gist.github.com/winhelponline/057064a1dadb3eb9b0aa2b6f05a0331a下载一个chromeportable.vbs, 和 GoogleChromePortable.exe 放在一起. 再在这里新建个Data文件夹, 这样文件夹结构就是

┌─ GoogleChromePortable.exe

├─App

    ┌─AppInfo

    ├─Chrome-bin

    └─DefaultData

├─Data

└─chromeportable.vbs

3, 从https://www.iplaysoft.com/tools/chrome/获取离线安装包, 用7zip等工具把它解压出来, 得到chrome.7z, 再解压得到chrome-bin, 把它放到App文件夹底下. 

4, 现在双击运行chromeportable.vbs, 直接点确定就行. 

5, 打开GoogleChromePortable.exe一次, 正常使用. 

6, 排查从其它地方打开的链接, 能否调起GoogleChromePortable.exe. 

7, 排查 %LOCALAPPDATA%\Google\Chrome\User Data 是否存在.

完成!


重点是vbs设置为默认浏览器, 而且也不能用chrome里的设置默认, 否则userdata会回到 %LOCALAPPDATA%\Google\Chrome\User Data 中


为了防止误点到静默安装包, 或者误点到chrome主程序, 可以在%LOCALAPPDATA%下建一个空文件, 取名Google, 设置为只读, 实测静默安装包不会释放文件, chrome.exe也无法启动. 


!每次升级需要手工下载安装包解压后放入App文件夹. 

星期六, 十月 01, 2022

154 clash for windows 和 adguard home 的冲突问题: 拦截的广告域名被拉进了代理并解析成功

由于clash mini出现的各种小问题, 最终还是转向了clash for windows. 这屎山electron应用... 不过看日志确实方便, 方便我找出那些广告和收集隐私的域名. 

前面折腾了一个勉强能用的便携版, 也算不错. 

但是我本地有个adguard home, 就搭在路由器上, 也是我内网中唯一的dns. 上游dns是国内的ip doh, 目前没有劫持和污染. 


机场规则乱七八糟, 这一看就是从网上订阅规则合并的: 

    - 'DOMAIN,dl.google.com,全球直连'

    - 'DOMAIN,dl.l.google.com,全球直连'

    - 'DOMAIN,update.googleapis.com,全球直连'

    - 'DOMAIN,fonts.googleapis.com,全球直连'

    - 'DOMAIN,fonts.gstatic.com,全球直连'

瞎写是吧? 照这么用, 特么十次里面得有八次字体是方块. 于是我就这么写mixin: 

mixin:

  dns:

    enable: true

    listen: 127.0.0.1:5335

    nameserver:

      - 192.168.10.1:5335

  rules:

      - 'DOMAIN-SUFFIX,local,DIRECT'

      - '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'

      - 'MATCH,🐟 漏网之鱼': 

mixin的功能就是覆盖机场的配置, 在这段代码中, 覆盖了机场的dns和rule两个节点. 我指定dns服务器为我自己内网路由器的5335端口. 写了一些本地局域网直连(DIRECT)的规则. 比较重要的是最后两行, cn分流直连, 剩余的交给漏网之鱼select选择器. 

结果他妈的cfw在adguardhome响应了NXDOMAIN(域名不存在)后, 自己跑去连上代理给我了解析域名, 代理可不管你本地拦不拦截, 全部都会解析. 妈的那我还去个锤子广告? 

于是乎, 把目前上网的工具试了一圈, 没一个好使的, v2rayN一样会把拦截域名拉到代理里解析掉; v2rayA是网页GUI, 做得不错, 但也会拉到代理里; clashy根本没有mixin; HMBSbige / ShadowsocksR-Windows 是.net写的, 占用内存150M+, 不想用, 而且也会拉入代理; netchx那个还行, 但是加上千个cnip路由, cpu直接起飞; 其它的工具都已经很久没有维护了, 要么就得用2019年就停更的 shadowsocksrr / shadowsocksr-android. 

这几年的工具都有一个机制, 它会认为我这些 servfail/nxdomain/refused/空noerror 等等的响应全都是污染, 于是作为后备方案, 工具就会尝试通过代理解析域名... 

后来经高人指点, 得到了一个简单有效又另类的方法, 效果和nxdomain响应差不多. 

在 adguard home - 设置 - DNS设置 - DNS 服务配置 - 拦截模式 这里, 设置成 自定义IP. 在IPv4这一栏填成: 255.255.255.255, 如图: (截图是255.0, 但是实际测试发现255更好, 图片懒得重新截了...)

回到cfw, 在mixin里match的上方加一行规则, 如图: (同上, 懒得重新截图了)

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

最后面match跟的是Select选择器, 每个机场可能都不一样, 自己改一下就好. 重启cfw之后, 来看看dns解析情况(刚才为了截图, 解析了域名, 浏览器有缓存, 所以下面我换了个测试域名): 
adguard home里面拦截的域名终于被mixin的规则干死了. REJECT, 哈哈!

浏览器访问被adguard home拦截的域名时, 会立即报这些错: 
ERR_CONNECTION_RESET
ERR_CONNECTION_ABORTED
ERR_CONNECTION_CLOSED
HTTP ERROR 502

找了找, 网上目前没有clash for windows和adguard home之间存在问题的文章, 所以发出来帮助大家. 感谢大佬, 开心😄

20221003更新: 实际测试选用255.255.255.255更好, 懒得截图了.. 
adguard home 返回IP改为: 
255.255.255.255
mixin:  
- 'IP-CIDR,255.255.255.255/32,REJECT,no-resolve'
mixin这破东西, 一定要注意对齐啊...

关于IP-CIDR的转换, 参见: https://www.rocschool.com/tool/ipcidr/

星期四, 九月 29, 2022

153 使用 yaP 制作 Clash for Windows 便携版, 配置随着打包即可带走

cfw这个东西真的是一言难尽, 你说它好用吧, 它是electron写的, 性能又差, 占用内存; 和.NET程序一起, 在我的鄙视链中.. 你说它不好用吧, 它又很强大... cfw本身带有便携版, 但是 %appdata%\clash_win\ 会有缓存文件. 

yap是什么? 它是一个可扩展的便携软件制作工具. 
原理很简单, yap没有hook路径之类的, 通过自己写ini, 实现启动前的环境准备(比如设置环境变量, 准备文件, 写入注册表等等), 再等到指定进程退出以后, 再继续环境处理(比如回收配置文件到某个目录下, 删注册表, 清理文件文件夹等等), 虽然2019年期就停更了, 但是扩展性很好. 就是个小小启动器, 还支持参数用指定密码加密, yap就相当于两个cmd. 

portableapps见过吧, yap和那个类似, portableapps还需调用NSIS, 虽然说很高级, 但我的需求就是简单地写个cfw的便携版ini, 不需要那么繁琐的准备环境和各种依赖. 

yap和pa的文件结构类似, 就一个启动器exe和一个ini文件. 所以最重要的也就是这个ini的内容了. 下面我把我自己写的ini贴出来. 

把cfw放入app文件夹, 以保证 \App\Clash for Windows.exe 存在. 后续更新只需要自己清掉app文件夹里的文件, 放入新版本即可.

如果clash需要重启, 手动退出clash重新进. 由于yap自身缺陷, 只能识别标题是否存在, 无法做到检测进程.exe是否重启. 如果clash已经重启了, 没事, 手工退出再重新进一下就好. 

; configuration file for yaP v0.7.x (http://rolandtoth.hu/yaP/)

; application name: Clash for Windows

; website: https://github.com/Fndroid/clash_for_windows_pkg/releases


[GENERAL]

application = {YAPROOT}\App\Clash for Windows.exe

; commandline = 

workdir = {YAPROOT}\App\

!waitprocess = Clash for Windows


[BEFORE]

dir = %userprofile%\.config\clash\ :: {YAPROOT}\Data\

dir = %appdata%\clash_win\ :: {YAPROOT}\Data\cache\


[AFTER]

-dir = {YAPROOT}\Data\logs\

-file = %temp%\*.tmp.ico

-file = {YAPROOT}\App\debug.log

-regkey = HKCU\SOFTWARE\Classes\clash\

其中;是注释, 其它内容很好理解, 就是在每次cfw结束之后回收配置文件至 软件目录\Data\下, 清理缓存.
网站也对语法有详细的文档介绍. https://yap.rolandtoth.hu/#configuration 还有各类模板可供参考: https://yap.rolandtoth.hu/#examples

下载地址: https://yap.rolandtoth.hu/

软件启动前和退出后, 有文件读写操作, 所以如果是像 钉钉 那样的屎山, 用这个yap没有太大意义. 

星期四, 六月 30, 2022

152 红米k20pro 从MIUI刷至魔趣, 并解决 wifi无法开启卡住 取消类原生流量和wifi有x有叉 GPS能搜到信号但无法定位 的问题

1, 先刷入官方底包, 从MIUI网站检查符合魔趣安卓版本号的版本. 比如魔趣这个包是安卓10, 你也得从官网下载安卓10的底包, 不能跨版本, 否则可能有GPS无法定位、wifi无法打开等各类奇葩情况. 也可以从https://xiaomifirmwareupdater.com/firmware/raphael/ https://downloads.akhilnarang.dev/MIUI/raphael/

下载firmware和vendor, 将驱动升至符合魔趣安卓版本号的版本. 
如果用的是firmware zip包, 在刷入之前, 记得在TWRP-"挂载"里面, 挂载firmware分区!  vendor同理. 

2, 如果刷入官方底包, 那还需要重新刷入TWRP recovery. 

3, 安装魔趣系统刷机包. 

4, 进入TWRP-清除, 格式化Data分区. TWRP-高级-取消强制加密, ✔删除DM校验 ✔取消强制加密 这两个都勾上执行. 重启至系统, 进去之后, 过完新手设置引导, 重启至Recovery. 

5, 检查/data/system/、/data/app/、/data/data/ 之类的分区, 文件名和文件夹名是否被加密. 如果操作正确, 文件名都会显示正常. 

6, 继续在TWRP中刷入Magisk最新版本, 重启至系统, 安装app. 安装后进入设置, 只勾选Zygisk, 底下的遵守排除列表不勾, 然后隐藏magisk. 重启至系统. 

7, 在magisk的设置里, 不勾选遵守排除列表, 直接进入排除列表, 勾上银行类支付类等各类要排除的软件. 每个软件都要点开把所有项目都勾选上. 

8, 继续在magisk安装Shamiko的zip包(以对抗银行类软件). https://zhuanlan.zhihu.com/p/470468650, 装完重启即可正常打开银行类软件. 

9, WIFI/流量信号有小x: 

adb devices

adb shell settings put global captive_portal_http_url http://connectivitycheck.platform.hicloud.com/generate_204

adb shell settings put global captive_portal_https_url http://connectivitycheck.platform.hicloud.com/generate_204

adb shell settings put global default_captive_portal_http_url http://connectivitycheck.platform.hicloud.com/generate_204

adb shell settings put global default_captive_portal_fallback_urls http://connectivitycheck.platform.hicloud.com/generate_204

分四行执行. https_url的值也不能为https, 这一版rom如果改https的网址, 重启后电信APN(接入点)会消失, 无法用流量联网. 另外也可以用"CaptiveMgr"进行修改, 需要root权限, 注意也不要勾选https的选项, 否则重启后同样电信APN会消失. 

 

*在TWRP备份恢复分区误操作, 无脑恢复了这些分区 msadp logo keymaster xbl cnmlib splash dsp apdp dtbo EFS logfs abl bluetooth fsg Persist cnmlib64 Boot Persist_backup tz devcfg hyp 导致无限重启, 即使重刷zip刷机包也不行: 
从这里下载tgz线刷包, 解压出来, 用fastboot+miflashpro的形式刷入. miflashpro也可以从第三方检索页面查询下载
我尝试恢复之前魔趣的data分区, 系统无限重启, 貌似twrp备份没什么用. 还是钛备份吧, 虽然有点麻烦…

星期一, 四月 25, 2022

151 钉钉 通过json下载最新版本的离线包

给同事下载个钉钉, 从官网正常下载发现是个下载器...

网上搜了一下, 发现这个博主的方法能够解决. 只要接口不变, 可以一直获取最新版本. 

https://im.dingtalk.com/manifest/new/website/vista_later.json

看URL节点里面的地址即可获取exe完整包或者zip的完整包(解压就行). 

臃肿又卡顿的软件😂


有人说, 直接用下载器下载安装不就好了么?

给别人做好系统安装软件的时候, 不一定有网-_-