通用代理池,爬虫项目,采集模块构建,静态型采集任务 2021-11-09

采集网站 https://www.socks-proxy.net/
采集页面 网站主页面
采集形式 非动态 匹配 IP:PORT 
匹配规则 pttn = '(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5})'
备注说明 都是一些socks4类型的数据
最后一次人工校验时间 2021-10-09 20:07

import re
s = "<tr><td>210.56.244.134</td><td>4145</td><td>AU</td><td class='hm'>Australia</td><td>Socks4</td>"
pttn = r"<tr><td>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})</td><td>(\d{1,5})</td><td>.*?</td><td class='hm'>.*?</td><td>(\S{1,6})</td>"
data = re.findall(pttn, s)
print(data)
Donate
云乞讨

Debian10系统下,安装chrome浏览器,安装chrome driver 2021-11-08

Debian10系统下,安装chrome浏览器,安装chrome driver 2021-11-08

# apt-get update

# apt-get install wget curl unzip

# mkdir -p /root/src

# cd /root/src

# wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

# apt install /root/src/google-chrome-stable_current_amd64.deb
  // 大约600多MB的,需要一定的安装时间
  // 提示 Download is performed unsandboxed as root as file '/root/src/google-chrome-stable_current_amd64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

# ln -s /usr/bin/google-chrome-stable /usr/bin/chrome

# /usr/bin/chrome -version
  // 本次安装到的稳定版本为 Google Chrome 95.0.4638.69 

# wget https://chromedriver.storage.googleapis.com/95.0.4638.69/chromedriver_linux64.zip
# mv chromedriver chromedriver.95.0.4638.69
# ln -s /root/src/chromedriver.95.0.4638.69  /root/src/chromedriver
  // https://chromedriver.chromium.org/downloads
  // https://chromedriver.storage.googleapis.com/index.html?path=95.0.4638.69/

使用下面的Python3,selenium的程序,进行功能验证!

#!/usr/bin/python3
# -*- coding:utf-8 -*-
import time
from selenium import webdriver

aDriver = '/root/src/chromedriver'
aScreenShot = '/var/www/html/ScreenShot.png'

def run_Chrome(aDriver, aUA, aURL):
    try:
        chromeOptions = webdriver.ChromeOptions()
        chromeOptions.add_argument('--headless')                # 无界面模式
        chromeOptions.add_argument("--window-size=1920x1080")   # 窗口大小
        chromeOptions.add_argument('--disable-gpu')             # 关闭GPU加速
        chromeOptions.add_argument("--mute-audio")              # 关闭声音
        chromeOptions.add_argument("--no-sandbox");             # 无沙箱
        chromeOptions.add_argument("--disable-dev-shm-usage")   # 
        chromeOptions.add_argument("--disable-extensions")      # 关闭扩展程序
        chromeOptions.add_argument("--disable-images")          # 关闭图片加载
        chromeOptions.add_argument("--log-level=OFF")           # 无需日志
        chromeOptions.add_argument(f"--user-agent={aUA}")       # 修改UA
        # chromeOptions.add_argument(f'--proxy-server={aProxy}')  # 修改谷歌浏览器的代理
        d = webdriver.Chrome(executable_path = aDriver, options = chromeOptions)
        #  d.set_window_size(1920, 1080)                        # 设置分辨率 (宽, 高)
        d.get(aURL)                                             # 打开需要的网址
        time.sleep(3)                                           # 给浏览器的网页加载的时间,方式1
        #  webdriver.implicitly_wait(3)                         # 给浏览器的网页加载的时间,方式2
        #  element_present = EC.presence_of_element_located((By.ID, 'element_id'))  # 根据某个元素是否加载,判断是否完成页面加载,方式3
        #  WebDriverWait(driver, timeout).until(element_present)
        print("标题 %s" % d.title)                              # 网站标题
        print("URL %s" % d.current_url)                         # 当前的URL
        print("源代码 %s" % d.page_source)                      # 当前的页面渲染后的代码
        d.save_screenshot(aScreenShot)                          # 保存一下截图
        # d.page_source -- 字符串
        return d.page_source
    except Exception as e:
        print(e)
        return ""
    finally:
        d.close()
            


