此篇关于多线程工具的文章,非常适合新手学习,工具效率也挺高的,代码也比较完善,如题。

本文作者:i春秋签约作家——Aedoo

0×00 前言

笔者前一段时间发布了原创文章,“[Python黑客] Python手把手教你打造自己的多线程批量工具”,受到了不少热评,传送门:

https://bbs.ichunqiu.com/thread-31814-1-1.html

0×01 涉及知识点

多线程模板:threading多线程模块、Queue队列模块、超时处理、异常处理。

IP地址块转换:扫描的是一个比较大的网段的IP的Web端口,我们并不能手动一个一个的输入IP地址,所以需要IP地址块和IP的转换。

HTTP网络请求库:requests模块。

正则表达式:需要在Request请求之后的Response中获取我们想要的banner信息。

所以我们的大致思路:

首先,将输入的IP段转换为IP依次放入队列Queue中,之后开启多线程,将Queue传入多线程类,多线程类中的核心函数执行步骤:

1.取出一个IP并拼接URL为http://x.x.x.x的格式

2.使用requests模块获取页面status信息、title信息、banner信息(服务器的banner信息,在这里为Web容器以及其版本信息)

3.title信息需要在页面源代码中获取,并且使用re模块正则匹配title标签内的内容。

4.banner信息需要获取Response中header信息中的server。

之后,加入我们的工具文档以及自定义的LOGO信息后,一个完整的工具就完成了。

放一下完成之后的效果图:

炫酷!

0×02 核心代码讲解

由于IP地址块转换、多线程模板在笔者的上一篇文章已经详细讲述过了,此篇文章不再讲解,直接到核心代码区域,也就是取出每个IP之后的工作。

while not self._queue.empty():
    ip = self._queue.get(timeout=0.5)
    url = 'http://' + ip
    try:
        r = requests.Session().get(url=url, headers=header, timeout=5)
        content = r.text
        status = r.status_code
        title = re.search(r'<title>(.*)</title>', content)
        if title:
            title = title.group(1).strip().strip("\r").strip("\n")[:30]
        else:
            title = "None"
 
        banner = 'Not Found'
        try:
            banner = r.headers['Server'][:20]
        except:
            pass
 
        sys.stdout.write("|%-16s %-6s %-26s %-30s\n" % (ip, status, banner, title))
 
    except:
        pass

status是http页面的状态码,简单了解http协议的童鞋应该都知道吧。

title是请求页面的标题信息,需要用正则表达式匹配一下。

banner是Response头信息中的Server字段。

下面给出一个Request请求的Response包,可以直观看出,红框就是我们想要获取的东西。

输出使用了sys.write来解决多线程输出不对称问题,并且使用格式化输出使获取的数据对齐。

0×03 添加工具模块

Logo的制作使用Linux下的工具figlet,帮助文档使用Python内置模块argparse。

两款工具详解传送门:https://bbs.ichunqiu.com/thread-31231-1-1.html

Logo代码以及帮助文档代码:

logo_code = 'IF8gICBfIF8gICBfICAgICAgICAgX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX18gICAgICAgICAgICAgICAgICAKfCB8IHwgfCB8X3wgfF8gXyBfXyB8IF9fICkgIF9fIF8gXyBfXyAgXyBfXyAgIF9fXyBfIF9fLyBfX198ICBfX18gX18gXyBfIF9fICAKfCB8X3wgfCBfX3wgX198ICdfIFx8ICBfIFwgLyBfYCB8ICdfIFx8ICdfIFwgLyBfIFwgJ19fXF9fXyBcIC8gX18vIF9gIHwgJ18gXCAKfCAgXyAgfCB8X3wgfF98IHxfKSB8IHxfKSB8IChffCB8IHwgfCB8IHwgfCB8ICBfXy8gfCAgIF9fXykgfCAoX3wgKF98IHwgfCB8IHwKfF98IHxffFxfX3xcX198IC5fXy98X19fXy8gXF9fLF98X3wgfF98X3wgfF98XF9fX3xffCAgfF9fX18vIFxfX19cX18sX3xffCB8X3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg=='
    logo = base64.b64decode(logo_code)
    print logo
    parser = ArgumentParser()
    parser.add_argument("-i", dest="cidr_ip", default="192.168.1.1/16", help="The CIDR IP Like 192.168.1.1/24")
    parser.add_argument("-t", dest="thread_count", type=int, default=100, help="The Thread Number")
    args = parser.parse_args()
    parser.print_help()
    print ''
    print 'The Mission Started Successfully::'
    print ''

输出演示:

