Python任意网段Web端口信息探测工具
此篇关于多线程工具的文章,非常适合新手学习,工具效率也挺高的,代码也比较完善,如题。
本文作者: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端口信息探测工具的更多相关文章
- 新手篇丨Python任意网段Web端口信息探测工具
你学习Python的目的是什么?是想写爬虫爬取数据(数据.图片等内容),还是想自写自动化的小工具,又或是作为一个新手小白单纯的欣赏这门语言呢? 今天i春秋分享的是一篇关于多线程工具的文章,工具使用效率 ...
- httpscan 爬虫式的网段Web主机发现小工具
httpscan是一个扫描指定网段的Web主机的小工具.和端口扫描器不一样,httpscan是以爬虫的方式进行Web主机发现,因此相对来说不容易被防火墙拦截.httpscan会返回IP http状态码 ...
- 【渗透课程】第四篇-Web安全之信息探测
Web之信息探测,从这篇开始就正式进入了Web渗透实战过程了,嗯,前面都是讲基础,下面我们来讲Web中的信息探测. 信息探测,主要的目的 收集目标服务器系统信息(IP,服务器所用系统等) 收集目标网站 ...
- Kali Linux信息收集工具
http://www.freebuf.com/column/150118.html 可能大部分渗透测试者都想成为网络空间的007,而我个人的目标却是成为Q先生! 看过007系列电影的朋友,应该都还记得 ...
- Kali Linux信息收集工具全集
001:0trace.tcptraceroute.traceroute 描述:进行路径枚举时,传统基于ICMP协议的探测工具经常会受到屏蔽,造成探测结果不够全面的问题.与此相对基于TCP协议的探测,则 ...
- Kali Linux信息收集工具全
可能大部分渗透测试者都想成为网络空间的007,而我个人的目标却是成为Q先生! 看过007系列电影的朋友,应该都还记得那个戏份不多但一直都在的Q先生(由于年级太长目前已经退休).他为007发明了众多神奇 ...
- 利用Python实现对Web服务器的目录探测
今天是一篇提升技能的干货分享,操作性较强,适用于中级水平的小伙伴,文章阅读用时约3分钟. PART 1/Python Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python ...
- 10.21 nmap:网络探测工具和安全/端口扫描器
nmap命令 是一款开放源代码的网络探测和安全审核工具,是Network Mapper的缩写.其设计目标是快速地扫描大型网络.nmap可以发现网络上有哪些主机,主机提供了什么服务(应用程序名称和版本号 ...
- Web应用程序信息收集工具wig
Web应用程序信息收集工具wig 很多网站都使用成熟的Web应用程序构建,如CMS.分析网站所使用的Web应用程序,可以快速发现网站可能存在的漏洞.Kali Linux新增加了一款Web应用程序信 ...
随机推荐
- src/lxml/includes/etree_defs.h:14:31: 致命错误:libxml/xmlversion.h:没有那个文件或目录
fedora21平台下解决办法:yum install libxml-devel ubuntu下可以使用 apt-get intalll xxxx 如果仍然出现,可以尝试安装这两个包libxslt-d ...
- BZOJ2424 [HAOI2010]订货 - 费用流
题解 (非常裸的费用流 题意有一点表明不清: 该月卖出的商品可以不用算进仓库里面. 然后套上费用流模板 代码 #include<cstring> #include<queue> ...
- PetaPoco与SQLite
PetaPoco与SQLite. 对于精简版本的ORM,PetaPoco确实短小精悍,想做个WPF的Demo,然后将PetaPoco与SQLite集成一起使用,简单易用,是不错的选择. ()==数据库 ...
- c++编程思想里面的错误(可能c++标准变了,所以以前的东西没有更新)
第一卷 第五章 5.3友元 下面的代码是<c++编程思想>里面的代码, struct X; struct Y{ void f(X*); }; struct X{ private: int ...
- 第1章 (名词)Le nom
★名词的种类:(1)普通名词 —专有名词,如: un livre —la Chine(2)可数名词—不可数名词,如: un ami —le lait(3)具体名词— ...
- linux中nfs启动报rpcbind.socket failed to listen on sockets: Address family not supported by protocol
1.systemctl start rpcbind.service 报错: [root@autodeploy ~]# journalctl -xe -- Support: http://lists.f ...
- HDU 1716 排列2 (格式问题+排列)
题意:. 析:我们完全可以STL里面的函数next_permutation(),然后方便,又简单,这个题坑就是在格式上. 行末不能有空格,结尾不能有空行,不大好控制,必须控制好第一次数. 这个题本应该 ...
- JavaNIO学习一
文章来源:http://cucaracha.iteye.com/blog/2041847 对文件来说,可能最常用的操作就是创建.读取和写出.NIO.2 提供了丰富的方法来完成这些任务.本文从简单的小文 ...
- 简单的nginx模拟网站的负载均衡
环境:nginx1.10.3 虚拟机环境:3台centos7虚拟机 将148机器作为转发服务器配置如下 监听80端口,在http里面配置如下 将edc.com分别转发到149和150的服务器上 本地主 ...
- What Is Your Grade?
Problem Description “Point, point, life of student!”This is a ballad(歌谣)well known in colleges, and ...