def go2web():
    try:
        aUA = 'Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/555.36'
        vWebContent = run_Chrome(aDriver = aDriver, aUA = aUA, aURL = 'http://某个网址/')
        print(vWebContent)
    except Exception as e:
        print(e)
 

if __name__ == '__main__':
    go2web()
    




Donate
云乞讨

iptables 转发流量 2021-11-07

使用iptables转发流量的命令语法,简单示例一个TCP转发

iptables -A PREROUTING -p tcp -m tcp --dport 中转服务器入口端口号 -j DNAT --to-destination 目标服务器IP地址:目标服务器端口号

iptables -A POSTROUTING -d 目标服务器IP地址/32 -p tcp -m tcp --dport 目标服务器端口号 -j SNAT --to-source 中转服务器本地IP地址

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 中转服务器入口端口号 -j ACCEPT
Donate
云乞讨

Python3框架FLASK知识点 2021-11-2

基础安装

# apt-get update
# apt-get install python3-pip python3 python3-gevent

基础的一个示例

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2021-11-02 
# Dasmz  

import flask

app = flask.Flask(__name__)

@app.route('/', methods=['GET'])
def index():
        return '<p>Hello World!</p>'

if __name__ == "__main__":
    app.run(host='0.0.0.0',port=41012) 


# 服务端 
root@cafe560b8380:~# python3 1102-1634.py 
 * Serving Flask app '1102-1634' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on all addresses.
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running on http://172.17.0.3:41012/ (Press CTRL+C to quit)
x.×.12.211 - - [02/Nov/2021 08:34:42] "GET / HTTP/1.1" 200 -
x.x.12.211 - - [02/Nov/2021 08:34:42] "GET /favicon.ico HTTP/1.1" 404 -
x.x.12.211 - - [02/Nov/2021 08:35:16] "GET / HTTP/1.1" 200 -
# 客户端,验证请求
curl http://198.*.*.196:41012/
<p>Hello World!</p>
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2021-11-02 
# Dasmz

import flask

app = flask.Flask(__name__)

# 主路由
@app.route('/', methods=['GET'])
def index():
        return '<p>Hello World!</p>\n'

# 增加一个名称的路径参数
@app.route('/home/<name>', methods=['GET'])
def home(name):
        return '<p>Hello World!<br><br> Hi, <b>{}</b>.</p>\n'.format(name)
        
if __name__ == "__main__":
    app.run(host='0.0.0.0',port=41012) 



#  curl http://IPv4:41012/
#  curl http://IPv4:41012/home/david
#  curl http://IPv4:41012/home/J.J.HarrySon
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2021-11-02 
# Dasmz

import flask

app = flask.Flask(__name__)

# 主路由
@app.route('/', methods=['GET'])
def index():
        return '<p>Hello World!</p>\n'

# 增加一个名称的路径参数
@app.route('/home/<name>', methods=['GET'])
def home(name):
        return '<p>Hello World!<br><br> Hi, <b>{}</b>.</p>\n'.format(name)

# 增加API,返回客户端的UA
@app.route('/API/getUA', methods=['GET'])
def getUserAgent():
        return '{}\n'.format(flask.request.headers.get('User-Agent'))
        
if __name__ == "__main__":
    app.run(host='0.0.0.0',port=41012) 



#  curl http://IPv4:41012/
#  curl http://IPv4:41012/home/david
#  curl http://IPv4:41012/home/J.J.HarrySon
#  curl http://IPv4:41012/API/getUA

收集的测速链接地址 更新于2021-10-31

从网络收集到的一些测速链接的地址,酌情选用

