nas

飞牛nas

使用的是【apt】包管理器

wifi

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash

ping -c 1 "8.8.8.8" >/dev/null 2>&1

if [ $? -eq 0 ]; then
    echo "ok"
else
    echo "fail"
    nmcli device wifi connect "CMCC-888" password "18200723687"
fi

wifi 省电模式

1
2
3
apt install iw
ifconfig
iw dev wlp2s0 get power_save

创建文件 /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf

1
2
[connection]
wifi.powersave = 2

永久关闭???

1
2
nmcli radio wifi
nmcli connection show xxx

笔记本关屏不休眠

参考 参考

第三方商店

1
2
3
4
5
6
7
8
9
ignore 忽略
# 电池供电时合盖
HandleLidSwitch=ignore
# 外接电源时合盖
HandleLidSwitchExternalPower=ignore
# 连接扩展坞时合盖
HandleLidSwitchDocked=ignore

LidSwitchIgnoreInhibited=yes

docker问题

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash

sed -i '10s/$/ -H tcp:\/\/0.0.0.0:2375/' /etc/systemd/system/docker.service
sed -i '11s/^/#/' /etc/systemd/system/docker.service

systemctl daemon-reload 

systemctl restart docker 

echo "ok"

蓝牙

1
2
3
4
5
# 进入bluetooth命令行交互模式
bluetoothctl
# 列出设备及其mac地址
devices
exit

Nas

NAS媒体库自动化管理工具 搭建NASToolS docker部署Clash与yacd 图形化V2Ray面板搭建透明代理服务 群晖docker安装dreamacro/clash + haishanh/yacd面板

iStoreOS

passwall

青龙面板1

参考 库 参考

jd的直接用源代码下面的命令拉取

1
2

docker run -dit -v D:/Docker/ql:/ql/data-p 5700:5700 --name qinglong --hostname qinglong -e TZ=Asia/Shanghai --restart unless-stopped whyour/qinglong:latest

一键安装依赖 仓库

1
2
3
4
5
curl -fsSL https://ghfast.top/https://raw.githubusercontent.com/FlechazoPh/QLDependency/main/Shell/QLOneKeyDependency.sh | bash

ql raw https://ghfast.top/https://raw.githubusercontent.com/FlechazoPh/QLDependency/main/Shell/QLOneKeyDependency.sh

got问题  nodejs 需要依赖 got@11

通知

变量 jd_CheckCK_notify

脚本管理 项目库目录下的 sendNotify.js

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// =======================================自定义通知设置区域===========================================
const push_config = {
    WEBHOOK_URL: 'http://172.18.0.5:3000/send_private_msg', // 自定义通知 请求地址
    WEBHOOK_BODY: 'message:$title$content\nuser_id:2424585654', // 自定义通知 请求体
    WEBHOOK_HEADERS: '', // 自定义通知 请求头
    WEBHOOK_METHOD: 'POST', // 自定义通知 请求方法
    WEBHOOK_CONTENT_TYPE: 'application/json', // 自定义通知 content-type
}

        const body = parseBody(WEBHOOK_BODY, WEBHOOK_CONTENT_TYPE, (v) =>
            v
                ?.replaceAll('$title', text?.replaceAll('\n', '\\n') + '\n')
                ?.replaceAll('$content', desp),
        );

需要函数 webhookNotify parseString parseHeaders parseBody formatBodyFun 青龙目录下有

自动获取参考

1
2
3
4
5
6
7
8
命令
ql raw https://ghfast.top/https://raw.githubusercontent.com/FlechazoPh/QLDependency/main/Shell/QLOneKeyDependency.sh

jd2
https://git.metauniverse-cn.com/https://github.com/shufflewzc/faker2.git

环境变量
JD_COOKIE

参考

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// 仓库地址 https://gist.github.com/J3n5en/34e122cec18930983273a740025c63d8/revisions
// frida -U -F -l Frida_JD_COOKIE.js
// 或者使用jshook注入

//青龙地址 结尾不含/
// const BASE_URL = "http://127.0.0.1"
const BASE_URL = "http://192.168.1.99:5700"
// 青龙面板 - 系统设置 - 应用设置 中生成
const CLIENT_ID = "_NC9budHEHOZ"
const CLIENT_SECRET = "A8nFOshKR1TnsEaPX9rmE-Et"


const toast = (text) => {
    Java.scheduleOnMainThread(function () {
        var toast = Java.use("android.widget.Toast");
        toast.makeText(Java.use("android.app.ActivityThread").currentApplication().getApplicationContext(), Java.use("java.lang.String").$new(text), 1).show();
    });
}


const updateWSCK = (value) => {
    try {
        const OkHttpClient = Java.use("okhttp3.OkHttpClient").$new()
        const RequestBuilder = Java.use("okhttp3.Request$Builder")
        const RequestBody = Java.use("okhttp3.RequestBody");
        const MediaType = Java.use("okhttp3.MediaType");

        const loginResp = OkHttpClient.newCall(
            RequestBuilder.$new().url(`${BASE_URL}/open/auth/token?client_id=${CLIENT_ID}&client_secret=${CLIENT_SECRET}`).build()
        ).execute().body().string();
        const token = JSON.parse(loginResp).data.token

        const envsResp = OkHttpClient.newCall(
            RequestBuilder.$new().url(`${BASE_URL}/open/envs`).addHeader("Authorization", `Bearer ${token}`).build()
        ).execute().body().string();

        const cookie = JSON.parse(envsResp).data?.find(env => env.name === "JD_COOKIE")

        const updateEnvsResp = OkHttpClient.newCall(
            RequestBuilder.$new().url(`${BASE_URL}/open/envs`)
                .method("PUT", RequestBody.create(MediaType.parse("application/json"), JSON.stringify({
                    "value": value,
                    "name": cookie.name,
                    "id": cookie.id
                })))
                .addHeader("Authorization", `Bearer ${token}`).build()
        ).execute().body().string();

        const enableEnvsResp = OkHttpClient.newCall(
            RequestBuilder.$new().url(`${BASE_URL}/open/envs/enable`)
                .method("PUT", RequestBody.create(MediaType.parse("application/json"), JSON.stringify([cookie.id])))
                .addHeader("Authorization", `Bearer ${token}`).build()
        ).execute().body().string();


        return JSON.parse(updateEnvsResp).code === 200 && JSON.parse(enableEnvsResp).code === 200
    } catch (error) {
        return false
    }
}

const hookJava = () => Java.perform(function () {
    toast("开始")
    const cm = Java.use("com.tencent.smtt.sdk.CookieManager")
    console.log(cm);
    console.log(cm.getInstance());
    console.log(cm.getInstance().acceptCookie());

    let cookie = cm.getInstance().getCookie("https://m.jd.com")
    console.log("https://m.jd.com");
    console.log(cookie);
    if(cookie) {
        cookie = cm.getInstance().getCookie("http://m.jd.com")
        console.log("https://m.jd.com");
        console.log(cookie);
    }

    // const cookies = cm.getInstance().getCookie("*")
    // console.log(cookies);
    
    console.log('---------------------');
    
    if (cookie) {
        if (cookie.includes("pt_key") && cookie.includes("pt_pin")) {
            if (updateWSCK(cookie)) {
                toast("JD_COOKIE更新成功")
            } else {
                toast("JD_COOKIE更新失败")
            }
        }
    } else {
        toast("cookie为空")
    }
});


setTimeout(hookJava, 3000)