Python爬的太慢,不如试试多线程!手把手教你打造多线程批量工具

你学习Python的目的是什么呢?是在大佬口中听说"Python大法好"而学习的,还是想自写爬虫爬取数据(数据、图片、各种内容),还是想自写自动化小工具,还是单纯的欣赏这门语言呢?今天我来带领大家手把手写一个多线程批量扫描爆破弱服务端口的工具。

Python爬的太慢,不如试试多线程!手把手教你打造多线程批量工具

一、先捋一下思路

1.这个多线程扫描工具需要一个完善的多线程模板,一个完善的多线程模板需要用到哪些知识呢?threading多线程模块Queue队列模块超时处理机制,异常处理机制等。

2.其次我们要扫描的是一个比较大的网段的IP的某一个开启弱服务的端口,我们并不能手动一个一个的输入IP地址,所以需要IP地址块和IP的转换

3.我们想要爆破的服务可以是:1433端口(SQL Server数据库),3306端口(MySQL数据库),3389端口(RDP连接),6379端口(Redis数据库),27017端口(MongoDB数据库)等等等可以爆破或者匿名访问的端口和服务。

所以首先要探测端口开放情况,如果开放,进行下一步的匿名访问检测或者爆破检测,此时需要用到的知识点:socket模块探测端口,对应端口服务的核心爆破规则编写,当然相应的也离不开超时处理以及异常处理。

4.最后再加入帮助文档,以及我们自己特色的Logo,这样就可以完成我们自己的小工具啦!

先放一张我们最终工具完成后的效果图(Redis匿名访问版本):

Python爬的太慢,不如试试多线程!手把手教你打造多线程批量工具

PS:虽然是我们的内网,不过还是打上码吧,不介意吧,哈哈~

二、完善的多线程模板

这套多线程模板,我是在ichunqiu官网视频看到的的,曾经出现过线程无法终止等问题,不过后来问题都解决了,关键是在取出队列中的一个数据时加入timeout超时处理,就完美运行了,哈哈~

下面这个多线程模板,没有任何功能,仅供测试使用,取出work列表中的数据并依次输出,后面我们再为他添加核心功能代码,下面稍微讲一下这套模版到底是如何运行的。

先贴一下源码:

Python爬的太慢,不如试试多线程!手把手教你打造多线程批量工具

首先,

  • 第4行:是我们定义的一个多线程类,继承了threading模块的Thread类;
  • 第5行:初始化类,并加入_queue参数来接收后来传入的队列queue
  • 第8行:核心代码区域,依次取出队列queue的一个元素,当队列为空时,结束代码。
  • 第12行:此异常处理try才是真正的核心代码,将取出的元素进行批量处理;
  • 第19行:定义的线程数
  • 第20行:定义为空的线程列表
  • 第23~24行:将未处理的数据逐个放入队列queue。
  • 第25~26行:根据线程数量将queue传入多线程类。
  • 第27~30行:启动线程以及等待至线程终止。

讲的这么详细,大家应该理解的不错了吧。

三、IP地址块转换

由于工具中需要直接输入一整个大的网段,所以此时我们需要用到IP地址块转换,例:

  • a.将192.168.1.1/24,转换为192.168.1.0~192.168.1.255这256个IP。
  • b.将192.168.1.1/16,转换为102.168.0.0~192.168.255.255这65536个IP。

这就是IP地址块的转换。这个概念和转换方式大家应该理解吧。

不懂的话详情百度IP地址块。

Python中内置一个ipaddr模块,可以直接在两者之间轻松转换,用法如下:

Python爬的太慢,不如试试多线程!手把手教你打造多线程批量工具

运行结果

Python爬的太慢,不如试试多线程!手把手教你打造多线程批量工具

从192.168.1.0输出到192.168.1.255。

后续的就是将这些要扫描的IP放入queue队列中,配合上面的多线程模板进行下一步扫描工作。

四、端口开放检测

基本操作,使用socket模块,创建套接字使用TCP协议探测端口开放情况。

使用方法如下(代码是在最终工具中截取的):

Python爬的太慢,不如试试多线程!手把手教你打造多线程批量工具

IP就是在队列queue中取出的IP,这就是使用socket套接字探测端口开放情况的简单代码。

sys.stdout.write是标准化输出,解决多线程并发输出不对齐问题。这个代码探测了6379端口开放情况。

五、核心代码

好了,前期准备工作完成了,我们有了一套完善的多线程模板,并且将需要扫描的IP群也放入了队列模块,并且开启了多线程,也完成了端口开放扫描,终于走到了最后的核心代码区域。

笔者这里写的是Redis数据库未授权访问的批量扫描工具,所以核心代码就是检测Redis是否可以匿名访问。

Redis数据库有一个特性,如果他对所有人开放,使用客户端向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG。

所以,最后的核心代码:

Python爬的太慢,不如试试多线程!手把手教你打造多线程批量工具

向6379端口发送一个ping,通过返回的PONG检测是否可以未授权访问,当然也可以使用Python连接Redis数据库并且尝试向内写入一对key和value,如果写入成功,也能检测出是否存在未授权访问漏洞,不过第一种方法比较简单。

六、Logo制作以及帮助文档撰写

Logo的制作使用Linux下的工具figlet,帮助文档使用Python内置模块argparse,Logo代码以及帮助文档代码:

Python爬的太慢,不如试试多线程!手把手教你打造多线程批量工具

logo_code是事先使用base64加密过的,目的是让Logo的嵌入不显得那么突兀,只需要base64解密一次,再将它输出至屏幕就可以了。

Python爬的太慢,不如试试多线程!手把手教你打造多线程批量工具

完成,炫酷!0x06 抛砖引玉既然本次笔者是批量检测的Redis数据库匿名访问,那是否可以是MongoDBldap匿名访问呢?

甚至是MySQL数据库弱口令的爆破的,答案当然是可以的。如:MongoDB数据库未授权访问核心代码(连接数据库并尝试插入数据):

Python爬的太慢,不如试试多线程!手把手教你打造多线程批量工具

MySQL数据库弱口令爆破核心代码(两个open是读取用户以及密码字典,然后尝试远程连MySQL):

Python爬的太慢,不如试试多线程!手把手教你打造多线程批量工具

笔者再给大家列一些弱端口以及对应的服务吧,不过核心的爆破代码,需要自己慢慢研究咯~~(PS:并不全面,仅供参考)

21 FTP

22 SSH

23 Telnet

25 SMTP

110 POP

3389 LDAP

873 Rsync

1433 SQL Server

1521 Oracle

3128 Squid

3306 MySQL

3389 RDP

5432 PostgreSQL

6379 Redis

27017 MongoDB

完了!怎么样是不是很强大,欢迎各位大佬提建议!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容

  • 从哪说起呢? 单纯讲多线程编程真的不知道从哪下嘴。。 不如我直接引用一个最简单的问题,以这个作为切入点好了 在ma...
    Mr_Baymax阅读 2,739评论 1 17
  • iOS多线程编程 基本知识 1. 进程(process) 进程是指在系统中正在运行的一个应用程序,就是一段程序的执...
    陵无山阅读 6,021评论 1 14