【代理池工具撰写】——搭建简单代理池

作者:掌控安全-暗箭

目录

本章亮点:

创建自己的代理池提供批量爬取代理思路 及 方法解决代理利用率低问题 o( ̄▽ ̄)o

这两天想摆脱一阵电脑,所以就赶紧回老家,体验下无忧无虑的田园生活o( ̄┰ ̄*)ゞ。

某次看到群里的小伙伴们

在抱怨渗透某些网站时 自己的IP莫名其妙的就被禁封掉了

这对刚刚接触渗透测试的新学员来说,挺让人无奈的。

因为这些问题总是无法避免的:

没有代理可循。代理可用性低手动单个测试代理IP是否可用(耗时费力)。没有代码功底,不知如何创建代理池

所以,我决定来研究一下如何从0开始创建自己的代理池,

并把我的心得分享给你们

希望你们在渗透的道路上畅通无阻(记得遵纪守法哦( ̄▽ ̄)”)

先来插一一句话,本篇文章以照顾新手为主,讲的比较慢,大佬们可以直接下滑到底部下载我的源码,进行修改哦~

我刚来到学院的时候听到代理池一词,是完全蒙B的,只能想象到这可能是一个有很多代理IP的东东 总之感觉好复杂好高级的样子。

但是现在我告诉你们,只需要短短几十行代码,你也能创造出属于自己的代理池,是不是内心的恐惧就消失了一半了呢。

我们是基于爬虫基础上进行代理池创建的,

所以我们要对爬虫的节点选择要有一些了解,

并且找到一个或多个提供免费代理的网站

我们是基于爬虫基础上进行代理池创建的

如果对爬虫节点的选择没有了解,也没关系,本章会介绍部分节点选择的方法

一.寻找提供免费代理的网站

因为没钱所以我们要白嫖,因为没钱所以我们还要多写几行代码~

1.百度一下:免费代理(随便选个妃子)

我们看到这个网站还是很友好的,但是我用的是它的友情链接(小幻代理),89代理就留给你们练手吧

2.找到代理网战,我们就要分析他的前端代码,实施虫术,爬取IP和PORT

(1.)确定IP节点:

将鼠标随机放到一个IP上 直接右键->检查 我们就可以找到IP对应的节点了。

(2.)确定PORT节点方法同上

我们分析一下:

<tr>看作祖节点<td>父节点<a>子节点<tr>节点下有许许多多的子节点<td>,而IP位于第一个<td>节点中的<a>节点中,也就是<tr>节点的孙节点其中<a>节点有一个target属性 他的值为 “_blank” 这个可以更方便我们去定位此节点PORT是位于第二个<td>节点上 也就是第一个<td>的兄节点

分析完之后我们就开始构建脚本吧

我们先来调用要用到的模块:

import requests fro

这两个库没有安装的小伙伴可以先安装一下,我记得安装起来应该挺简单的

为什么不用selenium库呢?

虽然selenium库极其强大,但是用于创建代理池就有点小题大做了,而且运行起来也没有这两个库运行的快,安装起来也比较麻烦一点

然后我们要发送请求,构造Xpath解析对象

我们将这些操作都放到一个函数中去

def get_url(): url =?page=b97827cc html = requests.get(url).text html = etree.HTML(html)

这样就够建好了html为解析对象

再根据我们前面分析的节点,用Xpath规则去筛选我们想要的文本:

