今天早上登录我的虚拟机,发现速度慢得出奇。每次运行命令,都要等好一段时间才能看到结果。就如 cat 一个文件的内容这种命令,都要等好一会儿。查看CPU使用率、内存使用率,都很正常。但查看网络连接的时候,发现有好多人连到我的3128端口。

熟悉代理服务器的朋友们知道,3128是squid的默认端口。之前我在虚拟机上配了一个squid,本来是自己用的,因为没有设用户名密码,这两天被别人扫出来,作为公共的代理被用了。于是我停掉squid服务,果然,一下子虚拟机的速度就回复正常了。

但是问题来了,是谁在用我的代理呢?

其实猜也才能猜到,一定是那些代理提供商扫出了我的机器,然后把我的代理提供给他们的用户。我拿我的IP去百度了一下,果然发现被一些代理提供商收录了。

进一步深入思考一下,代理提供商是怎么扫到我的代理的呢?

扫代理的原理其实很简单,就是扫描一个网络中的服务器,扫出那些启用代理服务的机器,测试它们是哪种类型的代理(透明代理、匿名代理还是高匿代理),然后代理提供商将这些代理提供给它的客户。

这么想想,其实做一个代理提供商也不是很难。那这样,我们不是自己也可以扫描代理,把资源卖给有需要的客户了?

顺着上面的思路,我整理了一下自己搭建这样一个服务涉及的几个步骤,列了几个关键点。

扫描代理服务器

扫端口我们可以用 nmap 这个工具。nmap 是一个网络扫描的工具,它可以用来扫描对方服务器启用了哪些端口、哪些服务,服务器是否在线,以及猜测服务器可能运行的操作系统。

我们针对一台机器运行 nmap 命令,可以扫出这个机器启用了哪些端口(服务),比如

$ nmap 49.51.193.128