波兰 http://waw.lg.webhorizon.in/50MB.test
英国OVH http://51.195.146.211/LookingGlass/25MB.test
英国OVH http://51.195.146.211/LookingGlass/50MB.test
英国OVHhttp://51.195.146.211/LookingGlass/100MB.test
荷兰 http://lg-nl.viridweb.com/25MB.test
荷兰 http://lg-nl.viridweb.com/50MB.test
荷兰 http://lg-nl.viridweb.com/100MB.test
荷兰 http://lg.hostslim.nl/LookingGlass/100M.test
美国-Spokane-WA  https://wa.hostodo.com/10MB.test
美国-Spokane-WA  https://wa.hostodo.com/100MB.test
美国-Las-Vegas-NV https://lv.hostodo.com/10MB.test
美国-Las-Vegas-NV https://lv.hostodo.com/100MB.test
美国-Miami-FL https://mia.hostodo.com/10MB.test
美国-Miami-FL https://mia.hostodo.com/50MB.test
美国-Miami-FL https://mia.hostodo.com/100MB.test
荷兰-Lelystad-The-Netherlands http://lg.hostslim.nl/LookingGlass/100M.test
日本-Equinix-TY8-Japan http://tyo.lg.webhorizon.in/50MB.test
荷兰-Naaldwijk https://lg-nl.incognet.io/10MB.test
荷兰-Naaldwijk https://lg-nl.incognet.io/100MB.test
芬兰-Helsinki https://lg-fin.incognet.io/10MB.test
芬兰-Helsinki https://lg-fin.incognet.io/100MB.test
英国-Kent https://looking-glass.cloudxtiny.co.uk/25MB.test
德国-Niederlande https://lg.nl.haendler.it/100MB.test
荷兰-Wormer-Netherlands http://ams-test.softshellhosting.com/25MB.test
澳大利亚-Sydney https://lg.quantumcore.com.au/15MB.test
澳大利亚-Sydney https://lg.quantumcore.com.au/25MB.test
澳大利亚-Sydney https://lg.quantumcore.com.au/50MB.test
罗马尼亚-Bacau http://proof.hazi.ro/100MB.test
Donate
云乞讨

在Ubuntu桌面环境下,通过dd给树莓派写入镜像到TF/SD卡 2021-10-10

需求

手头有一个上古时期的树莓派,型号是B+ V1.2,可以给它一个镜像,用来当作玩具。

镜像官网: https://www.raspberrypi.com/software/operating-systems/

一、我这里,只是需要最简单的服务器环境,故而,选择下载

https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2021-05-28/2021-05-07-raspios-buster-armhf-lite.zip

二、哈希校验

c5dad159a2775c687e9281b1a0e586f7471690ae28f2f2282c90e7d59f64273c

# sha256sum  2021-05-07-raspios-buster-armhf-lite.zip 
c5dad159a2775c687e9281b1a0e586f7471690ae28f2f2282c90e7d59f64273c  2021-05-07-raspios-buster-armhf-lite.zip

三、解压,文件大小约为1.8GB,所以至少需要容量为2GB的TF/SD存储卡

# unzip 2021-05-07-raspios-buster-armhf-lite.zip
# ls -lh 2021-05-07-raspios-buster-armhf-lite.img
-rw-r--r-- 1 fd fd 1.8G May  7 23:00 2021-05-07-raspios-buster-armhf-lite.img

四、写入,我这里选择的一个16GB的TF/SD卡

# fdisk -l
Disk /dev/sda: 15 GiB, 16110321664 bytes, 31465472 sectors
Disk model: STORAGE DEVICE  
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6c586e13

# dd bs=1M if=2021-05-07-raspios-buster-armhf-lite.img  of=/dev/sda
1788+0 records in
1788+0 records out
1874853888 bytes (1.9 GB, 1.7 GiB) copied, 203.858 s, 9.2 MB/s

五、在boot分区下,写入一个空白的名称为SSH文件

六、TF/SD卡插入树莓派,接上网线,接上电源

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方法) 执行