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应用程序信 ...
随机推荐
- loadrunner12-查看controller运行报错详细log
1.路径为controller-->results-->results setting 2.打开文件夹res/log/***.log,里面会有当前场景运行的log日志. 注:启用这个首先保 ...
- Codeforces 611C. New Year and Domino 动态规划
C. New Year and Domino time limit per test 3 seconds memory limit per test 256 megabytes input stand ...
- Laravel + Vue 之 OPTIONS 请求的处理
问题: 在 Vue 对后台的请求中,一般采用 axios 对后台进行 Ajax 交互. 交互发生时,axios 一般会发起两次请求,一次为 Options 试探请求,一次为正式请求. 由此带来的问题是 ...
- 22条常用JavaScript开发小技巧
1.使用var声明变量 如果给一个没有声明的变量赋值,默认会作为一个全局变量(即使在函数内赋值).要尽量避免不必要的全局变量. 2.行尾使用分号 虽然JavaScript允许省略行尾的分号,但是有时不 ...
- HTML5 APP应用实现图片上传及拍照上传功能
https://blog.csdn.net/zmzwll1314/article/details/46965663 http://www.cnblogs.com/leo0705/ https://zh ...
- jquery统计显示或隐藏的元素个数
统计显示的checkbox的数量: 统计隐藏的checkbox数量:
- Django入门指南-第8章:第一个测试用例(完结)
python manage.py test python manage.py test --verbosity=2 # boards/tests.py from django.core.urlreso ...
- php读取用友u8客户档案
include('../common/conn.php'); $list=[]; $sql="SELECT a.cCusCode,a.cCusName,b.cCCName,a.cCusDep ...
- nexus 下载及安装
一.下载 nexus maven http://www.sonatype.org/ http://www.sonatype.org/nexus/ http://www.sonatype.org/nex ...
- POJ3258 River Hopscotch 2017-05-11 17:58 36人阅读 评论(0) 收藏
River Hopscotch Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13598 Accepted: 5791 ...