月度归档:2021年09月

OBS初始化设置 2021-9-27

OBS设置

  1. 设置,通用,语言,简体中文
  2. 设置,通用,主题,System
  3. 输出,串流,视频比特率 4000Kbps
  4. 输出,录像,路径,D:/OBS/
  5. 输出,录像,质量,近似无损的质量
  6. 输出,录像,格式,MP4
  7. 输出,录像,编码器,硬件
  8. 视频,基础分辨率,输出分辨率,都选择1920*1080
  9. 热键,开始录制,F1
  10. 热键,结束录制,F2

软路由 x86的CPU Openwrt LEDE使用教程 2021-9-23

简单描述配置x86软路由的过程,我自己的笔记本电脑为Linux系统

步骤一、格式化SSD固态硬盘

设备,
* 2.5英寸 USB3.0外置硬盘盒 1个
* 2.5英寸 120GB SATA接口的固态硬盘 1个

一般30GB的固态硬盘容量足够安装Openwrt,我这个是闲置的一块SSD,把SSD固态硬盘,通过外置的USB盒子连接到自己的电脑,打开终端,通过fdisk命令找到该盘的盘符
# fdisk -l   
 
执行格式化的操作
# fdisk /dev/sda
格式化SSD硬盘

步骤二、自己编译Openwrt的镜像或者下载网络上现成的镜像

图省事的,可以直接选用Koolshare固件,http://fw.koolcenter.com/

2021-9-23

当前的x86版本的固件下载地址 http://fw.koolcenter.com/LEDE_X64_fw867/openwrt-koolshare-router-v2.37-r17471-8ed31dafdf-x86-64-generic-squashfs-combined.img.gz

使用命令解压

gzip -d openwrt-koolshare-router-v2.37-r17471-8ed31dafdf-x86-64-generic-squashfs-combined.img.gz

// 自己编译Openwrt固件的教程,不在这篇文章里描述,将来另开章节

步骤三、将固件的image文件dd进硬盘

直接使用dd命令,进行镜像数据的写盘,最好用root用户执行dd,参考命令,其中/dev/sda,需根据实际的写。

root@pc:~# dd bs=1M if=./openwrt-koolshare-router-v2.37-r17471-8ed31dafdf-x86-64-generic-squashfs-combined.img  of=/dev/sda
700+1 records in
700+1 records out
734527488 bytes (735 MB, 700 MiB) copied, 2.98561 s, 246 MB/s
root@pc:~# 

// bs 参数 是每次写入的块的大小,一般1MB可以了

// if 参数 是输入的文件,这里是镜像文件

// of 参数 是输出的设备,这里是我那块120G的固体硬盘,我这里是/dev/sda,你们根据实际的写。

步骤四、设备安装

将刚刚写入镜像数据的盘,从硬盘盒中取出,连接进软路由设备中,一般就是SATA数据和电源供电,两根线的连接,很简单。

步骤四、软路由的初始化配置

配置自己的电脑网口到192.168.1.10,用网线连接到软路由的LAN口,在软路由的离线状态,修改的内容如下,WEB登录192.168.1.1 默认用户root 默认密码koolshare

  • 修改,system,system,Language语言设置,简体中文
  • 修改,系统,系统,常规设置,主机名,GWCU
  • 修改,系统,管理权,SSH访问,接口,LAN
  • 修改,网络,接口,确认LAN/WAN端口工作于哪个物理端口,贴标签纸
    // 本次,我这里,eth0-LAN, eth1-WAN
    // 因为软路由设备性能超赞,故而,WAN口使用拨号桥接到光猫
  • 修改,网络,接口,协议,PPPoE,输入自己的宽带账号,宽带密码
  • 修改,网络,负载均衡,这个如果多宽带运营商WAN接入的,可以配置
  • 修改,系统,进阶设置,配置网络,直接修改LAN的ipaddr,到10.X.X.X的内网网段,这个可以不设置,我自己用10的段,习惯了。
  • 修改,酷软,离线安装,v.2.3.7版本的客户端
  • 系统,关机
设置语言为简体中文

步骤五、软路由连接到光猫

软路由的WAN1 到联通光猫的LAN1
软路由的WAN2 到电信光猫的LAN1
软路由的LAN1 到千兆交换机的LAN

