人在网上“爬”,哪有不挨“刀”。

反爬的首选第一件事就是封IP,爬虫选手第一件事就是上代理。

So…

一直代理IP资源都是紧俏资源,甚至花钱都不一定买得到好的。

于是有些需求就有了,IP代理系统是不是也可以搞一个?

当然,这样的需求早就有解决方案了。

一键启动XX代理,一键使用XX云申请100台主机启动代理…

这类方案差不多应有尽有了。

然而此类的方案问题在于,代理IP绑定在服务器上的,

流量出口总是很容易被查到是XX云厂商等等的。

那么,如果我们用手机客户端(Android) + 4G作为流量出口呢?

So…

Echo 4G代理系统应运而生。

项目地址: https://github.com/virjar/echo

是我的老熟人 https://github.com/virjar(渣总) 开源,

PS: 最近我边用边维护,修修Bug


Echo

Echo是一个分布式的代理共享和管理系统,以长链接的方式连接多个运行在任意位置的终端,并将终端的网络资源整理为一套代理ip集群系统。

echo提供整体的鉴权、流量监控、quota控制的功能。

  • Echo天然支持复杂网络环境,所以可以将代理终端部署在手机(甚至树莓派等终端设备)
  • Echo支持代理ip统一的集群管理,所以可以作为ADSL拨号的服务资源的的统一管理出口。使用ADSl使用统一的,稳定的ip出口提供代理服务(而不需要沉重的redis负担)
  • Echo支持sdk,目前提供完善的android APK和gradle依赖(这个作用你懂的 )
  • Echo分布式设计,天然集群版,无资源瓶颈上限。各节点自动双通道HA热备,无单点风险。
  • Echo全程NIO设计,对资源消耗少,支持并发高(所以代码难度大,可以买个好价钱),理论上代理最大吞吐占满节点带宽。
  • Echo系统扩展能力强,原则是echo的底层设计使得echo支持任意网络协议转发(udp、tcp、vpn等),且任意协议支持不需要终端升级
  • 终端命令控制,你可以通过http接口将特定指令下发到对应终端.实现如shell执行、ip重播等需求。