result = html.xpath(//td[2]/text()) result2 = html.xpath(//td/a[@target="_blank"]/text())

//td/a[@target=”_blank”]/text() 选中<td>节点下 target属性为_blank的子节点<a>,text()获取其文本 则result2 = “我们需要的IP”

//td[2]/text() 选择第二个<td>节点,获取文本内容 resul = “端口”

接下来就需要将爬取的内容遍历出来(我是保存到一个txt文本当中):

for a,b in zip(result2,result): PORT = b IP = a DL =(a +:+b) with open (DL.txt,a)as f: f.write(DL +"\n")

DL = “IP”:”PORT” 格式

运行后生成的文本内容为这个样子:

但是这样远远不能满足我们的需求,我们不能只爬取这一页的代理,所以我们要改一下函数,我以前三页为例。

lists =[5crfe930,4ce63706,b97827cc] def get_url(page): url =?page=+ page html = requests.get(url).text html = etree.HTML(html) result = html.xpath(//td[2]/text()) result2 = html.xpath(//td/a[@target="_blank"]/text()) for a,b in zip(result2,result): PORT = b IP = a DL =(a +:+b) with open (DL.txt,a)as f: f.write(DL +"\n")

这里引用了lists列表,简单的循环三次请求,分别请求前三页的网址。因为page后的值被加密了 短时间内很难找到规律。

不过当我们调用动态渲染的话(selenium库)就可以完美解决这个问题了,即可实现无视加密 放肆抓取的效果。

这里我就偷个懒了,0基础的萌新也很难看懂selenium库的使用,

所以为了提高效率 我干脆用这种最直白的方法给你们爬一下。

当我们拥有大量IP代理的时候 我们还要确认这里面有哪些IP可以正常为我们所用。

于是我们还要写一个验证函数:(因为穷,所以要写/(ㄒoㄒ)/~~):

def check(DL): url =http://%s% DL.rstrip() try: result = requests.get(url,timeout=5) print(DL +"代理可用") except: print(代理不可用)

这样子就很舒服啦,我们设置一个发送一个请求,

如果请求超时5秒,那么直接回显此代理不可用,

如果5秒内请求成功,那么则证明此代理可用,并且将可用代理回显出来。

这里也可以用状态码(status_code)来进行验证 比较好用,

我嫌麻烦懒得那么写了,

因为并不是只有状态码为[200]的代理可用 其实[400]的也可以用。

最后一步就是写个循环 将用到的函数都循环进去,当然你也可以main()函数,将用到的函数包含进去。

for i in lists: get_url(i) with open(DL.txt,r)as F: Str= F.readlines() for DL inStr: check(DL)

将lists中的page遍历到url中去,你列表写的越多,爬取的页面也就越多。

然后我们爬取的代理都会存放到与脚本的同目录下,DL.txt

将代理从文本中遍历到check()函数中去

所以最终的代码是这个样子的:

import requests from lxml import etree def get_url(page): url =?page=+ page html = requests.get(url).text html = etree.HTML(html) result = html.xpath(//td[2]/text()) result2 = html.xpath(//td/a[@target="_blank"]/text()) for a,b in zip(result2,result): PORT = b IP = a DL =(a +:+b) with open (DL.txt,a)as f: f.write(DL +"\n") def check(DL): url =http://%s% DL.rstrip() try: result = requests.get(url,timeout=5) print(DL +"可用") except: print(不可用) lists =[5crfe930,4ce63706,b97827cc] for i in lists: get_url(i) with open(DL.txt,r)as F: Str= F.readlines() for DL inStr: check(DL)

然后我们来执行一下:

只要显示出的IP基本都是可以用的 而且还是很快的那种

可用代理有很多,我就截一张图好啦

其实写这个脚本的时候碰到很多的坑 pyquery,bs4,selenium,Xpath这些库我都用过,最后还是筛选出Xpath最适用这个脚本。

而且在遍历的时候也碰到很多的坑,没得老师问 自己尝试 还是挺痛苦的。

幸运的是苦尽甘来,大家在爬取代理的时候可以选择多个代理网站同时爬取,只不过多写两个差不多一样的函数罢了。

以用有时间了 也可以尝试配合代理池写个自动SQL注入给大家呀 ~这样老师再也不用但心我们找不到漏洞了

代理池源码已打包

链接:https://pan.baidu.com/s/11BNXV2kLMGzS-py8kfv2kw

提取码:zkaq

PS:写文章好累 分享好快乐

【黑客教程】1、移动端渗透测试思路602 播放 · 0 赞同视频​