// 一般光猫,有的只有LAN1是千兆口,LAN2是IPTV,其他是缩配的百兆口

// 网线,推荐使用六类的网线,家用足够

开机,Power On,骑上我的小骆驼,高速稳定的家庭数据的核心,软路由就上线了。

Donate
云乞讨

Python3 的协程 asyncio 2021-9-22

asyncio 资料备忘

CPU Bound -- Multi Processing

I/O Bound
Fast I/O
Limited Number of Connections -- Multi Threading

I/O Bound
Slow I/O
Many Connections -- Asyncio

协程 coroutine

import asyncio
import datetime

async def getNow():
    return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")


async def getRuntime():
    v =  await getNow()
    print(v)


asyncio.run(getRuntime())

# 使用async关键字 声明异步方法
# 使用await关键字 等待协程执行完成
# 使用asyncio.run(某个async方法) 执行

Python3 多线程 threading 2021-9-22

Python3 多线程 threading 备忘录

t.setDaemon(True)  // 线程声明为守护线程,必须在start() 方法调用之前设置
t.start()  // 开始线程活动
t.join()  // 在子线程完成运行之前,这个子线程的父线程将一直被阻塞
方法与属性 描述
current_thread() 返回当前线程
active_count() 返回当前活跃的线程数,1个主线程+n个子线程
get_ident() 返回当前线程
enumerate() 返回当前活动 Thread 对象列表
main_thread() 返回主 Thread 对象
settrace(func) 为所有线程设置一个 trace 函数
setprofile(func) 为所有线程设置一个 profile 函数
stack_size([size]) 返回新创建线程栈大小;或为后续创建的线程设定栈大小为 size
TIMEOUT_MAX Lock.acquire(), RLock.acquire(), Condition.wait() 允许的最大超时时间
对于Thread类,它的定义如下:

threading.Thread(self, group=None, target=None, name=None,
     args=(), kwargs=None, *, daemon=None)

# 参数group是预留的,用于将来扩展;
# 参数target是一个可调用对象,在线程启动后执行;
# 参数name是线程的名字。默认值为“Thread-N“,N是一个数字;
# 参数args和kwargs分别表示调用target时的参数列表和关键字参数
Thread类定义了以下常用方法与属性:

方法与属性 : 说明
start() : 启动线程,等待CPU调度

run() : 线程被cpu调度后自动执行的方法

getName()、setName()和name : 用于获取和设置线程的名称

setDaemon() : 设置为后台线程或前台线程(默认是False,前台线程)。如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,均停止。如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程执行完成后,程序才停止

ident : 获取线程的标识符。线程标识符是一个非零整数,只有在调用了start()方法之后该属性才有效,否则它只返回None

is_alive() : 判断线程是否是激活的(alive)。从调用start()方法启动线程,到run()方法执行完毕或遇到未处理异常而中断这段时间内,线程是激活的

isDaemon()方法和daemon属性 : 是否为守护线程

join([timeout]) : 调用该方法将会使主调线程堵塞,直到被调用线程运行结束或超时。参数timeout是一个数值类型,表示超时时间,如果未提供该参数,那么主调线程将一直堵塞到被调线程结束。
Python在threading模块中定义了几种线程锁类,分别是:

    Lock 互斥锁
    RLock 可重入锁
    Semaphore 信号
    Event 事件
    Condition 条件
    Barrier 阻碍
Donate
云乞讨

采集网络公开的shadowsocks线路 2021-9-13

需求描述,

采集网络公开的shadowsocks线路,玩具类型,项目编号P1SS

技术分析

一般情况下,一个普通的shadowsocks文件如下
ss://YWVzLTI1Ni1jZmI6MTIzNDU2IUAjJDpAMTAxLjc5LjU1LjIwMTo4MDg3#US

1. ss://是协议标识
2. YWVzLTI1Ni1jZmI6MTIzNDU2IUAjJDpAMTAxLjc5LjU1LjIwMTo4MDg3是信息内容正文
3. #US是注释内容

将信息正文的内容转码

YWVzLTI1Ni1jZmI6MTIzNDU2IUAjJDpAMTAxLjc5LjU1LjIwMTo4MDg3
-->
b'aes-256-cfb:123456!@#$:@101.79.55.201:8087'

可以发现是一个bytes类型的字符串

