menu Chancel's Blog
rss_feed lightbulb_outline

我的笔记

Windows - 快速切换IP设置的BAT脚本

IP切换脚本,修改其中的2个IP配置即可

ip切换脚本下载地址 - Chancel's Cloudreve

::关闭回显
@echo off
title 快速切换IP设置

::设置背景颜色
setlocal EnableDelayedExpansion&color 3e & cd /d "%~dp0"
%1 %2
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof
:runas

:: -------- 更改以下2个IP配置以及网卡名称(网卡名称如本地连接) ---------
set net_interface=本地连接 3
::公司网段
set name1=公司网段
set ip1=192.168.4.16
set mask1=255.255.240.0
set gateway1=192.168.3.1
set dns1_1=223.5.5.5
set dns1_2=192.168.3.1
::科学网段
set name2=科学网段
set ip2=192.168.4.16
set mask2=255.255.240.0
set gateway2=192.168.4.93
set dns2_1=192.168.4.93
set dns2_2=223.5.5.5
:: -------------------------------------------------------

:CHOICE
cls
echo.
echo                        IP快速切换脚本
echo.
echo --------------------------------------------------------------------------------                                                        
echo             1. 修改为%name1%%ip1%/%gateway1%echo             2. 修改为%name2%%ip2%/%gateway2%echo             3. 修改为自动获取
echo             4. 重启网卡
echo.
echo --------------------------------------------------------------------------------

:mu
set /p choice= 请输入:
IF NOT "%choice%"=="" SET choice=%choice:~0,1%
if /i "%choice%"=="1" goto ip1
if /i "%choice%"=="2" goto ip2
if /i "%choice%"=="3" goto dhcp
if /i "%choice%"=="4" goto reboot
echo.
echo.
echo 输入的选择不正确,请重新输入!
echo.
echo.
GOTO CHOICE

::设置IP-1
:ip1
echo.
echo  -----------%name1%-----------
echo       ip:  %ip1%
echo     mask:  %mask1%
echo gateway1:  %gateway1%
echo     dns1:  %dns1_1%
echo     dns2:  %dns1_2%
::设置IP/网关/子网掩码
cmd /c netsh interface ip set address "%net_interface%" source=static addr=%ip1% mask=%mask1% gateway=%gateway1%
::设置DNS
cmd /c netsh interface ip set dnsservers "%net_interface%" static %dns1_1% validate=no
cmd /c netsh interface ip add dnsservers "%net_interface%" %dns1_2% index=2 validate=no
ipconfig /flushdns
echo 设置完成
pause | echo 按任意健退出程序
exit /b
:END

::设置IP-2
:ip2
echo.
echo  -----------%name2%-----------
echo       ip:  %ip2%
echo     mask:  %mask2%
echo gateway1:  %gateway2%
echo     dns1:  %dns2_1%
echo     dns2:  %dns2_2%
::设置IP/网关/子网掩码
cmd /c netsh interface ip set address "%net_interface%" source=static addr=%ip2% mask=%mask1% gateway=%gateway2%
::设置DNS
cmd /c netsh interface ip set dnsservers "%net_interface%" static %dns2_1% validate=no
cmd /c netsh interface ip add dnsservers "%net_interface%" %dns2_2% index=2 validate=no
ipconfig /flushdns
echo 设置完成
pause | echo 按任意健退出程序
exit /b
:END

::设置dhcp
:dhcp
echo.
echo  ---设置ip/dns为自动获取---
cmd /c netsh interface ip set address name="%net_interface%" source=dhcp
cmd /c netsh interface ip set dns "%net_interface%" source=dhcp
echo 设置完成
pause | echo 按任意健退出程序
exit /b
:END

:reboot
::重启网卡
cmd /c netsh interface set interface "%net_interface%" disabled
cmd /c netsh interface set interface "%net_interface%" enable
echo 重启网卡完成
pause | echo 按任意健退出程序
exit /b
:END

Operating System Windows 2021-04-27 08:14:31 location_on

Windows Office 2016 - 激活脚本

脚本下载

Windows Office2016 企业管理激活脚本

@ECHO OFF&PUSHD %~DP0

setlocal EnableDelayedExpansion&color 3e & cd /d "%~dp0"
title office2016 企业管理激活

%1 %2
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof
:runas

if exist "%ProgramFiles%\Microsoft Office\Office16\ospp.vbs" cd /d "%ProgramFiles%\Microsoft Office\Office16"
if exist "%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs" cd /d "%ProgramFiles(x86)%\Microsoft Office\Office16"

echo.
echo                        Office2016版本激活
echo.
echo --------------------------------------------------------------------------------                                                        
echo      脚本用于企业管理激活,请勿用于盗版用途
echo. --------------------------------------------------------------------------------

