yaml配置
1 | port: 7890 |
如果使用yt-dlp音源需要额外安装
yaml配置
1 | port: 7890 |
如果使用yt-dlp音源需要额外安装
拔掉USB线, 重新连上HDMI, 加电, 系统开机就是新的安卓系统了
使用的系统是20180123-S905L-R3300L-V12C-root-qlzy
参考:R3300L运行CoreELEC, EmuELEC和Armbia
双系统不用把armbian系统刷进emmc,需要在安卓系统中安装Reboot to LibreELEC的apk来启动TF卡系统,装上TF卡就自动进行armbian系统
参考:魔百盒R3300L、CM101H以及中兴ZX10 B860AV1.2刷armbian跑甜糖
使用的系统版本是Armbian_20.10_Arm-64_buster_current_5.9.0.img
1 | cp /etc/apt/sources.list /etc/apt/sources.list.bak |
换成清华源
1 | deb https://mirrors.tuna.tsinghua.edu.cn/debian buster main contrib non-free |
然后
1 | apt-get update |
如果遇到NO_PUBKEY的报错
1 | Err:4 https://mirrors.tuna.tsinghua.edu.cn/debian buster-backports InRelease |
执行下面命令
1 | sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys XXXXXXX |
1 | armbian-config |
1 | root@arm-64:~# docker -v |
假设armbian的ip是192.168.0.xx
创建network
1 | docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=eth0 macnet |
启动pod,其中192.168.0.11是openwrt后面会使用的ip
1 | docker run \ |
打开网卡混杂模式
1 | sudo ip link set eth0 promisc on |
进入pod查看/etc/config/network文件的option ipaddr,查看其值为192.168.0.1还是192.168.1.1
接着将pod中/etc/config/network的192.168.0.1或者192.168.1.1修改成192.168.0.11
1 | docker exec unifreq-openwrt-aarch64 sed -e "s/192.168.0.1/192.168.0.11/" -i /etc/config/network |
重启pod
1 | docker restart unifreq-openwrt-aarch64 |
参考:M401a系列:armbian下docker安装openwrt做旁路由
登录192.168.0.11访问openwrt的管理页面,注意是http的浏览器访问的时候需要接受风险,默认账号密码是root和password
这时候openwrt需要进行一些设置
网络 => 接口 => LAN => DHCP 服务器 => 基本设置
操作: 勾选忽略此接口
网络 => 接口 => LAN => DHCP 服务器 => IPv6 设置
操作: 禁用 路由通告服务
, DHCPv6 服务
, NDP 代理
网络 => 接口 => LAN => 一般设置 => 基本设置
操作:
IPv4 网关
改为 192.168.0.1
IPv4 广播
改为 192.168.0.255
使用自定义的 DNS 服务器
改为 114.114.114.114
这时候pod中就可以访问外网了
其中192.168.0.116是armbian机器的ip,192.168.0.11是openwrt的ip
1 | root@arm-64:~# ip link add mynet link eth0 type macvlan mode bridge |
参考:N1 通过 Docker 安装 Openwrt 为旁路由
注意需要把软路由接到主路器上
如果不想修改主路由的DNS地址,那么可以通过修改手机的路由器地址到openwrt的ip地址+修改DNS地址到openwrt的ip地址的方式
参考:软路由(operwrt)通过ss Plus+ kx上网教程
当我们开发的系统想要使用第三方账号系统(比如微信,微博,facebook)进行登录的时候,就需要使用第三方平台的登录能力,下面是各第三方平台的对接文档
关于oauth和oauth2.0:理解OAuth 2.0
https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
web端
app移动端,可以使用refresh token
https://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6
https://openhome.bilibili.com/doc/4/eaf0e2b5-bde9-b9a0-9be1-019bb455701c
官方镜像仓库selenium/standalone-chrome,只支持amd64
拉取镜像
1 | docker pull selenium/standalone-chrome:120.0 |
启动
1 | docker run -d -p 4444:4444 -p 15900:5900 selenium/standalone-chrome:120.0 |
其他参数
1 | docker run -d -p 4444:4444 -p 15900:5900 -e SE_NODE_MAX_SESSIONS=5 --shm-size=2g selenium/standalone-chrome:120.0 |
参考:https://hub.docker.com/r/selenium/standalone-chrome
访问 localhost:4444/ui 可以查看selenium的运行状态
可以使用mac自带的屏幕共享功能连接pod的vnc
输入 vnc://localhost:15900,默认密码是secret
界面
ubuntu/debian换源
1 | sudo -s |
安装pip3
1 | apt-get install python3-pip |
安装selenium和webdriver-manager
1 | pip3 install selenium |
查看chrome和driver version
1 | root@ced974ac3394:/# google-chrome --version |
1.不启用chrome gui
1 | root@ced974ac3394:/# python3 |
参考:https://github.com/password123456/setup-selenium-with-chrome-driver-on-ubuntu_debian
2.启用chrome gui
1 | root@fce0fc2def31:/# python3 |
此时vnc界面会弹出浏览器
1 | >>> driver.get("https://python.org") |
打开了python的网页
如果语言cloudflare的人机校验
安装 undetected_chromedriver
1 | pip3 install undetected_chromedriver |
替换seleniuim的web driver
1 | import undetected_chromedriver as uc |
参考:https://github.com/ultrafunkamsterdam/undetected-chromedriver
如果报from session not created: This version of ChromeDriver only supports Chrome version 125
可以在代码中指定chrome的版本,如下
1 | undetecteddriver = uc.Chrome(options=options, use_subprocess=True, version_main=125) |
或者可以尝试使用125.0版本的docker镜像
1 | docker run -d -p 4444:4444 -p 15900:5900 -e SE_NODE_MAX_SESSIONS=5 --shm-size=2g selenium/standalone-chrome:125.0 |
多表连接查询
1 | # 返回的是两张表的乘积 |
1 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
1 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
ModHeader全名modify header,这是一款可以对HTTP请求header进行修改的插件,其支持添加模式Mod和过滤器Filter。
Mod可以支持对request的header,response的header进行修改,对请求进行重定向redirect等;
Filter支持对特定的URL生效这面的这些Mod
下面列举了一些常用的加密算法
加密算法 | 类别 | 介绍 | 安全性 |
---|---|---|---|
MD5 | hash函数 | MD5一种被广泛使用的密码散列函数,可以产生出一个128位(16个字节)的散列值(hash value)。MD5是输入不定长度信息,输出固定长度128-bits的算法。 | 不安全 |
base64 | 编码 | Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64会增加原文的长度,通常是原始长度的 4/3 | - |
SHA-1 | hash函数 | Secure Hash Algorithm 1(SHA-1)安全散列算法1是一种密码散列函数。SHA-1结果的长度:160 位(20 字节) | 不安全 |
SHA-256 | hash函数 | SHA-256是一种加密哈希函数,可生成固定大小的256 位(32 字节)哈希值,其广泛用于数据完整性校验 | 安全 |
SHA-384/512 | hash函数 | SHA-384是SHA系列中的另一种算法,它产生的哈希值为96个字符长度的十六进制数字。 与SHA256相比,SHA384具有更强的安全性。 由于其输出长度更长,因此在实际应用中适用于更高的安全需求 | 安全 |
Hmac | 消息认证码 | HMAC(Hash-based Message Authentication Code)是一种基于哈希函数的消息认证码,用于验证消息的完整性和真实性。它结合了一个加密密钥和哈希函数,为消息提供更高的安全性。它要求通信双方共享密钥、约定算法、对报文进行Hash运算,形成固定长度的认证码。 Hmac算法可以用来作加密、数字签名、报文验证等。 | HMAC 的安全性依赖于所使用的哈希函数的强度 |
DES | 对称加密算法 | DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。DES算法的入口参数有三个:Key、Data、Mode。其中Key为DES算法的秘钥,长度8个字节(64位),其中有56位用于实际加密,还有8位用于奇偶校验;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。 | 不安全 |
3DES | 对称加密算法 | 3DES(即Triple DES)是DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密。是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。比起最初的DES,3DES更为安全。 | 较安全 |
AES | 对称加密算法 | 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES(Data Encryption Standard)。支持128位,192位和256位的秘钥长度,是目前最流行的对称加密算法。 | 安全 |
RSA | 非对称加密算法 | RSA算法是一种非对称加密算法,与对称加密算法不同的是,RSA算法有两个不同的密钥,一个是公钥,一个是私钥。RSA允许选择公钥的大小。512位的密钥被视为不安全的;768位的密钥不用担心受到除了国家安全管理(NSA)外的其他事物的危害。RSA 加密的密文长度等于密钥的长度(以字节为单位)。常见密钥长度包括 1024 位、2048 位、3072 位等。场景:在需要保护数据机密性的场景中,RSA可以用于对敏感数据进行加密。使用公钥加密,私钥解密。适合对小数据量的内容加密(如密钥、凭据等),但不适合大数据量加密(因为效率较低)。 | 安全 |
DSA | 非对称加密算法 | DSA(Digital Signature Algorithm)是一种用于生成和验证数字签名的算法,主要用于确保数据的完整性和发送者身份的真实性。DSA 专用于生成和验证数字签名,不能用于加密数据。安全性依赖于密钥长度以及散列函数的选择。 | 安全 |
ECC | 非对称加密算法 | ECC(Elliptic Curve Cryptography)是一种基于椭圆曲线数学的公钥加密算法。它是一种非对称加密技术,因其提供高安全性和较小的密钥长度,已成为现代加密的主流技术之一。ECC 广泛应用于数字签名、密钥交换和加密等领域。相较于 RSA 和 DSA,ECC 在提供相同安全性的情况下,使用更短的密钥,计算量更小。ECC 适合资源有限的设备,如嵌入式系统、物联网设备和移动设备。 | 安全 |
Blowfish | 对称加密算法 | Blowfish 是一种对称加密算法,由 Bruce Schneier 在 1993 年设计。它被广泛使用于加密数据的保护,特别是应用于资源受限的环境(如嵌入式系统)。Blowfish 是一种分组加密算法,因其高效性和灵活性,成为了当时替代传统算法(如 DES)的重要选择。 | 安全 |
RC4 | 对称加密算法 | RC4(Rivest Cipher 4)是一种对称流加密算法,由 Ron Rivest 于 1987 年设计。这种算法因其简单、高效的特性,曾被广泛应用于通信加密、文件加密以及各种加密协议中(如 SSL/TLS 和 WEP)。然而,由于其已被证明存在严重的安全漏洞,RC4 在许多场景下已不再推荐使用。 | 不安全 |
MySQL函数官方文档可以参考:https://dev.mysql.com/doc/refman/5.7/en/functions.html
参考:https://dev.mysql.com/doc/refman/5.7/en/built-in-function-reference.html
参考:https://dev.mysql.com/doc/refman/5.7/en/flow-control-functions.html
CASE函数
1 | # 条件判断语句 |
IF()函数
1 | # IF(expr1,expr2,expr3),如果expr1是True,返回expr2,否则返回expr3 |
IFNULL()函数
1 | # IFNULL(expr1,expr2),如果字expr1不为NULL,则返回expr1,如果为NULL,则返回expr2 |
NULLIF()函数
1 | # NULLIF(expr1,expr2),如果expr1=expr2,则返回NULL,否则返回expr1 |
参考:https://dev.mysql.com/doc/refman/5.7/en/numeric-functions.html
使用CEIL(x)函数/CEILING(x)函数返回不小于x的最小整数值
1 | mysql> SELECT CEILING(1.23); |
使用FLOOR(x)函数返回不大于x的最大整数值
1 | mysql> SELECT FLOOR(1.23), FLOOR(-1.23); |
使用ROUND()函数保留N位小数
1 | mysql> SELECT ROUND(-1.23); |
使用RAND()函数生成随机数
1 | mysql> select RAND() from user limit 3; |
参考:https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html
1 | # 返回当前 |
参考:https://dev.mysql.com/doc/refman/5.7/en/string-functions.html
1 | # concat 连接字符串 |
参考:https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions-and-modifiers.html
1 | # 聚合函数,也叫组合函数,忽略空值 |