既然得到一个字符串,则可以对字符串,进行切割,获得其中的数据

// 最后一个@字符进行切分字符串
>>> s = 'aes-256-cfb:123456!@#$:@101.79.55.201:8087'
>>> s.rsplit('@',1)
['aes-256-cfb:123456!@#$:', '101.79.55.201:8087']

// 可以切分得到1 加密算法:密码
// 可以切分得到2 IP:端口
// 切分 加密算法:密码
>>> s = 'aes-256-cfb:123456!@#$:'
>>> s.split(':',1)
['aes-256-cfb', '123456!@#$:']
>>> 

// 切分 IP:端口
>>> s = '101.79.55.201:8087'
>>> s.split(':',1)
['101.79.55.201', '8087']
>>> 

通过3步的字符串的切分,即可以获取到需要的4个数据信息,校验一下,就可以进行入库的操作

采集源头,分类
1. ss list,一个包含JSON数据信息的列表
[
{
  "remarks": "NL1",
  "server": "5.253.207.85",
  "server_port": "49396",
  "method": "aes-256-gcm",
  "password": "BdRWC38L5JUDMTYNNxJGcUwB",
  "plugin": "",
  "plugin_opts": {}
},
{
  "remarks": "NL2",
  "server": "5.253.207.86",
  "server_port": "49396",
  "method": "aes-256-gcm",
  "password": "BdRWC38L5JUDMTYNNxJGcUwB",
  "plugin": "",
  "plugin_opts": {}
},
...
]

2. ss sub,一个base64转码的字符串
base64encode(
ss://238917498723...\n
ss://238472938749...\n
...
)

3. ss content,一个字符串,其中包含一段ss://298739879287的字符

架构为 前/后/库 分离

数据库 <==> API服务器 <== invoker采集服务器 <==> 采集跳板 <==> 数据源1/2/3/...
数据库 <==> API服务器 <==> checker检测服务器 <==> 检测跳板 <==> 检测站CN1/US1
数据库 <==> API服务器 ==> publish发布服务器 <==> 发布跳板 <==> WEB站Web1/Web2
Donate
云乞讨

IP地址查询的API搭建 2021-9-6

需要一个每日5万次的IP查询服务,目前市面上的IP查询服务,大多很贵,这个有2个办法可以解决。

  1. 用大量的代理池请求,进行查询
  2. 用免费的纯真数据库进行查询

本次使用ip-database项目,搭配纯真数据库的IP库,搭建可靠的本地IP查询服务,感谢纯真库,提供持久免费的更新。

项目地址 https://github.com/itbdw/ip-database

服务端操作系统 Debian 9

安装php服务

root@debian:~# apt-get install php
下载项目之后,随意测试一个IP,看是否可以运行
root@debian:~/ip-database-2.0.9/tests# php ip.php -i 101.84.1.1
{"ip":"101.84.1.1","country":"中国","province":"上海","city":"","county":"","isp":"电信","area":"中国上海电信"}
root@debian:~/ip-database-2.0.9/tests# 

纯真IP数据库 DAT文件更新 https://github.com/out0fmemory/qqwry.dat/archive/refs/heads/master.zip

把上面的封装到API里面,API地址为 http://198.211.9.196:41011/IPService ,参数为ip,封装的纯真数据库的版本v20210902,本地API文件run_IP_LOOKUP.py

请求示例1,请求一个国内IP地址的信息:

curl http://198.211.9.196:41011/IPService?ip=101.84.1.1
CN-上海-电信

请求示例2,请求一个海外IP地址的信息:

curl http://198.211.9.196:41011/IPService?ip=17.57.145.0
美国

请求示例3,请求一个错误的IP地址:

curl http://198.211.9.196:41011/IPService?ip=1.2.3.400
404
Donate
云乞讨

中国三大运营商的网络制式 2021-9-1

2G网络制式
移动 :GSM
联通 :GSM
电信 :CDMA1X


3G网络制式
移动 :TD-SCDMA 国产标准
联通 :WCDMA 欧洲标准
电信 :CDMA2000


4G网络制式
移动 :TD-LTE
联通 :TD-LTE和FDD-LTE混合
电信 :TD-LTE和FDD-LTE混合


5G网络制式 三网一致,基站数量,覆盖,信号的频点不同而已

Donate
云乞讨