set /p serverUrl=请输入激活服务器地址:

cscript ospp.vbs /inpkey:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99
cscript ospp.vbs /sethst:%serverUrl%
cscript ospp.vbs /act
PAUSE

如果是PLUS版本可能需要转换为VOL版本

@ECHO OFF&PUSHD %~DP0

setlocal EnableDelayedExpansion&color 3e & cd /d "%~dp0"
title office2016 retail转换vol版

%1 %2
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof
:runas

if exist "%ProgramFiles%\Microsoft Office\Office16\ospp.vbs" cd /d "%ProgramFiles%\Microsoft Office\Office16"
if exist "%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs" cd /d "%ProgramFiles(x86)%\Microsoft Office\Office16"

:WH
cls
echo.
echo                        选择需要转化的office版本序号
echo.
echo --------------------------------------------------------------------------------                                                        
echo                1. 零售版 Office Pro Plus 2016 转化为VOL版
echo.
echo                2. 零售版 Office Visio Pro 2016 转化为VOL版
echo.
echo                3. 零售版 Office Project Pro 2016 转化为VOL版
echo.
echo. --------------------------------------------------------------------------------

set /p tsk="请输入需要转化的office版本序号【回车】确认(1-3): "
if not defined tsk goto:err
if %tsk%==1 goto:1
if %tsk%==2 goto:2
if %tsk%==3 goto:3

:err
goto:WH

:1
cls

echo 重置Office2016零售版本
cscript ospp.vbs /rearm