PS:请java高级工程师以下(初级和中级)同学不要尝试Echo服务端的研究 ,请java初级(包括不会java语言的同学)不要尝试部署Echo服务端。(渣总原话

嗯?被劝退了?有宝哥在啊。

虽然系统部署比较复杂,不过我们有docker-compose神器啊。


部署服务端

部署方法一:

git clone https://github.com/virjar/echo/;
cd echo;
docker-compose up -d;

部署方法二:

新建一个文件夹 echo-deploy,新建 docker-compose.yaml,填入下面docker-compose配置

version: '3'
services:echo-mysql-local:image: mysql:5.7container_name: echo-mysql-localports:- 4444:3306volumes:- ./mysql/data:/var/lib/mysql- ./mysql/echo_db_create.sql:/docker-entrypoint-initdb.d/echo_db_create.sqlenvironment:MYSQL_ROOT_PASSWORD: "echo"command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ciecho-meta-server:image: registry.cn-beijing.aliyuncs.com/virjar/echo-meta-server:latestcontainer_name: echo-meta-serverports:- 4826:8080environment:SPRING_DATASOURCE_USERNAME: rootSPRING_DATASOURCE_PASSWORD: echoSPRING_DATASOURCE_URL: jdbc:mysql://echo-mysql-local:3306/echo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&autoConnect=truedepends_on: - echo-mysql-localecho-fe-ui:image: registry.cn-beijing.aliyuncs.com/virjar/echo-fe-ui:20210430container_name: echo-fe-uiports:- 8999:80volumes:- ./echo-fe-nginx.conf:/etc/nginx/conf.d/default.confenvironment:API_ENTRY: http://echo-meta-server:8080depends_on: - echo-meta-serverecho-nat-server:image: registry.cn-beijing.aliyuncs.com/virjar/echo-nat-server:latestcontainer_name: echo-nat-serverports:- 12000-12010:12000-12010- 5699:5699- 5698:5698environment:API_ENTRY: http://echo-meta-server:8080SERVER_ID: echo-nat-server-001MAPPING_SPACE: 12000-12010depends_on: - echo-meta-serverecho-http-proxy-server:image: registry.cn-beijing.aliyuncs.com/virjar/echo-http-proxy-server:latestcontainer_name: echo-http-proxy-serverports:- 13000-13020:13000-13020- 5710:5710environment:API_ENTRY: http://echo-meta-server:8080/MAPPING_SERVER_URL: http://echo-meta-server:8080/echoNatApi/connectionListAUTH_CONFIG_URL: http://echo-meta-server:8080/echoNatApi/syncAuthConfigSERVER_ID: echo-http-proxy-001MAPPING_SPACE: 13000-13020depends_on: - echo-meta-serverecho-client:image: registry.cn-beijing.aliyuncs.com/virjar/echo-client:latestcontainer_name: echo-clientenvironment:API_ENTRY: http://echo-meta-server:8080/ECHO_ACCOUNT: adminECHO_PASSWORD: admindepends_on: - echo-meta-server- echo-http-proxy-server- echo-nat-server

docker-compose.yaml

  • echo-mysql-local 数据库
  • echo-meta-server 原信息服务 + 权限管理
  • echo-fe-ui admin Web管理
  • echo-nat-server nat映射服务,依赖echo-meta-server
  • echo-http-proxy-server http-proxy,依赖echo-meta-server
  • echo-client 代理出口,依赖echo-meta-server启动
  1. docker-compose up;
  • 首次启动数据库初始化需要时间,echo-meta-server启动后可能连接不上数据库,重启一次就好
  • 数据库初始化依赖于./mysql/echo_db_create.sql
  1. echo-deploy里面新建mysql文件夹,将 echo_db_create.sql 扔进去

  2. 下载 echo-fe-nginx.conf 扔到 echo-deploy 文件夹

  3. docker-compose up -d;

  4. 访问http://localhost:8999

Admin配置

服务都正常启动之后,还需要做一下NATServer和http-proxy server配置。

注册账号和设置admin账号

首先,http://localhost:8999 注册一下账号,本地测试一般直接使用 admin/admin就算了。

同时设置一下代理账号密码,都设置成 10086/10086 即可。

http://localhost:8999 (二维码自动识别)

注册完成之后,进入mysql容器(如果是自己的MySQL自行处理),

本地数据库密码默认是echo;

将刚刚注册的账号设置成管理员,然后重新登录。

$:docker exec -it echo-mysql-local bash;
root@3c35bcc6c9e8:/# mysql -uroot echo -p
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -AWelcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 83
Server version: 5.7.34 MySQL Community Server (GPL)Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>  update user_info set admin=1 where id =1;

重新登录之后,就能看到Admin管理服务资源页面了。

添加nat-server和http-proxy-server

nat-server地址为:http://主机IP:5699

http-proxy-server地址为:http://主机IP:5710

如下图能显示服务的SID,则说明添加成功了。

到这里系统已经搭建完成了,接着是最终一步,接入Android客户端。

echo-client接入

  • 支持本地主机和Android 客户端

本地主机接入推荐使用docker

docker run -e API_ENTRY=http://192.168.31.135:4826/ \
-e CLIENT_ID=local_echo_client_2 \
-e ECHO_ACCOUNT=admin -e ECHO_PASSWORD=admin \
--restart=always --name=local__debug_echo_client_2 \
-d registry.cn-beijing.aliyuncs.com/virjar/echo-client

Android app 在Admin 页面可以下载到最新Apk,下载好后自行安装启动。

最后,在“代理”资源页面能看到代理IP信息,就说明成功了。

使用

$ export https_proxy=http://10086:10086@192.168.31.135:13012;curl -vvv https://qq.com* Uses proxy env variable https_proxy == 'http://10086:10086@192.168.31.135:13012'
*   Trying 192.168.31.135...
* TCP_NODELAY set
* Connected to 192.168.31.135 (192.168.31.135) port 13012 (#0)
* allocate connect buffer!
* Establish HTTP proxy tunnel to qq.com:443
* Proxy auth using Basic with user '10086'
> CONNECT qq.com:443 HTTP/1.1
> Host: qq.com:443
> Proxy-Authorization: Basic MTAwODY6MTAwODY=
> User-Agent: curl/7.64.1
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Connection established
< Connection: keep-alive
< Via: 1.1 echo-proxy
<
* Proxy replied 200 to CONNECT request
* CONNECT phase completed!
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pemCApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* CONNECT phase completed!
* CONNECT phase completed!
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server accepted to use h2
* Server certificate:
*  subject: C=CN; ST=Guangdong Province; L=Shenzhen; O=Shenzhen Tencent Computer Systems Company Limited; OU=R&D; CN=www.qq.com
*  start date: Jun 22 00:00:00 2020 GMT
*  expire date: Sep 22 12:00:00 2021 GMT
*  subjectAltName: host "qq.com" matched cert's "qq.com"
*  issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=Secure Site CA G2
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7f84b8808200)
> GET / HTTP/2
> Host: qq.com
> User-Agent: curl/7.64.1
> Accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
< HTTP/2 302
< date: Thu, 20 May 2021 16:13:44 GMT
< content-type: text/html
< content-length: 161
< server: squid/3.5.24
< location: https://www.qq.com/
<
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>squid/3.5.24</center>
</body>
</html>
* Connection #0 to host 192.168.31.135 left intact
* Closing connection 0

完美!

撒花!!!

最后。

欢迎Start。

欢迎试用。

https://github.com/virjar/echo

社区

加V:(virjar1),备注echo入群


最后。

不要玩火哈。

毕竟。

爬虫写得好,牢饭吃得早。

手动狗头。

Echo:代理IP系统“4G新纪元”相关推荐

  1. Linux IP代理筛选系统

    上一篇博客,介绍了Linux 抓取网页的实例,其中在抓取google play国外网页时,需要用到代理服务器 代理的用途 其实,除了抓取国外网页需要用到IP代理外,还有很多场景会用到代理: 通过代理访 ...

  2. Linux IP代理筛选系统(shell+proxy)

    上一篇博客,介绍了Linux 抓取网页的实例,其中在抓取google play国外网页时,需要用到代理服务器 代理的用途 其实,除了抓取国外网页需要用到IP代理外,还有很多场景会用到代理: 通过代理访 ...

  3. 实战项目一:爬取西刺代理(获取代理IP)

    爬虫的学习就是与反扒措施.反扒系统做斗争的一个过程,而使用代理IP是我们重要的防反扒的重要措施,代理IP的来源有两种一是你花钱去购买商家会给你提供一个接口你直接调用就可以了,二是自己在网上爬取高效IP ...

  4. python重定向反爬虫_高效实用http爬虫代理ip之盘点一些网站的反爬虫机制

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 (河马代理IP)我们之所以使用python语法来来制作网络爬虫程序,是因为python语法简介以及强大的第三方库.网络爬虫的用途就是对数据进行采集,也就是 ...

  5. python爬虫的用途_python爬虫用代理ip有什么用途?

    以下文章来源于腾讯云 作者:py3study ( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以自行下载!还有海量最新2020pytho ...

  6. python爬虫使用代理ip_爬虫使用代理IP的为什么不能全部成功

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 很多朋友在网络工作中经常会碰到各种各样的问题,比如访问某网站加载太慢,多刷新了几次被提示访问太频繁IP被限制:有的网站注册了几个账号后提示当前IP最多只能 ...

  7. 82ip网 - 每日更新50万HTTP和HTTPS代理IP!

    82ipHTTP代理提取可按照代理匿性质过滤提取的IP;82ipHTTP代理提取可以按照省市.网络运营商及IP段过滤提取IP,82ipHTTP代理提取客户端可以定时自动化提取到客户指定目录,内置IE代 ...

  8. 测试代理ip是否有效

    (1)免费ip使用地址:www.xicidaili.com (2)编写脚本测试ip是否有效 推荐大家看一下这个博客:https://blog.csdn.net/Oscer2016/article/de ...

  9. 教你如何优秀的选择付费代理ip的提供商

    如今,许多场景下都需要使用到代理IP.比如: 1.快速推广产品: 2.收集竞争对手资料: 3.使用网络爬虫爬取数据: 虽然代理IP在日常工作中经常使用,但市场上太多选择,用户难以决定.有些人以为只要能 ...

最新文章

  1. 五轴编程_HyperMILL五轴编程培训HyperMILL 软件的特点
  2. Web APi之控制器选择Action方法过程(九)
  3. 使用代码生成具有层级结构的IBASE
  4. 训练集 验证集_训练与验证、测试集数据分布不同的情况
  5. 上几个WebAPI就算微服务架构?Too Young!
  6. linux 自学笔记
  7. 1065. 最小公倍数
  8. 高斯克吕格投影分带计算
  9. 下载地址url中带有中文是url转换方法
  10. openwrt编译smartdns_【萌新理解交流】浅谈openWRT中的smartDNS中各个选项如何设置及其含义。...
  11. 【电力电子技术】浅析IR2110自举电路
  12. 用低代码+BPM赋能知识文档管理系统
  13. js练习:模拟京东快递单号查询
  14. qgis二次开发环境
  15. windows 定时清理指定目录文件bat
  16. 利用单片机给直流升压
  17. 神舟精盾 t97 键盘背光灯如何设置亮的时间
  18. html div全屏遮罩层,div遮罩层_Jquery全屏遮罩层DIV的实现代码
  19. 如何破解excel打开密码
  20. bootstrap 检验 法 原理_Stata:刀切法/留一法/Jackknife 简介

热门文章

  1. go语言字符集转换整数[]byte转换int
  2. 直流电机PWM调速系统中控制电压非线性研究
  3. 苹果真良心!iPhone6S/SE仍可升级到iOS 13
  4. 设计模式六大原则(4)——接口隔离原则
  5. Logistic函数的各个参数作用分析及其在电机控制中的应用
  6. 虚拟机与宿主机共享文件夹的设置办法
  7. 如何在有或没有Apple Watch的情况下远程控制iPhone相机
  8. 开启1521端口监听_Oracle开放1521端口 telnet不通解决办法
  9. 华为CE12808更换主控板
  10. JAVA版B2B2C商城源码 多商家入驻商城系统 直播带货 新零售商城 o2o商城 电子商务