首页
关于道锋
工具
友情链接
公告栏
麟图图床
麟云文件
麟云KMS
麟云工具
麟云证书管理
Search
1
使用ReDroid打造自己的云手机
2,260 阅读
2
兽装曲腿制作文档
1,747 阅读
3
Cloudflare SAAS 接入自选教程
1,673 阅读
4
Frpc使用XTCP不通过服务器传输
1,560 阅读
5
CloudFront CDN配置教程
962 阅读
默认
科学
热力学
Furry
小说
星河野望
手工制作
道具制作
音影
图像工具
计算机
渗透
硬件
编程
网络
记录
AI人工智能
CVE
软件工具
装机教程
C/C++
C#
Go
HTML5+JS+CSS
JAVA
Lua
Rust
PHP
Python2/3
Nodejs
编译
C/C++学习日志
Golang学习日志
Rust开发技巧
Rust学习日志
Rust开发教程
Nonebot2机器人框架
python开发教程
python开发技巧
Python学习日志
ai绘画
电子电路
电路设计
PCB打板
制作实战
无线电
摄影
运维
WEB
KVM云计算
docker
Ansible
代码管理
Kubernetes
Linux
MySQL
shell
集群
Zabbix
Prometheus
数据安全
Redis
istio
ELK
Nginx
Apache
Tomcat
Elasticsearch
Logstash
Kibana
测评
服务器
登录
Search
标签搜索
开源
源码
教程
服务器
环境搭建
摄影
rustlang
Rust
VS CODE
v2ray
bbr
加速
网络优化
拥塞控制
CloudFront教程
CF教程
AWS教程
CloudFront接入
Frpc
Frps
道锋潜鳞
累计撰写
443
篇文章
累计收到
114
条评论
首页
栏目
默认
科学
热力学
Furry
小说
星河野望
手工制作
道具制作
音影
图像工具
计算机
渗透
硬件
编程
网络
记录
AI人工智能
CVE
软件工具
装机教程
C/C++
C#
Go
HTML5+JS+CSS
JAVA
Lua
Rust
PHP
Python2/3
Nodejs
编译
C/C++学习日志
Golang学习日志
Rust开发技巧
Rust学习日志
Rust开发教程
Nonebot2机器人框架
python开发教程
python开发技巧
Python学习日志
ai绘画
电子电路
电路设计
PCB打板
制作实战
无线电
摄影
运维
WEB
KVM云计算
docker
Ansible
代码管理
Kubernetes
Linux
MySQL
shell
集群
Zabbix
Prometheus
数据安全
Redis
istio
ELK
Nginx
Apache
Tomcat
Elasticsearch
Logstash
Kibana
测评
服务器
页面
关于道锋
工具
友情链接
公告栏
友人
PCD-01’s Blog
iMin博客
特资啦!个人资源分享站
黎洛云综合门户网站
三石的记录
咬一口激动的鱼
中二病晚期の物語
奇梦博客
布丁の小窝
道麟笔记
迷失的小K
koto's Site
Abyss-博客
西西のBlog
锐冰龙小站
Nick的琐碎日常
渣渣120
麟图图床
麟云文件
麟云KMS
麟云工具
麟云证书管理
搜索到
22
篇与
的结果
2024-08-25
新版ubuntu使用pip时发生的错误
新版ubuntu使用pip时发生错误:error: externally-managed-environment × This environment is externally managed ╰─> To install Python packages system-wide, try apt install python3-xyz, where xyz is the package you are trying to install. If you wish to install a non-Debian-packaged Python package, create a virtual environment using python3 -m venv path/to/venv. Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make sure you have python3-full installed. If you wish to install a non-Debian packaged Python application, it may be easiest to use pipx install xyz, which will manage a virtual environment for you. Make sure you have pipx installed. See /usr/share/doc/python3.11/README.venv for more information. note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages. hint: See PEP 668 for the detailed specification.收到一个错误提示: error: externally-managed-environment ,即“外部管理环境”错误,但这不是一个 bug,新的发行版中,正在使用 Python 包来实现此增强功能,这个更新是为了避免操作系统包管理器 (如pacman、yum、apt) 和 pip 等特定于 Python 的包管理工具之间的冲突,这些冲突包括 Python 级 API 不兼容和文件所有权冲突。可以看一下python官方的说明:PEP 668 – Python base environments Python 增强提案 (PEP) 解决方案:1:如果你习惯于原来的用法可以强制删除此警告:sudo mv /usr/lib/python3.x/EXTERNALLY-MANAGED /usr/lib/python3.x/EXTERNALLY-MANAGED.bk注意python版本号写你自己的别直接抄,不知道到底是多少可以进/user/lib看看:find /usr/lib/ -type d -name "*python*"2:老实点使用pipx安装pipx:sudo apt install pipx以后就使用Pipx去安装包文件了:pipx install package_name添加环境变量:pipx ensurepath删除使用pipx安装的软件包:pipx uninstall package_name3:使用venv如果你是专业开发人员,在运行或构建py文件时遇到“ModuleNotFoundError: No module named 'xxx'”错误,推荐使用Python虚拟环境,借助虚拟环境,使用不同版本的包依赖项和Python,避免包之间的任何冲突。安装 venv:sudo apt install python3-venv #或者 sudo apt install python3.10-venv生成Python虚拟环境:mkdir -p $HOME/.env && python3 -m venv $HOME/.env/project_name将看到一个.env在主目录中,并且你将在 .env 中拥有项目目录,每个虚拟环境项目目录中都会有自己的 Python 和 Pip 副本。安装模块:$HOME/.env/project_name/bin/python -m pip install --upgrade pip $HOME/.env/project_name/bin/python -m pip install package_name用新的虚拟环境执行py文件:source $HOME/.env/project_name/bin/activate $HOME/.env/project_name/bin/python ./xxxx.py
2024年08月25日
47 阅读
0 评论
0 点赞
2024-01-13
使用ReDroid打造自己的云手机
前言市面上已经存在很多云手机厂商如红手指、多多云、雷电云、河马云手机等,价格从几十到上百元每月一台。价格还好说,但设备运行稳定性、可靠性、数据安全性全部依赖第三方厂商,注定不能进行敏感性操作或部署对安全可靠高要求的企业级服务。本文介绍一种开源的 AIC (Android In Container) 解决方案 ReDroid,使用本教程可以在一台普通型服务器运行多个安卓设备环境,并可在客户机电脑连接使用该云手机。Redroid介绍redroid(Remote an Droid)是一个 GPU 加速的 AIC(Android In Cloud)解决方案。Docker您可以在 Linux 主机( 、podman等)中启动多个实例k8s。redroid支持arm64和amd64架构。 redroid适用于云游戏、虚拟化电话、自动化测试等。目前支持:安卓 14 ( redroid/redroid:14.0.0-latest)仅适用于 Android 14 64 位 ( redroid/redroid:14.0.0_64only-latest)安卓 13 ( redroid/redroid:13.0.0-latest)仅适用于 Android 13 64 位 ( redroid/redroid:13.0.0_64only-latest)安卓 12 ( redroid/redroid:12.0.0-latest)仅适用于 Android 12 64 位 ( redroid/redroid:12.0.0_64only-latest)安卓 11 ( redroid/redroid:11.0.0-latest)安卓 10 ( redroid/redroid:10.0.0-latest)安卓 9 ( redroid/redroid:9.0.0-latest)安卓 8.1 ( redroid/redroid:8.1.0-latest)入门redroid 应该能够在任何 Linux 上运行(启用一些内核功能)。这里以使用阿里云的X86服务器进行演示,具体如下:配置:vCPUs2内存2G储存40G系统ubuntu-22.04架构x86-64带宽3M安装Docker## 安装 docker https://docs.docker.com/engine/install/#server # 根据 Docker 官方文档安装Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh #或者从仓库下载 sudo apt update sudo apt-get install -y docker.io systemctl start docker systemctl enable docker 安装内核扩展模块更具不同的系统,有不一样的安装方法,具体如下 # 拉取内核模块源码 git clone https://github.com/remote-android/redroid-modules cd ./redroid-modules # Ubuntu 16.04 / 18.04 / 20.04 sudo apt-get install -y git kmod make gcc linux-headers-`uname -r` sudo make # build kernel modules sudo make install # build and install *unsigned* kernel modules # Ubuntu 20.04+ (kernel 5.0+) sudo modprobe ashmem_linux sudo modprobe binder_linux devices=binder,hwbinder,vndbinder # AmazonLinux2 git checkout origin/amazonlinux2 sudo yum install git kmod make "kernel-devel-uname-r == `uname -r`" sudo make # build kernel modules sudo make install # build and install *unsigned* kernel modules # Alibaba Cloud Linux 2 git checkout origin/alibabalinux2 sudo yum install git kmod make "kernel-devel-uname-r == `uname -r`" sudo make # build kernel modules sudo make install # build and install *unsigned* kernel modules # Alibaba Cloud Linux 3 git checkout origin/alibabalinux3 sudo yum install git kmod make "kernel-devel-uname-r == `uname -r`" sudo make # build kernel modules sudo make install # build and install *unsigned* kernel modules # openEuler 20.03 / kernel 4.19 git checkout origin/openeuler2003 sudo yum install gcc kernel-devel sudo KDIR=/usr/src/kernels/<VER> make install # 检查模块状态 lsmod | grep -e ashmem_linux -e binder_linux # example output: # binder_linux 147456 79 # ashmem_linux 16384 23 # 也可以这样验证 grep binder /proc/filesystems # output should like: nodev binder grep ashmem /proc/misc # output should like: 56 ashmem我这边因为是ubuntu 22.04,便使用 modprobe 安装如果不想换系统,可以尝试升级内核到5.0以上,默认就自带相关模块了启动容器创建Docker-compose文件docker-compose.ymlversion: "3" services: redroid: image: redroid/redroid:11.0.0-latest stdin_open: true tty: true privileged: true ports: - "20055:5555" volumes: # 資料存放在目前目錄下 - ./redroid-11-data:/data command: # 設定libndk相關 - ro.product.cpu.abilist0=x86_64,arm64-v8a,x86,armeabi-v7a,armeabi - ro.product.cpu.abilist64=x86_64,arm64-v8a - ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi - ro.dalvik.vm.isa.arm=x86 - ro.dalvik.vm.isa.arm64=x86_64 - ro.enable.native.bridge.exec=1 - ro.dalvik.vm.native.bridge=libndk_translation.so - ro.ndk_translation.version=0.2.2 - ro.secure=0 cap_add: - CAP_SYS_MODULE 启动容器#确保安装了docker-compose apt install docker-compose # 进入储存docker-compose.yml的目录 cd /data/redroid-1 docker-compose up -d如果使用 22.04可能出现如下异常解决方案pip install 'urllib3<2'链接根据 Scrcpy 官方文档下载安卓投屏软件源码包到客户机,解压使用adb connect ip:5555 # adb devices 可查看连接设备列表 scrcpy --serial ip:5555高级一些额外参数样例docker run -itd --rm --privileged \ --pull always \ -v ~/data:/data \ --cap-add CAP_SYS_MODULE \ -p 5555:5555 \ redroid/redroid:11.0.0-latest \ androidboot.redroid_width=1080 \ androidboot.redroid_height=1920 \ androidboot.redroid_dpi=480 \参数描述默认androidboot.redroid_width显示宽度720androidboot.redroid_height显示高度1280androidboot.redroid_fps显示 FPS30(启用 GPU) 15(未启用 GPU)androidboot.redroid_dpi显示 DPI320androidboot.use_memfd使用 memfd 替换已弃用的 ashmem计划默认启用假androidboot.use_redroid_overlayfs使用overlayfs共享data分区/data-base:共享data分区/data-diff:私有数据0androidboot.redroid_net_ndnsDNS 服务器数量,如果未指定 DNS 服务器,将使用“8.8.8.8”0androidboot.redroid_net_dns<1..N>域名解析 androidboot.redroid_net_proxy_type代理类型;从以下选项中选择:“静态”、“pac”、“无”、“未分配” androidboot.redroid_net_proxy_host androidboot.redroid_net_proxy_port 3128androidboot.redroid_net_proxy_exclude_list逗号分隔列表 androidboot.redroid_net_proxy_pac androidboot.redroid_gpu_mode从以下选项中选择:auto、host、guest;guest:使用软件渲染;host:使用 GPU 加速渲染;auto:自动检测自动androidboot.redroid_gpu_node 自动检测ro.xxxDEBUG 目的,允许覆盖 ro.xxx 属性;例如设置ro.secure=0,则默认提供root adb shell
2024年01月13日
2,260 阅读
0 评论
2 点赞
2023-08-11
D-Link Go-RT-AC750命令注入漏洞复现
D-Link Go-RT-AC750命令注入漏洞复现
2023年08月11日
234 阅读
0 评论
0 点赞
2021-12-20
Docker 重置 docker0 网卡
作者在使用docker的过程中,遇到了件糟心事。我的宿主机莫名其妙被封了ip,据说是由于莫名其妙的疑似攻击行为(我寻思着我打攻击干嘛啊?)然后起初不知道,因为那天堪萨斯机房刚刚好刮风,吧网给挂断了,本以为只是网的问题,一波操作吧全部网卡配置全咔嚓掉了,重新配置eth0。很显然,网还是不通。。。然后今天,机房那边给我解了这子虚乌有的封禁,进了一波机器,重启了一下,然后苦逼的发现图床怎么502了!!!进了ifconfig看了一下,好家伙,docker0的网卡没ip了。。咋办呢,重新装docker不成?不重新安装?图床,小说网都搁那502,宿主机不通容器。。理解Docker0Docker启动的时候会在主机上自动创建一个docker0网桥,实际上是一个Linux网桥,所有容器的启动如果在docker run的时候没有指定网络模式的情况下都会挂载到docker0网桥上。这样容器就可以和主机甚至是其他容器之间通讯了。那安装这么说,我能不能先关闭docker,然后删除这个网桥,最后再重载docker呢实践我的宿主机使用的是centos8系统,以centos8为例```yang pkill docker iptables -t nat -F ifconfig docker0 down ## 删除docker0 网卡 nmcli c delete docker0 nmcli d delete docker0 docker -d systemctl restart docker ```首先先杀掉docker进程(最好先保存一下运行的容器)然后使用iptables清除所有的网桥配置然后关闭目标网卡,删除目标网卡最后重载docker结束经过一番瞎几把操作,宿主机和容器的通信恢复输入ifconfig也能查看到docker0获取到了地址同时容器的子虚拟网卡也正常运行
2021年12月20日
219 阅读
0 评论
0 点赞
2021-10-16
BBR一键脚本 BBR/BBR Plus/魔改BBR/锐速(LotServer)四合一
关于BBR Plus,什么是BBR?BBR是Google推出的一套拥塞控制算法,集成在最新的Linux内核中。BBR应用在VPS服务器上,可以明显改善服务器的网络传输速度,减少丢包。而BBR Plus版本,以及魔改版BBR,则是网友在原版BBR的基础上,对一些参数进行改良后的修正版本,比原版BBR有着更为显著的加速效果。至于两个改良版本哪个加速效果更好,大家可以分别安装测试,选取最适合自己的版本。下文会提供各版本的一键安装脚本。BBR Plus版本的优点:修正了原版BBR的以下两项缺点,加速效果更好:在高丢包率环境下容易失速收敛慢BBR Plus版本的不足:脚本仍在完善阶段,在少部分系统中可能会安装失败。由于涉及到内核的修改,部分系统环境下,可能会导致重启无法进入系统。虽然加速效果更好,但是考虑到系统数据安全的话,还是建议大家以试用为主,不要在生产环境下尝试安装BBR Plus。总的来说,BBR作为在Cubic之后提出的拥塞控制算法,它的有很多优点,并且解决了Cubic算法存在的一些问题,但是因为它并非是采用丢包作为拥塞信号,也带来了一些新的问题。BBR的公平性存在问题,它会抢占Cubic算法的带宽(取决于瓶颈缓冲区的大小)BBR的机制会导致高重传率 BBR目前来看,只能说和Cubic更有优劣,两者擅长处理的网络环境并不相同。不过它不采用丢包作为拥塞信号,而是通过自己评估,也许会在其他的环境下取得更好的成绩,比如说和强化学习相结合。BBR Plus一键安装脚本(四合一)本文介绍的BBR Plus一键安装脚本数据源,来自网友cx9208的Github参考,在此感谢一下。除了BBR Plus外,此脚本还另外集成有原版BBR一键安装、魔改BBR一键安装、锐速(lotServer)一键安装,为四合一版本,四个版本可以切换使用。另外,鉴于市面上目前的bbr一键脚本为直接从github获取数据,如果想要在中国大陆内使用的话,难免会遇到大范围的网络波动情况,甚至无法使用。因此在中间介入了反向代理系统,用于向全球范围内提供数据分发能力,也为大陆用户的体验提升了一个档次适用架构:KVM / Xen,不支持OpenVZ(OVZ)。适用系统:CentOS 7、Debian 8、Debian 9、Ubuntu 16.04、Ubuntu 18.04。BBR Plus一键安装脚本使用:1.FinalShell,Xshell,Putty连接VPS服务器,运行如下脚本:wget --no-check-certificate -O tcp.sh https://www.silverdragon.cn/downloads/tcp.sh && chmod +x tcp.sh && ./tcp.sh2.接下来会出现菜单选择界面,如下图所示,我们需要先安装对应的内核,之后再开启加速。以BBR Plus版本为例,输入对应的数字2回车,开始安装内核。3.原有内核卸载完毕,新内核安装成功后,会出现下图提示重启,输入Y回车或直接回车重启:4.重启后再次用Putty连接VPS服务器,运行如下命令重新打开脚本:./tcp.sh5.在脚本菜单选项中,输入数字7回车,开启BBR Plus加速:6.出现下图提示,则表示BBR Plus加速成功开启:7.如果需要安装或切换其它版本的加速,比如原版BBR、魔改BBR、锐速(LotServer)等,那么需要重新进行以上各流程,选择对应版本的内核,内核安装成功后重启系统开启加速。8.最后,可以再次运行脚本,输入10来对系统网络配置进行优化,然后安装提示重启
2021年10月16日
191 阅读
0 评论
0 点赞
2021-10-12
V2Ray 搭建教程以及一键安装脚本
V2Ray 是一个网络转发程序,支持 TCP、mKCP、WebSocket 这3种底层传输协议,支持 HTTP、Socks、Shadowsocks、VMess 这4种内容传输协议(HTTP 只支持传入),并且有完整的 TLS 实现,是一个非常强大的平台。V2Ray 简介官网:https://www.v2ray.comProject VProject V 是一个工具集合,它可以帮助你打造专属的基础通信网络。Project V 的核心工具称为 V2Ray,其主要负责网络协议和功能的实现,与其它 Project V 通信。V2Ray 可以单独运行,也可以和其它工具配合,以提供简便的操作流程。主要特性多入口多出口: 一个 V2Ray 进程可并发支持多个入站和出站协议,每个协议可独立工作。可定制化路由: 入站流量可按配置由不同的出口发出。轻松实现按区域或按域名分流,以达到最优的网络性能。多协议支持: V2Ray 可同时开启多个协议支持,包括 Socks、HTTP、Shadowsocks、VMess 等。每个协议可单独设置传输载体,比如 TCP、mKCP、WebSocket 等。隐蔽性: V2Ray 的节点可以伪装成正常的网站(HTTPS),将其流量与正常的网页流量混淆,以避开第三方干扰。反向代理: 通用的反向代理支持,可实现内网穿透功能。多平台支持: 原生支持所有常见平台,如 Windows、Mac OS、Linux,并已有第三方支持移动平台。安装 V2Ray在开始安装之前,安装一些必要的软件:Ubuntu/Debian 系统: apt-get update -y && apt-get install curl -yCentOS 系统: yum update -y && yum install curl -y为了简化安装,我们使用一键安装脚本,使用现成的一键安装脚本,使用 root 用户输入下面命令安装:bash <(curl -s -L https://git.io/v2ray.sh)然后选择安装,即是输入 1 回车选择传输协议,如果没有特别的需求,使用默认的 TCP 传输协议即可,直接回车选择端口,如果没有特别的需求,使用默认的端口即可,直接回车是否屏蔽广告,除非你真的需要,一般来说,直接回车即可是否配置 Shadowsocks ,如果不需要就直接回车,否则就输入 Y 回车Shadowsocks 端口,密码,加密方式这些东西自己看情况配置即可,一般全部直接回车。。OK,按回车继续最后安装完成后会提示安装信息,建议记录下。V2Ray 高级玩法快速管理 V2Rayv2ray info:查看 V2Ray 配置信息v2ray config:修改 V2Ray 配置v2ray link:生成 V2Ray 配置文件链接v2ray infolink:生成 V2Ray 配置信息链接v2ray qr:生成 V2Ray 配置二维码链接v2ray ss:修改 Shadowsocks 配置v2ray ssinfo:查看 Shadowsocks 配置信息v2ray ssqr:生成 Shadowsocks 配置二维码链接v2ray status:查看 V2Ray 运行状态v2ray start:启动 V2Rayv2ray stop:停止 V2Rayv2ray restart重启 V2Rayv2ray log:查看 V2Ray 运行日志v2ray update:更新 V2Rayv2ray update.sh:更新 V2Ray 管理脚本v2ray uninstall:卸载 V2RayTCP 阻断如果觉得机器出现了这种情况,那么可以尝试使用 UDP 协议相关的 mKCP。如果使用了一键脚本,直接输入 v2ray config 然后选择修改 V2Ray 传输协议,之后再选择 mKCP 相关的就行备注:使用 mKCP 或许还可以提高速度,但由于 UDP 的原因也许会被运营商 Qos,这是无解的。WebSocket + TLS实现 WebSocket + TLS 很简单,前提是要拥有一个能正常解析的域名 (并且知道怎么解析域名)服务器输入 v2ray config 回车,然后选择 修改 V2Ray 传输协议,再选择 WebSocket + TLS,即是输入 4,接着输入你的域名,总之按照提示进行操作就可以了HTTP/2实现 HTTP/2 (h2) 也很简单,和 WebSocket + TLS 一样,也就是只要一个域名就够了。服务器输入 v2ray config 回车,然后选择 修改 V2Ray 传输协议,再选择 HTTP/2,即是输入 16,然后参考上面的 WebSocket + TLS 的相关,或者按照提示即可。HTTP/2 相比 WS + TLS (WebSocket + TLS),在浏览网页时有一些优势,其他速度是差不多mKCPmKCP 其实就是 KCP 协议,一般能提速,但是不保证都能提速,还能避免 TCP 阻断,但是也可以会被运营商 Qos.使用方法:服务器输入 v2ray config 回车,然后选择 修改 V2Ray 传输协议,之后再选择 mKCP 相关的就行
2021年10月12日
266 阅读
0 评论
0 点赞
2021-09-16
使用python将多份pdf文件合并
为了搞定这件事情,没少百度,下载了软件,或者使用在线工具,折腾很久才能搞定。刚想使用WPS来合并,结果给我弹出这样的:怎么可能有那闲钱开通哪不过,想起来python有这样一个库,倒是可以帮忙实现这样的需求。于是抱着开源以及能省就省的精神,使用 PyPDF2 这个写了一个简短的小脚本PyPDF2 是一个功能虽然不是很多,但却非常好用的第三方库,它提供了pdf文件的读写,拆分,合并等功能,使用pip命令进行安装pip3 install PyPDF2示例代码如下,会在当前运行目录下寻找pdf后缀的文件来合并,建议使用的时候新建一个文件夹并且将文件用序号命名顺序。import os from PyPDF2 import PdfFileMerger target_path = os.getcwd() pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')] pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst] print(pdf_lst) file_merger = PdfFileMerger() for pdf in pdf_lst: file_merger.append(pdf) # 合并pdf文件 file_merger.write("merge.pdf")1.使用os.listdir方法获取制定目录下的所有pdf文件名称2.使用os.path.join方法拼接成绝对路径3.创建PdfFileMerger对象,这是专门用来合并pdf文件的4.对象将所有文件append5.最后,使用write方法将所有pdf文件写入到一个文件
2021年09月16日
119 阅读
0 评论
0 点赞
2021-02-04
支付宝五福自动脚本
源代码都给了,凑合着看吧源码来自一个不愿意透露姓名的开源人士,应要求将封面头图设为他头像使用方法:首先输入要领取的站点开始的序号,总共53个站点可以领取每隔77s会自动切换到下个站点进行领取,已经领取成功的,会进行记录,下次程序运行时将忽略领取成功的站点如果要换手机号领取,在一开始输入1确认,会自动把success.json覆盖掉,不然会因为上个手机号领取成功的站点而进行跳过。注意:支付宝此活动不能连续获得60(2月3日,根据大家的情况反映,支付宝已经把风控数量调整到10个验证码左右,24小时后解除风控)个验证码,否则24小时内无法再参加此次活动!程序暂无GUI页面,先凑合着用把。site.json、default.json和success.json必须和程序在一个目录,否则程序会闪退因为此次支付宝五福为了让大家交换卡,每人获得除了敬业福之外的随机两种福的概率是最大的,所以一般会大量开出两种福,这是正常现象。主要代码:import requests import os import codecs import sys import time import json import re from shutil import copyfile class WebRequests: def __init__(self): self.dirPath = '' self.getCaptchaUrl = 'https://rds.alipay.com/captcha.htm' self.getResultUrl = 'https://mobilegw.alipay.com/mgw.htm' self.operationType = { 'sendVerifyCode': 'alipay.tradecsa.biz.blessingprod.wufu2021.sendVerifyCode', 'outPrize': 'alipay.tradecsa.biz.blessingprod.wufu2021.outPrize' } self.s = requests.Session() self.headers = { 'User-Agent': 'Mozilla/5.0 (Linux; U; Android 10; zh-CN; MI 9 Build/QKQ1.190828.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 Quark/4.3.3.145 Mobile Safari/537.36 Edg/89.0.4389.6', 'DNT': '1' } def loads_jsonp(self, _jsonp): try: return json.loads(re.match(".*?({.*}).*", _jsonp, re.S).group(1)) except: raise ValueError('Invalid Input') def getCaptcha(self, mobile, source): digits = 32 hex = codecs.encode(os.urandom(digits), 'hex').decode() data = { 'appid': "blessingprod_wufu_otp", 'bizNo': hex, 'mobile': mobile, 'refer': "", 'scene': "DO_NOTHING", 'type': "silence", 'useragent': "Mozilla/5.0 (Linux; U; Android 10; zh-CN; MI 8 UD Build/QKQ1.190828.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 Quark/4.3.3.145 Mobile Safari/537.36 Edg/89.0.4389.6" } self.s.options(self.getCaptchaUrl) try: r = self.s.post(self.getCaptchaUrl, json=data, headers=self.headers) # print(r.text) rdsToken = json.loads(r.content)['data']['extra']['token'] requestData = [{"mobile": mobile, "source": source, "rdsBizNo": hex, "rdsToken": rdsToken}] getResultData = { '_fli_online': True, 'operationType': self.operationType['sendVerifyCode'], 'requestData': str(requestData), '_': int(round(time.time() * 1000)), 'callback': 'jsonp' + str(int(round(time.time() * 1000))) } re = self.s.get(self.getResultUrl, params=getResultData, headers=self.headers) # 'jsonp16121({"resultStatus":1000,"result":{"code":"5101","resultView":"人气太旺了,请稍后再试","success":true}})' # print(re.text) re_json = self.loads_jsonp(re.text) if re_json['result']['success'] == True: return {"code": 1000, "info": f'成功获取验证码,请注意查收'} else: resultView = re_json['result']['resultView'] return {"code": 1001, "info": f'获取验证码失败,原因为{resultView}'} except Exception as e: return {"code": 1001, "info": f'获取验证码失败,原因为 {e}'} def getResult(self, mobile, source, ackCode): requestData = [ {"mobile": mobile, "source": source, "ackCode": str(ackCode)}] getResultData = { '_fli_online': True, 'operationType': self.operationType['outPrize'], 'requestData': str(requestData), '_': int(round(time.time() * 1000)), 'callback': 'jsonp' + str(int(round(time.time() * 1000))) } try: re = self.s.get(self.getResultUrl, params=getResultData, headers=self.headers) # jsonp16121({"resultStatus":1000,"result":{"code":"50144","hasPrized":false,"hasUserId":false,"resultView":"已经领取过奖品","success":false}}) # print(re.text) re_json = self.loads_jsonp(re.text) if re_json['result']['success'] == True: return {"code": 1000, "info": f'成功领取'} else: resultView = re_json['result']['resultView'] return {"code": 1001, "info": f'领取失败,原因为 {resultView}'} except Exception as e: return {"code": 1001, "info": f'领取失败,原因为 {e}'} def getSiteNum(self): path = os.path.join(self.dirPath, "site.json") with open(path, 'r', encoding='utf8')as fp: json_data = json.load(fp) return len(json_data['channelList']) def getSiteInfo(self, num): path = os.path.join(self.dirPath, "site.json") with open(path, 'r', encoding='utf8')as fp: json_data = json.load(fp) length = len(json_data['channelList']) if num > length: print(f"站点的长度为{length},{num}已经超出这个长度") return None return json_data['channelList'][num-1] def getAllSiteInfo(self): path = os.path.join(self.dirPath, "site.json") with open(path, 'r', encoding='utf8')as fp: json_data = json.load(fp) return json_data['channelList'] def getSiteName(self, siteInfo): return siteInfo['sourceList'][0]['name'] def getSiteSource(self, siteInfo): return siteInfo['sourceList'][0]['source'] def addSuccessSite(self, siteInfo): path = os.path.join(self.dirPath, "success.json") add = self.isSuccessSite(siteInfo) if add == False: with open(path, 'r+', encoding='utf8')as fp: json_data = json.load(fp) with open(path, 'w', encoding='utf8')as fp: json_data['channelList'].append(siteInfo) fp.write(json.dumps(json_data, indent=4)) def isSuccessSite(self, siteInfo): path = os.path.join(self.dirPath, "success.json") with open(path, 'r+', encoding='utf8')as fp: json_data = json.load(fp) if siteInfo in list(json_data['channelList']): return True else: return False def main(path): webRequests = WebRequests() webRequests.dirPath = path print(f"总共有{webRequests.getSiteNum()}个站点可以领取福卡") for i in range(1, webRequests.getSiteNum()+1): siteInfo = webRequests.getSiteInfo(i) siteName = webRequests.getSiteName(siteInfo) print(f"{i}:{siteName}") startSite = int(input("您要从第几个站点开始向后领取?")) mobile = input("请输入您的手机号:") for i in range(startSite, webRequests.getSiteNum()+1): siteInfo = webRequests.getSiteInfo(i) siteName = webRequests.getSiteName(siteInfo) siteSource = webRequests.getSiteSource(siteInfo) if webRequests.isSuccessSite(siteInfo): print(f"{i}:{siteName} 已经成功领取,跳过") continue print(f"{i}:{siteName} 正在领取中") result = webRequests.getCaptcha(mobile, siteSource) print(result['info']) if result['code'] == 1001: if str(result['info']).find("验证码发送过频繁") != -1: print("验证码需等待77s后才能获取,正在等待..") time.sleep(77) result = webRequests.getCaptcha(mobile, siteSource) if str(result['info']).find("人气太旺啦,稍候再试试") != -1: print("您的手机号在近期已经获得了多次支付宝验证码,已被支付宝限制,24小时内无法再获得验证码,程序终止。") break elif str(result['info']).find("人气太旺啦,稍候再试试") == -1 and str(result['info']).find("验证码发送过频繁") == -1: continue ackCode = input("请输入验证码:") result = webRequests.getResult(mobile, siteSource, ackCode) print(result['info']) if result['code'] == 1000 or result['info'].find("已经领取过奖品") != -1: webRequests.addSuccessSite(siteInfo) print("验证码需等待77s后才能获取,正在等待..") time.sleep(77) input("程序已结束,您可以关闭此程序了") def newphone(): pa = 'success.json' if os.path.exists(pa): os.remove(pa) try: copyfile("default.json", pa) except IOError as e: print("错误 %s 5秒后退出" % e) time.sleep(5) sys.exit() except: print("错误,5秒后退出:", sys.exc_info()) time.sleep(5) sys.exit() if __name__ == '__main__': print("请问是否使用的新账号是输入1 否任意:") if int(input())== 1: newphone() path = os.path.dirname(os.path.realpath(sys.argv[0])) main(path) 源码地址:需要环境源码版:下载无需环境编译版:下载
2021年02月04日
109 阅读
2 评论
0 点赞
2021-01-30
Http压测工具wrk安装与分享
之前很长一段时间都在使用apachebench 俗称ab 但是用着用着,就觉得可玩性有点不足,尤其是在自定义这方面上。偶然间看到这款WRK压测工具wrk 的一个很好的特性就是能用很少的线程压出很大的并发量, 原因是它使用了一些操作系统特定的高性能 I/O 机制, 比如 select, epoll, kqueue 等。 其实它是复用了 redis 的 ae 异步事件驱动框架. 确切的说 ae 事件驱动框架并不是 redis 发明的, 它来至于 Tcl的解释器 jim, 这个小巧高效的框架, 因为被 redis 采用而更多的被大家所熟知.安装wrk支持大多数类UNIX系统,不支持windows。需要操作系统支持LuaJIT和OpenSSL,不过不用担心,大多数类Unix系统都支持。安装wrk非常简单,只要从github上下载wrk源码,在项目路径下执行make命令即可。wrk GitHub 源码:https://github.com/wg/wrkwrk只能运行于 Unix 类的系统上,也只能在这些系统上跑必备条件:1.软件包:gcc g++ make build-essential等(具体视系统而定)安装好了这些软件包后,进入源码目录git clone https://github.com/wg/wrk.git cd wrk make -j4(可选多线程)编译完成之后,目录下面会多一个 wrk 的文件。使用以下命令来测试一下:./wrk -c 1 -t 1 -d 1 http://www.baidu.com基本使用命令行敲下wrk,可以看到使用帮助Usage: wrk <options> <url> Options: -c, --connections <N> Connections to keep open -d, --duration <T> Duration of test -t, --threads <N> Number of threads to use -s, --script <S> Load Lua script file -H, --header <H> Add header to request --latency Print latency statistics --timeout <T> Socket/request timeout -v, --version Print version details Numeric arguments may include a SI unit (1k, 1M, 1G) Time arguments may include a time unit (2s, 2m, 2h)简单翻成中文:使用方法: wrk <选项> <被测HTTP服务的URL> Options: -c, --connections <N> 跟服务器建立并保持的TCP连接数量 -d, --duration <T> 压测时间 -t, --threads <N> 使用多少个线程进行压测 -s, --script <S> 指定Lua脚本路径 -H, --header <H> 为每一个HTTP请求添加HTTP头 --latency 在压测结束后,打印延迟统计信息 --timeout <T> 超时时间 -v, --version 打印正在使用的wrk的详细版本信息 <N>代表数字参数,支持国际单位 (1k, 1M, 1G) <T>代表时间参数,支持时间单位 (2s, 2m, 2h)测试1数据非常的明了测试2使用24线程 6000个链接,在海外G口机器上,使用随机脚本,达到了20WQPS的峰值数据(实际上约合10W)使用Lua脚本个性化wrk压测以上两节安装并简单使用了wrk,但这种简单的压测可能不能满足我们的需求。比如我们可能需要使用POST METHOD跟服务器交互;可能需要为每一次请求使用不同的参数,以更好的模拟服务的实际使用场景等。wrk支持用户使用--script指定Lua脚本,来定制压测过程,满足个性化需求。介绍wrk对Lua脚本的支持wrk支持在三个阶段对压测进行个性化,分别是启动阶段、运行阶段和结束阶段。每个测试线程,都拥有独立的Lua运行环境。启动阶段function setup(thread)在脚本文件中实现setup方法,wrk就会在测试线程已经初始化但还没有启动的时候调用该方法。wrk会为每一个测试线程调用一次setup方法,并传入代表测试线程的对象thread作为参数。setup方法中可操作该thread对象,获取信息、存储信息、甚至关闭该线程。thread.addr - get or set the thread's server address thread:get(name) - get the value of a global in the thread's env thread:set(name, value) - set the value of a global in the thread's env thread:stop() - stop the thread运行阶段function init(args) function delay() function request() function response(status, headers, body)init由测试线程调用,只会在进入运行阶段时,调用一次。支持从启动wrk的命令中,获取命令行参数;delay在每次发送request之前调用,如果需要delay,那么delay相应时间;request用来生成请求;每一次请求都会调用该方法,所以注意不要在该方法中做耗时的操作;reponse在每次收到一个响应时调用;为提升性能,如果没有定义该方法,那么wrk不会解析headers和body;结束阶段function done(summary, latency, requests)该方法在整个测试过程中只会调用一次,可从参数给定的对象中,获取压测结果,生成定制化的测试报告。自定义脚本中可访问的变量和方法变量:wrk wrk = { scheme = "http", host = "localhost", port = nil, method = "GET", path = "/", headers = {}, body = nil, thread = <userdata>, }一个table类型的变量wrk,是全局变量,修改该table,会影响所有请求。方法:wrk.fomat wrk.lookup wrk.connect function wrk.format(method, path, headers, body) wrk.format returns a HTTP request string containing the passed parameters merged with values from the wrk table. 根据参数和全局变量wrk,生成一个HTTP rquest string。 function wrk.lookup(host, service) wrk.lookup returns a table containing all known addresses for the host and service pair. This corresponds to the POSIX getaddrinfo() function. 给定host和service(port/well known service name),返回所有可用的服务器地址信息。 function wrk.connect(addr) wrk.connect returns true if the address can be connected to, otherwise it returns false. The address must be one returned from wrk.lookup(). 测试与给定的服务器地址信息是否可以成功创建连接示例使用POST METHODwrk.method = "POST" wrk.body = "foo=bar&baz=quux" wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"通过修改全局变量wrk,使得所有请求都使用POST方法,并指定了body和Content-Type头。为每次request更换一个参数request = function() uid = math.random(1, 10000000) path = "/test?uid=" .. uid return wrk.format(nil, path) end通过在request方法中随机生成1~10000000之间的uid,使得请求中的uid参数随机。每次请求之前延迟10msfunction delay() return 10 end每个线程要先进行认证,认证之后获取token以进行压测token = nil path = "/authenticate" request = function() return wrk.format("GET", path) end response = function(status, headers, body) if not token and status == 200 then token = headers["X-Token"] path = "/resource" wrk.headers["X-Token"] = token end end在没有token的情况下,先访问/authenticate认证。认证成功后,读取token并替换path为/resource。压测支持HTTP pipeline的服务init = function(args) local r = {} r[1] = wrk.format(nil, "/?foo") r[2] = wrk.format(nil, "/?bar") r[3] = wrk.format(nil, "/?baz") req = table.concat(r) end request = function() return req end通过在init方法中将三个HTTP request请求拼接在一起,实现每次发送三个请求,以使用HTTP pipeline附赠可用作变参破盾的脚本:wrk.method = "GET" --请求模式 radua = 1 -- 是否启用随机ua数据 1为开,其他均为关 radque = 1 -- 是否启用随机查询数据 1为开,其他均为关 uri = "/?p="--随机查询数据uri关键 仅仅在radque=1的时候生效 quemax = 100000 --最大随机查询生成大小 仅仅在radque=1的时候生效 --随机ua列表开始 ua = { "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60", "Opera/8.0 (Windows NT 5.1; U; en)", "Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0", "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; LBBROWSER)", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E; LBBROWSER)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; QQBrowser/7.0.3698.400)", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36", "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5", "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5", "Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5", "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5", "Mozilla/5.0 (Linux; U; Android 2.2.1; zh-cn; HTC_Wildfire_A3333 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", "Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", "MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", "Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10", "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13", "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+", "Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0", "Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124", "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)", "UCWEB7.0.2.37/28/999", "NOKIA5700/ UCWEB7.0.2.37/28/999", "Openwave/ UCWEB7.0.2.37/28/999", "Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1", "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)", "Sogou inst spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)", "Sogou News Spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)", "Sogou Pic Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07)", "Sogou Video Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07)", "Mozilla/5.0 (compatible; Bytespider; https://zhanzhang.toutiao.com/) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.0.0 Safari/537.36", "Mozilla/5.0 (Linux; Android 5.0) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; Bytespider; https://zhanzhang.toutiao.com/)", "Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Version/7.0 Mobile Safari/537.36 (compatible; Bytespider; https://zhanzhang.toutiao.com/)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0); 360Spider(compatible; HaosouSpider; http://www.haosou.com/help/help_3_2.html", "Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko)Version/4.0 Mobile Safari/534.30; 360Spider", "Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30; HaosouSpider", "Mozilla/5.0 (Linux; U; Android 4.3; zh-CN; SCH-N719 Build/JSS15J) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 YisouSpider/1.0.0 Mobile Safari/533.1", "Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,likeGecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0;+http://www.baidu.com/search/spider.html)", "Mozilla/5.0 (compatible; Baiduspider/2.0;+http://www.baidu.com/search/spider.html)", "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 likeMac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)", "Mozilla/5.0(compatible;Baiduspiderrender/2.0;+http://www.baidu.com/search/spider.html)", "Baiduspider-image+(+http://www.baidu.com/search/spider.htm)" } --随机UA列表结束 request = function() if (radua == 1) then math.randomseed(tostring(os.time()):reverse():sub(1, 7)) wrk.headers["User-Agent"] = ua[math.random(1,74)] else wrk.headers["User-Agent"] = "Powered by WRK" end --随机ua传递结束 if (radque==1)then uid = math.random(1, quemax) path = uri .. uid end --随机查询结束 --返回数据开始 return wrk.format(null,path,wrk.headers,null) end --随机请求结束
2021年01月30日
113 阅读
1 评论
0 点赞
2021-01-02
Python 的基本语法与变量(1)
Python 简介Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。 Python 发展历史Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。Python 本身也是由诸多其他语言发展而来的,这包括 ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unix shell 和其他的脚本语言等等。像 Perl 语言一样,Python 源代码同样遵循 GPL(GNU General Public License)协议。现在 Python 是由一个核心开发团队在维护,Guido van Rossum 仍然占据着至关重要的作用,指导其进展。Python 2.7 被确定为最后一个 Python 2.x 版本,它除了支持 Python 2.x 语法外,还支持部分 Python 3.1 语法。 Python 特点1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。2.易于阅读:Python代码定义的更清晰。3.易于维护:Python的成功在于它的源代码是相当容易维护的。4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。8.数据库:Python提供所有主要的商业数据库的接口。9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。10.可嵌入:你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。python的安装Python可应用于多平台包括 Linux 和 Mac OS X。你可以通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。)Win 9x/NT/2000Macintosh (Intel, PPC, 68K)OS/2DOS (多个DOS版本)PalmOSNokia 移动手机Windows CEAcorn/RISC OSBeOSAmigaVMS/OpenVMSQNXVxWorksPsionPython 同样可以移植到 Java 和 .NET 虚拟机上。Ubuntu/Debian : sudo apt-get install python3Centos/RedHat:yum -y install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel yum -y install zlib* yum -y install python-setuptools yum -y install python3Windows:前往https://www.python.org/downloads/windows/选择版本下载集成开发环境(IDE:Integrated Development Environment): PyCharm(可选)PyCharm 是由 JetBrains 打造的一款 Python IDE,支持 macOS、 Windows、 Linux 系统。PyCharm 功能 : 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制……PyCharm 下载地址 : https://www.jetbrains.com/pycharm/download/Python基本语法与变量1、Python解释器交互式编程如下交互式界面即直接输入Python命令不输入文件名,或默认ide的页面这样就出现了解释器的 >>> 提示符 ,如上图即为默认图形IDE的交互模式可以使用exit() Ctrl+Z Ctrl+D的方式退出2、Python的保留字和标识符标识符:以英文大小写或小写字母或下划线“_”开始,后面可跟随数个字母数字或下划线Python不允许使用特殊标点符号出现在标识符里头,如:@%$等,且Python区分大小写,意义相同,但是大小写不同的两个标识符是完全不同的,如man和Man当标识符用作模块名时,应尽量短小,并且全部使用小写字母,可以使用下划线分割多个字母,例如 game_mian、game_register 等。当标识符用作包的名称时,应尽量短小,也全部使用小写字母,不推荐使用下划线,例如 com.mr、com.mr.book 等。当标识符用作类名时,应采用单词首字母大写的形式。例如,定义一个图书类,可以命名为 Book。模块内部的类名,可以采用 "下划线+首字母大写" 的形式,如 _Book;函数名、类中的属性名和方法名,应全部使用小写字母,多个单词之间可以用下划线分割;常量命名应全部使用大写字母,单词之间可以用下划线分割;除了注意标识符的规范外,还有保留关键字不能与标识符相同。保留关键字:保留关键字可通过运行下列代码查看import keyword keyword.kwlist所以:andasassertbreakclasscontinuedefdelelifelseexceptfinallyforfromFalseglobalifimportinislambdanonlocalnotNoneorpassraisereturntryTruewhilewithyield都是保留关键字,但是前文有说道,Python是区分大小写的,如果非要使用,可以使用大写混合的方法,如if和IF3、Python语句的缩进Pyhton语言与Java、C#等编程语言最大的不同点是,Python代码块使用缩进对齐表示代码逻辑,而不是使用大括号。这对习惯用大括号表示代码块的程序员来说,确实是学习Python的一个障碍。Python每段代码块缩进的空白数量可以任意,但要确保同段代码块语句必须包含相同的缩进空白数量。例如:建议在代码块的每个缩进层次使用单个制表符或两个空格或四个空格 , 切记不能混用。否则可能出现如图这种这种错误(将print前的制表符删除了):
2021年01月02日
23 阅读
1 评论
0 点赞
2020-11-29
Kali下载编译安装Linux5.9.11内核
1.下载最新的Linux内核小版本号为偶数是稳定版本,我们选择稳定版本下载。内核官方网站 https://www.kernel.org/,点击那个黄色的按钮就开始下载了2.环境配置在正式编译前需要安装部分软件。sudo apt update && sudo apt upgrade sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison 出现安装错误的可以分开安装3.解压缩下载完成之后,解压缩刚刚下载好的内核压缩包。解压后大概1G,提前预留充足空间。解压之后进入目录。可以先提前看下新版内核有什么变化。wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.11.tar.xz tar -zxf linux-5.9.11.tar.xz cd linux-5.9.11可以先用uname -r自行查看下当前内核版本4.配置内核在正式编译内核之前,我们首先必须配置需要包含哪些模块。实际上,有一些非常简单的方式来配置。使用一个命令,你能拷贝当前内核的配置文件,然后使用可靠的 menuconfig 命令来做任何必要的更改。cp /boot/config-$(uname -r) .config上述命令的意思就是拷贝对应当前内核配置到当前目录下并重命名为.config(文件名前加.意思为隐藏文件)。之后在解压后得内核目录里执行命令make menuconfig在这里可以选择启用或者禁用一些模块。如果你不知道该如何选择的话,默认退出即可。4.编译和安装退出menuconfig后,在命令行中输入make -j49命令即可开始编译。-j49意思是并发执行,可以提高速度,一般保险情况 下不要多于CPU核数。为了加快编译那就多开几个线程吧,可以是CPU内核数+1,比如四十八核就-j49。这个命令的执行会耗费很长时间。这里用的gcc版本是10.2在前面的文章中有安装好的 https://www.silverdragon.cn/?p=2019漫长的等待 笔者的使用宿主机分配了48个vCPU 只用了不到5分钟 实际机器配置低的可能需要更久如果抛出“没有规则可制作目标debian/certs/debian-uefi-certs.pem由certs/x509_certificate_list需求停止”这个错误 只需要sudo vim .config将CONFIG_SYSTEM_TRUSTED_KEYS="certs/x509_certificate_list"改成CONFIG_SYSTEM_TRUSTED_KEYS=""即可继续make编译编译完成之后首先安装模块,命令为:sudo make modules_install其次安装内核,命令为:sudo make install5.完成后启用内核作为引导输入下列命令将内核作为引导,将数字更改为你自己编译的版本号:sudo update-initramfs -c -k 5.9.11下面更新一下grub:sudo update-grub6.检查内核是否安装成功之后重启即可在启动界面选择需要启动的内核5.9.11。确认下内核版本参考资料:https://blog.csdn.net/qq_37748570/article/details/108118284
2020年11月29日
173 阅读
1 评论
0 点赞
2020-11-29
Kali中编译安装GCC10.2.0
一切都和其他源码安装软件是一样的:一、下载解压源代码:mkdir gcc10 && cd gcc10 wget http://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.gz tar xvf gcc-10.2.0.tar.gz二、配置安装路径:sudo vim /etc/profile export PATH="/usr/local/gcc-10.2/bin:$PATH"三、源码自动配置:cd gcc-10.2.0/ ./contrib/download_prerequisites正常的话,会下载几个包,然后系统会提示gmp-6.1.0.tar.bz2: 成功 mpfr-3.1.4.tar.bz2: 成功 mpc-1.0.3.tar.gz: 成功 isl-0.18.tar.bz2: 成功 All prerequisites downloaded successfully. 四、准备编译:cd .. mkdir temp_gcc10.2 && cd temp_gcc10.2 ../gcc-10.2.0/configure --prefix=/usr/local/gcc-10.2 --enable-threads=posix --disable-checking --disable-multilib //允许多线程 make //当然可以加个-j多线程编译 这里生成的目录有6-8G sudo make install不出意外的话,执行make后,就开始编译了大概十几分钟,半个小时这样就完成了九、做个链接:which gcc //查看旧安装目录备份旧版本gcc 替换新版本mv /usr/bin/gcc /usr/bin/gcc_old mv /usr/bin/g++ /usr/bin/g++_old ln -s /usr/local/gcc-10.2/bin/gcc /usr/bin/gcc ln -s /usr/local/gcc-10.2/bin/g++ /usr/bin/g++更换成功,编译一个helloworld试试正常
2020年11月29日
180 阅读
0 评论
0 点赞
1
2