echo 重置Office2016许可证
for /f %%x in ('dir /b ..\root\Licenses16\proplusvl_kms*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul
for /f %%x in ('dir /b ..\root\Licenses16\proplusvl_mak*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul

echo 重新设置Office2016零售版本
cscript ospp.vbs /inpkey:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99

echo 转换完成,按任意键退出
PAUSE

exit /b

:2
cls

echo 重置Visio2016零售版本
cscript ospp.vbs /rearm

echo 重置Visio许可证信息
for /f %%x in ('dir /b ..\root\Licenses16\visio???vl_kms*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul
for /f %%x in ('dir /b ..\root\Licenses16\visio???vl_mak*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul

echo 安装Visio2016新密钥
cscript ospp.vbs /inpkey:PD3PC-RHNGV-FXJ29-8JK7D-RJRJK

echo 转换完成,按任意键退出
PAUSE

exit /b
:3
cls

echo 重置Project2016零售版本
cscript ospp.vbs /rearm

echo 重置Project2016许可证信息
for /f %%x in ('dir /b ..\root\Licenses16\project???vl_kms*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul
for /f %%x in ('dir /b ..\root\Licenses16\project???vl_mak*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%%x" >nul

echo 安装Project2016的新密钥
cscript ospp.vbs /inpkey:YG9NW-3K39V-2T3HJ-93F3Q-G83KT

echo 转换完成,按任意键退出
PAUSE

exit /b

Operating System Windows 2021-04-26 07:32:47 location_on

Windows10 - BAT激活脚本

脚本分享下载

Windows企业管理激活脚本

@ECHO OFF&PUSHD %~DP0

setlocal EnableDelayedExpansion&color 3e & cd /d "%~dp0"
title Windows 企业管理激活

%1 %2
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof
:runas

echo.
echo                        Windows10版本激活
echo.
echo --------------------------------------------------------------------------------                                                        
echo                脚本用于企业管理激活,请勿用于盗版用途
echo. --------------------------------------------------------------------------------

set /p windowsKey=输入WIndows10密钥:
set /p serverUrl=输入管理服务器地址:

slmgr.vbs -ipk %windowsKey%
slmgr.vbs -skms %serverUrl%
slmgr.vbs -ato

Operating System Windows 2021-04-26 07:33:37 location_on

Python - 为www-data用户安装pip包

通常在服务器上部署Python的Web服务时要搭配Nginx等web服务器,Nginx的默认用户是www-data

服务器如果也部署了其他web应用,如PHP,可以看到PHP也是使用www-data用户(当然也可以自己更改)

在Python3中,我们使用pip安装包时,通常是安装在当前用户的Home目录下,如

  • /home/chancel/.local/bin/

www-data如果要安装pip包,也必须具有Home目录,所以我们给www-data设置一个目录

sudo mkdir /var/www/.local

sudo mkdir /var/www/.cache

sudo chown www-data.www-data /var/www/.local

sudo chown www-data.www-data /var/www/.cache

设置完成后,尝试使用www-data用户安装pip包

sudo -H -u www-data pip install PyYAML

Develop Base Python 2021-04-21 09:27:06 location_on

Linux - 利用Curl操作WebDAV文件服务器

在命令行模式下通常我们需要拷贝日志或SQL文件用于日志分析数据分析,这个时候通常的做法是使用SCP或基于SCP的扩展软件如Winscp等工具

也有不少第三方的SSH工具自带文件管理,通常足够满足我们对于服务器文件的管理,但也有特殊情况

如PVE或者堡垒机等在网页上操作服务器,这个时候我们无法使用常规手段获取到服务器的文件,在网页的命令行中分析文件是在是一件要命的事情

恰好手头有一个能用的WebDAV服务器(通常家庭NAS/服务器文件管理器Web服务都会带),那就可以利用CURL来上传/下载文件

获取服务器dav文件列表,理论上应该会返回文件列表,但我的WebDAV服务器仅返回“Not Found”

❯ curl --user "username:password" 'https://www.chancel.ltd/dav/'
Not Found

上传文件

❯ curl --user "username:password" -T '/root/codes/route_restart/demo.log' 'https://www.chancel.ltd/dav/demo.log'

读取文件

❯ curl --user "username:password" 'https://www.chancel.ltd/dav/demo.log'

删除文件

❯ curl -X DELETE --user "username:password" 'https://www.chancel.ltd/dav/demo.log'

Develop Base Linux 2021-04-20 03:35:41 location_on

Haproxy - http代理的负载均衡配置文件

在封闭内网,有多个HTTP代理服务器做正向代理访问外网,使用Haproxy做简单的配置

global
    # 最大并发2000
    maxconn 2000
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

    # Default SSL material locations
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

       # 日志配置,需要搭配rsyslog实现,日志等级local2
    log 127.0.0.1 local2

    # Default ciphers to use on SSL-enabled listening sockets.
    # For more information, see ciphers(1SSL). This list is from:
    #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
    # An alternative list with additional directives can be obtained from
    #  https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
    ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
    ssl-default-bind-options no-sslv3

defaults
    log global
    mode    http
    option  httplog
    option  dontlognull
        timeout connect 30s
        timeout client  30s
        timeout server  30s
    maxconn 2000

frontend http-proxy
    bind *:33128
    mode http
    # 以下3句只允许172.16.1.2访问,不允许其他来源ip访问
    acl allow_host src 172.16.1.2
    tcp-request content accept if allow_host
    tcp-request content reject
    default_backend http-proxy-backend

backend http-proxy-backend
    mode http
    balance roundrobin
    option  redispatch
    # 超出最大请求数则排队30秒
    timeout queue 30s
    default-server check inter 1000 rise 1 fall 1 maxconn 2000
    server  http-proxy-1   172.16.1.11:3128 
    server  http-proxy-2   172.16.1.12:3128
    server  http-proxy-3   172.16.1.13:3128

# 监控面板,访问8404
listen stats
    bind *:8404
    stats enable
    stats uri /monitor
    stats refresh 5s

如果需要将访问信息输出到 /var/log/haproxy.log,则需要修改/etc/rsyslog.conf,在文件尾添加如下配置

...

$ModLoad imudp
$UDPServerRun 514

local2.* /var/log/haproxy.log

Network 2021-04-13 03:41:52 location_on

如何测试程序的并发量支持?

对于Web服务程序来讲,衡量并发性能通常会用到2个概念

QPS(Queries Per Second)

  • 每秒请求数,一般情况下指1秒内处理完成多少个流量请求

TPS(Transactions Per Second)

  • 每秒事务数,与QPS相比,TPS一般指1秒内能处理完成多少个原子操作请求

对于并发测试,通常可以写异步请求代码来做测试,更方便的方法可以使用apache的ab工具来做测试

使用 ab 指令来确认系统是否有安装,如无,则可以尝试安装apache

sudo apt install apache

使用ab来测试并发性,-n表示请求总数,-c表示请求并发数

ab -n 1000 -c 100 http://www.baidu.com/

例子:使用10个并发数请求1000次 http://www.baidu.com/ 如下

❯ ab -n 1000 -c 10 http://www.baidu.com/
                                                                                       ~
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking v.hao123.baidu.com [through 10.0.0.155:3128] (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        Apache
Server Hostname:        v.hao123.baidu.com
Server Port:            80

Document Path:          /dongman/
Document Length:        28430 bytes

# 并发数
Concurrency Level:      10
# 总请求时间
Time taken for tests:   32.629 seconds
# 完成的请求(包含失败)
Complete requests:      1000
# 失败的请求
Failed requests:        13
   (Connect: 0, Receive: 0, Length: 13, Exceptions: 0)
Non-2xx responses:      11
Total transferred:      28799265 bytes
HTML transferred:       28109801 bytes
# 每秒请求数(系统吞吐量)
Requests per second:    30.65 [#/sec] (mean)
# 请求平均等待时间(毫秒)
Time per request:       326.287 [ms] (mean)
# 服务器平均处理时间
Time per request:       32.629 [ms] (mean, across all concurrent requests)
Transfer rate:          861.95 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       1
Processing:     1  323 672.7    224    7378
Waiting:        1  205 588.6    119    7201
Total:          2  323 672.7    224    7378

Percentage of the requests served within a certain time (ms)
  50%    224
  66%    267
  75%    305
  80%    343
 # 90%的请求在447毫秒内返回
  90%    447
  95%    620
  98%    927
  99%   3514
 100%   7378 (longest request)

ab压力测试HTTPS通常会有不支持证书等问题,所以也可以使用siege来做压力测试

sudo apt install siege

使用siege来测试并发数,-c表示并发数,-r表示重复次数

siege -c 20 -r 10 https://www.baidu.com

举例如下

❯ siege -c 20 -r 10 https://www.baidu.com
{   
       "transactions":                  4217,
    "availability":                93.03,
    "elapsed_time":               185.07,
    "data_transferred":            55.28,
    "response_time":                0.35,
    "transaction_rate":            22.79,
    "throughput":                   0.30,
    "concurrency":                  7.90,
    "successful_transactions":          4250,
    "failed_transactions":               316,
    "longest_transaction":             14.54,
    "shortest_transaction":             0.07
}

其参数含义如下

参数 解释
transactions 请求总次数
availability 请求成功百分比
elapsed_time 请求所耗费总时间
data_transferred 请求总数据量大小
response_time 请求的响应时间
transaction_rate 请求的处理请求频率
throughput 系统吞吐量(网络传输速度)
concurrency 请求并发连接数
successful_transactions 请求成功次数
failed_transactions 请求失败次数
longest_transaction 请求最大耗时
shortest_transaction 请求最短耗时

Network 2021-04-08 07:56:23 location_on

Android - 国外第三方原生Rom

资料来源

备份下以便日后查询

  • Pixel Experience
  • LineageOS
  • Evolution X
  • Corvus OS
  • Revenge OS
  • Havoc-OS
  • Arrow OS
  • Bliss ROM
  • Project Sakura
  • MSM Extended
  • crDroid
  • Paranoid Android

Operating System 2021-04-06 04:01:37 location_on

Python3 - logging 以yaml形式配置项目日志

logging 支持YAML格式的日志配置文件,在项目入口main文件同一层添加logging.yaml文件,内容如下

version: 1
formatters:
  common:
    format: "%(asctime)s - %(levelname)s - %(threadName)s - %(message)s"
    datefmt: "%Y/%m/%d %H:%M:%S"
  console:
    format: "%(asctime)s - %(levelname)s - %(pathname)s - %(message)s"
    datefmt: "%Y/%m/%d %H:%M:%S"
handlers:
  # 不同会输出大于等于此级别的信息。
  common:
    class: logging.handlers.TimedRotatingFileHandler
    formatter: common
    level: INFO
    when: D
    interval: 1
    encoding: utf8
    filename: "logs/running.log"
    # suffix: "%Y-%m-%d.log"
    # 日志保留个数
    backupCount: 7
  console:
    class : logging.StreamHandler
    formatter: console
    level   : INFO
    stream  : ext://sys.stdout
loggers:
  main.common:
    level: INFO
    handlers: [common]
# 如果模块中没有使用 如logging.getLogger('main.common') 这样的配置来获取loggers中对应的配置,则默认会使用下面的root配置
root:
  level: DEBUG
  handlers: [console]

在main文件配置logging模块

import os
import yaml
import logging
import logging.config

os.chdir(os.path.abspath(os.path.dirname(os.path.abspath(__file__))))

# Logger config
if not os.path.exists('logs'):
    os.mkdir('logs')
# 日志配置
with open('logging.yaml', 'r', encoding='utf-8') as f:
    config = yaml.load(f, Loader=yaml.FullLoader)
    logging.config.dictConfig(config)
logger = logging.getLogger('main.common')

Develop Technology Python 2021-04-06 02:09:28 location_on

PVE - 关机并休眠PVE的所有虚拟机

关机并休眠所有虚拟机

qm list | grep running | awk -F'[^0-9]*' '$0=$2' | while read -r vm_id; do qm suspend $vm_id --todisk 1; done; shutdown -h now

核心点在于如何休眠单台机器

qm suspend 100 --todisk 1

参考资料

Virtualization Technology Linux 2021-03-26 16:07:30 location_on

1 of 13 | A total of 128