Starting Nmap 7.01 ( https://nmap.org ) at 2019-03-09 20:32 CST

Nmap scan report for 49.51.193.128

Host is up (0.18s latency).

Not shown: 995 closed ports

PORT STATE SERVICE

22/tcp open ssh

25/tcp filtered smtp

111/tcp open rpcbind

445/tcp filtered microsoft-ds

1080/tcp open socks

Nmap done: 1 IP address (1 host up) scanned in 27.34 seconds

要扫出一个网段中的代理服务器,我们可以针对一个网段作扫描,如下

$ nmap 49.51.193.0/24

上面的命令会扫出所有在 49.51.193.0/24这个网段中有哪些在线的机器,每台机器上启用了哪些服务。

检测代理类型

扫出来代理服务器后,我们可以对这些代理服务器做测试,看看它们是什么类型的代理。

代理基本上分成这三种类型:透明代理

匿名代理

高匿代理

通过字面意思,大致能猜到这三种代理的区别。简单的说,透明代理就是用了之后,对方服务器很清楚的知道你是谁,你来自哪个IP。匿名代理用了之后,对方没法知道你是谁,但是知道你用了代理。而高匿代理比匿名代理隐藏性更高,对方不仅不知道你是谁,也不知道你用了代理。

三者在技术层面的区别,主要在于HTTP请求头的内容不同

透明代理

REMOTE_ADDR = Proxy IP

HTTP_VIA = Proxy IP

HTTP_X_FORWARDED_FOR = Your IP

匿名代理

REMOTE_ADDR = proxy IP

HTTP_VIA = proxy IP

HTTP_X_FORWARDED_FOR = proxy IP

高匿代理

REMOTE_ADDR = Proxy IP

HTTP_VIA = not determined

HTTP_X_FORWARDED_FOR = not determined

检测代理类型的方法也非常简单,只需要自己搭建一个web服务器,在上面跑一个web程序。客户端通过代理向web服务器发起请求,web程序打印出请求头,通过分析请求头的内容就可以知道这个代理是哪种类型的。

下面是我用 Flask 写了一个例子,大致是这么个意思

import json

from flask import Flask, request

app = Flask(__name__)

@app.route('/')

def hello():

header = {}

if "REMOTE_ADDR" in request.headers:

header["REMOTE_ADDR"] = request.headers["REMOTE_ADDR"]

if "HTTP_VIA" in request.headers:

header["HTTP_VIA"] = request.headers["HTTP_VIA"]

if "HTTP_X_FORWARDED_FOR" in request.headers:

header["HTTP_X_FORWARDED_FOR"] = request.headers["HTTP_X_FORWARDED_FOR"]

return json.dumps(header)

if __name__ == "__main__":

app.run(host="0.0.0.0", port=8080)

运行这个程序,当我们通过代理访问这个web服务,它就会返回代理请求头的信息,我们可以据此判断代理是透明、匿名还是高匿代理。

维护代理池

好,有了代理和代理的类型,我们可以将他们做成一个代理池,提供一个接口给客户,让他们通过接口来获取可用的代理。

当然这些扫出来的代理有效时间长短不一,有的代理也许可以用很久,有的代理可能一会儿时间就失效了。我们需要保证代理池中的代理是有效的,可以定期的去检查代理的有效性,把失效的从列表中去除,把新的有效的加入进来。

当我们做出了这样一个接口后,我们可以把这个接口打包成服务卖给客户,比如按照调用次数收费或者按月收费。

市面上,对于代理池的需求还是很大的,主要是爬虫用户,有些公司也需要爬取竞争对手网站的数据来做分析。用代理池可以避免短时间内请求次数太多而被封掉的情况,当然对于公司来说,除了这方面因素,也想隐藏自己的IP来源,不让竞争对手发现自己的意图。

如果此方法你觉得有用,记得私信小编001给你详细教程哦!

python挣钱路子_听说你是Python零基础?今天教大家一招零基础也能赚钱的路子!...相关推荐

  1. python安装方法_听说你安装Python包很慢,试试这个方法

    使用Python有快五年了,最近这一年多,经常听到大家说在安装python第三方包很慢很慢.比如这速度,每秒十几kb而网络正常的情况下,pip下载的速度至少应该每秒几百kb才对,甚至还有可能更快,比如 ...

  2. 查看Python的版本_查看当前安装Python的版本

    一.查看Python的版本_查看当前安装Python的版本 具体方法: 首先按[win+r]组合键打开运行: 然后输入cmd,点击[确定]: 最后执行[python --version]命令即可. 特 ...

  3. python怎么做项目_听说你没有python项目可做,我教你个方法

    原标题:听说你没有python项目可做,我教你个方法 学习了一段时间的Python,最近出现了"饥荒",感觉需要多看些代码,多学习学习别人做些什么,但却不知道做点什么来进行练习. ...

  4. 怎么用python挣钱-利用业余时间怎么用python挣钱?

    首先python是一门编程语言,一门技术,一个生产力工具,那么既然是生产力工具,就一定能够为我们所用,至少赚个外快是没有问题的,赚完外快是没问题,问题是从什么途径赚外快,今天咱们就说一说利用业余时间用 ...

  5. python并行运算库_最佳并行绘图Python库简介:“ HiPlot”

    python并行运算库 HiPlot is Facebook's Python library to support visualization of high-dimensional data ta ...

  6. 我的世界python写游戏_快来试试Python写的游戏《我的世界》

    <我的世界 Minecraft>大家应该都听说过,但你有没有想过自己用Python写一个这样的游戏呢?太难.太复杂了?也许吧,但是不试一试你怎么知道能不能成呢? 国外有位叫fogleman ...

  7. python新手难点_初学两天python的操作难点总结

    已经学习两天python,将我认为的操作难点进行总结 1 在cmd下 盘与盘之间的切换 直接 D或d: 就好 2 查找当前盘或者文件下面的目录 直接 dir 3 想在一个盘下进去一个文件夹,用cd空格 ...

  8. python 做网页_听过最近Python过气了?

    Python过气了? 怎么可能?! 会Python的人,工作都不会太差.作为职场"新晋网红",Python在各行各业中扮演着越来越重要的角色. 曾经Excel在金融.数据岗位&qu ...

  9. python内存泄漏_诊断和修复Python中的内存泄漏

    python内存泄漏 Fugue uses Python extensively throughout the Conductor and in our support tools, due to i ...

最新文章

  1. markdown mysql高亮_修改博客园markdown编辑器代码高亮风格的方法
  2. 【Linux网络编程】TCP 和 UDP 数据报格式详解
  3. matlab常用函数——软件常用函数
  4. java 反射 速度_Java 反射获取类方法速率和实现方式
  5. BigDecimal 部署测试环境精度丢失
  6. Eclipse热部署JSP
  7. Mongodb~连接串的整理
  8. fiddler实现将http请求的js转为本地的js文件
  9. 各种 IntelliJ IDEA 酷炫插件推荐
  10. Linux操作系统基础命令
  11. 2018年8月12日 今日头条笔试 整理
  12. gmssl编程之签发X509证书
  13. 汽车新能源行业每周新闻纵览
  14. Rails PayPal 支付对接
  15. 北京的程序猿们,今年过年去哪玩?
  16. 记录:如何解决Ubuntu20.04无法联网问题【亲测有效】
  17. 运行maven生成的jar包显示class “XXX“ not found
  18. 设计模式--工厂方法
  19. java基础(部分)
  20. 节日祝福 html,节日祝福语大全

热门文章

  1. ARM协处理器CP15寄存器详解
  2. 如果我死了,还剩下什么(雪之轻裳)
  3. 拒绝被坑 超实用的移动电源选购技巧 分享给大家
  4. 如何在xshell中将网页上传到服务器
  5. AQS源码二探-JUC系列
  6. 深蓝学院 kitti2bag使用 踩坑路
  7. 量比和换手率:选股有奇招
  8. 【失业即将到来?】AI时代会带来失业潮吗?
  9. 【flutter】AndroidStudio 如何签名打包,步骤
  10. linux控制风扇转速的命令,sensors命令_Linux sensors 命令用法详解:sensors命令获得设备的温度和风扇转速...