_   _ _   _         ____                              ____
| | | | |_| |_ _ __ | __ )  __ _ _ __  _ __   ___ _ __/ ___|  ___ __ _ _ __
| |_| | __| __| '_ \|  _ \ / _` | '_ \| '_ \ / _ \ '__\___ \ / __/ _` | '_ \
|  _  | |_| |_| |_) | |_) | (_| | | | | | | |  __/ |   ___) | (_| (_| | | | |
|_| |_|\__|\__| .__/|____/ \__,_|_| |_|_| |_|\___|_|  |____/ \___\__,_|_| |_|
 
usage: httpbannerscan.py [-h] [-i CIDR_IP] [-t THREAD_COUNT]
 
optional arguments:
  -h, --help       show this help message and exit
  -i CIDR_IP       The CIDR IP Like 192.168.1.1/24
  -t THREAD_COUNT  The Thread Number

完成。

脚本运行示例:

python httpbannerscan.py -t 100 -i 192.168.1.1/24

0×04 后续改进

众所周知的是Web端口可并不仅限于80端口,一些其他的Web端口的安全性可能远不如80端口做的好。

所以,我们在使用requests模块进行request请求时,完全可以将一些常见的Web端口放进一个列表里,首先对端口的开放性进行检测(端口开放性检测详情请见本文第一部分的传送门文章),之后再抓取Response信息,这是最快速的检测方法。

常见的Web端口:

80-90,8080-8090

0×05 源码分享

附件下载>>>>>戳我下载

>>>>>>黑客入门必备技能 带你入坑和逗比表哥们一起聊聊黑客的事儿他们说高精尖的技术比农药都好玩

 

Python任意网段Web端口信息探测工具的更多相关文章

  1. 新手篇丨Python任意网段Web端口信息探测工具

    你学习Python的目的是什么?是想写爬虫爬取数据(数据.图片等内容),还是想自写自动化的小工具,又或是作为一个新手小白单纯的欣赏这门语言呢? 今天i春秋分享的是一篇关于多线程工具的文章,工具使用效率 ...

  2. httpscan 爬虫式的网段Web主机发现小工具

    httpscan是一个扫描指定网段的Web主机的小工具.和端口扫描器不一样,httpscan是以爬虫的方式进行Web主机发现,因此相对来说不容易被防火墙拦截.httpscan会返回IP http状态码 ...

  3. 【渗透课程】第四篇-Web安全之信息探测

    Web之信息探测,从这篇开始就正式进入了Web渗透实战过程了,嗯,前面都是讲基础,下面我们来讲Web中的信息探测. 信息探测,主要的目的 收集目标服务器系统信息(IP,服务器所用系统等) 收集目标网站 ...

  4. Kali Linux信息收集工具

    http://www.freebuf.com/column/150118.html 可能大部分渗透测试者都想成为网络空间的007,而我个人的目标却是成为Q先生! 看过007系列电影的朋友,应该都还记得 ...

  5. Kali Linux信息收集工具全集

    001:0trace.tcptraceroute.traceroute 描述:进行路径枚举时,传统基于ICMP协议的探测工具经常会受到屏蔽,造成探测结果不够全面的问题.与此相对基于TCP协议的探测,则 ...

  6. Kali Linux信息收集工具全

    可能大部分渗透测试者都想成为网络空间的007,而我个人的目标却是成为Q先生! 看过007系列电影的朋友,应该都还记得那个戏份不多但一直都在的Q先生(由于年级太长目前已经退休).他为007发明了众多神奇 ...

  7. 利用Python实现对Web服务器的目录探测

    今天是一篇提升技能的干货分享,操作性较强,适用于中级水平的小伙伴,文章阅读用时约3分钟. PART 1/Python Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python ...

  8. 10.21 nmap:网络探测工具和安全/端口扫描器

    nmap命令 是一款开放源代码的网络探测和安全审核工具,是Network Mapper的缩写.其设计目标是快速地扫描大型网络.nmap可以发现网络上有哪些主机,主机提供了什么服务(应用程序名称和版本号 ...

  9. Web应用程序信息收集工具wig

    Web应用程序信息收集工具wig   很多网站都使用成熟的Web应用程序构建,如CMS.分析网站所使用的Web应用程序,可以快速发现网站可能存在的漏洞.Kali Linux新增加了一款Web应用程序信 ...

随机推荐

  1. linux两个线程

    http://blog.csdn.net/marksinoberg/article/details/50945212

  2. asio 广播代码示例

    代码网络收集 修改了一个编译的小问题 客户端 // Client.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include < ...

  3. Java知识系列 -- 反射

    原理 要想理解 Java 反射,首先要弄清类的加载过程. 比如这行代码 Person p = new Person();. 我们想要创建一个 Person 对象,并用 p 作为对象的引用. 在 Jav ...

  4. 2018.07.09 洛谷P2365 任务安排(线性dp)

    P2365 任务安排 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间 ...

  5. vs2010点调试,显示系统找不到指定的文件

    首先,查看“项目”-“属性”-“链接器”-“常规”-“输出文件”,路劲是否是“bin/xxx.exe”,如果是请继续看我的解答,否则请忽略下面的内容.原因是用VS2010加载调试以前的VC6.0下的程 ...

  6. Java编程模板

    package Campus; import java.util.Scanner; public class Main{ public static void main(String args[]){ ...

  7. GoogleStyle格式化代码

    <div class="iteye-blog-content-contain" style="font-size: 14px"></div&g ...

  8. D3_book 11.3 force

    <!-- pie example --> <!DOCTYPE html> <meta charset="utf-8"> <style> ...

  9. 软件工程 wc.exe 代码统计作业

    软件工程 wc.exe 代码统计作业分享 1. Github 项目地址 https://github.com/EdwardLiu-Aurora/WordCount 更好地阅读本文,可点击这里 基本要求 ...

  10. <context:component-scan>自动扫描

    主要讲解自动扫描的<context:component-scan>中的2个子标签的使用方法 在Spring MVC中的配置中一般会遇到这两个标签,作为<context:compone ...