你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
首页
热门
推荐
精选
登录
|
注册
使用python-nmap 搭建基本端口扫描器
立即下载
用AI写一个
金额:
5
元
支付方式:
友情提醒:源码购买后不支持退换货
立即支付
我要免费下载
发布时间:2018-05-22
10人
|
浏览:4195次
|
收藏
|
分享
技术:python 进程池
运行环境:python2.7 nmap python-nmap
概述
使用端口扫描技术,控制自己企业内部服务器开放的端口。
详细
##一、前言 > 注意: 本文相关教程仅供个人学习使用,切勿用于非法用途,否则造成的相关损失及影响,作者不承担任何责任 林子大了什么鸟都有。网络发达了,什么人都有。开源程序也是人开发的,漏洞在所难免。当不正当的人遇到开源程序的漏洞,那就会引发服务器入侵。 尽可能的避免此类事件的发生。一个企业或者说一个网络管理员,需要知道自己提供服务的服务器上开放着哪些端口,提供着什么服务。这样就能在漏洞发生的时候,及时修补,避免不必要的损失。 ok,必要性说完了,我们来说我们怎么做这件事儿。 ## 二、开发环境 需要的环境简介: * python 2.7 * 端口扫描,现在行业内比较通用的开源组件是: [nmap](https://nmap.org/) , github 开源地址: https://github.com/nmap/nmap 这个开源工具给大家提供了一个shell 使用环境。 * 但是当服务器成千上万,服务也成千上万,就需要一定的结构来处理开放的相关的端口及服务了。 很庆幸的,开源社区还提供了 nmap 的python api https://bitbucket.org/xael/python-nmap 当然有比较小白的安装方法: pip install python-nmap (注意是python-nmap 不是nmap) ##三、实现过程 #### 扫描器的基本流程图及简单的配置介绍如下: ![](/contentImages/image/20180519/yftxkvyuJg5X0aurbQ6.png) ##四、代码介绍如下: * 启动进程池: python 接口给多进程应用程序提供了丰富的使用,这里给大家提供一个多进程的教程 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431927781401bb47ccf187b24c3b955157bb12c5882d000 使用如下的代码初始化进程池: ```python from multiprocessing import Pool p = Pool(4) # 这里可以根据机器的性能状况设置进程池中的进程数 ``` * 获取IP 地址库: IP 地址库一般是企业内部的资产列表,可以是单个的机器,也可能是单个的网段。本实例为简单起见,用一个文本文件来充当相应的IP地址库, ip.txt 。其中,一行一个IP 资源 (IP 地址或者网段)。遍历文本文件即可: ```python hosts = open(config.host_file) for host in hosts: print host ``` * 扫描单个项目,根据python-nmap的api 扫描单个的IP资源,简单代码如下: ```python import nmap nm = nmap.PortScanner() ret = nm.scan(ip,config.scan_port_range,config.scan_options,config.scan_sudo) ``` * 获取扫描结果: 单个IP 条目的扫描结果如下: ![](/contentImages/image/20180521/MRES0n16zs1dgbqyU8R.png) 其中scan 属性对应的字典即是扫描结果,key 为IP , value 为扫描结果,value 中tcp 为对应的tcp 扫描条目。 了解结构以后,我们就可以写遍历结果代码了。 ```python ret = nm.scan(ip,config.scan_port_range,config.scan_options,config.scan_sudo) scan_host_count = len(ret['scan'].keys()) if scan_host_count != 0: for ip,result in ret['scan'].items(): tcp_result = result.get('tcp') for port,detail in tcp_result.items(): gotOneResult(ip,port,detail) ``` 其中gotOneResult 为我们的最终处理结果,接收参数ip,port,detail , detail 的情况如下: ```json result sample : {'status': {'state': 'up', 'reason': 'echo-reply'}, 'hostnames': [{'type': '', 'name': ''}], 'vendor': {}, 'addresses': {'ipv4': ''}, ' tcp': {80: {'product': 'Apache httpd', 'state': 'open', 'version': '', 'name': 'http', 'conf': '10', 'extrainfo': '', 'reason': 'syn-ack', 'cpe': 'cpe:/a:apache:http_se rver'}, 443: {'product': 'OpenSSL', 'state': 'open', 'version': '', 'name': 'ssl', 'conf': '10', 'extrainfo': 'SSLv3', 'reason': 'syn-ack', 'cpe': 'cpe:/a:openssl:opens sl'}}} ``` * 注:本实例只关心tcp的端口扫描: * 简单封装我们的gotOneResult ,按照不同端口存储扫描结果,方便我们做进一步处理: ```python def gotOneResult(ip,port,detail): if detail.get('state') == 'open': print ip,port,detail report_file = "reports/port_%d" % (int(port)) open(report_file,"a").write("%s %d %s \n" % (ip,int(port),detail)) ``` ##四、运行效果 > 最后展示一下扫描结果 ![](/contentImages/image/20180519/XLipiBFBhhutjIH43GN.png) #### demo 运行配置简介: * 扫描的是常见端口 : 22,80,21,6379,3306,443 * ip地址 为随便掰的几个IP * 进程池4 ##五、项目结构以及使用注意点 #### 项目结构图如下 ![](/contentImages/image/20180521/8S4V7WsN2pssraES2lr.png) #### 使用说明: 修改一下ip.txt 放入自己的IP地址,app.py 修改 gotOneResult 为需要的处理方式就可以正常使用了。
本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
感谢
4
手机上随时阅读、收藏该文章 ?请扫下方二维码
相似例子推荐
评论
作者
☆星影♡
购买服务
购买服务
服务描述:
可以一起聊聊技术实现方案等
服务价格:
¥50
我要联系
3
例子数量
26
帮助
9
感谢
评分详细
可运行:
4.5
分
代码质量:
4.5
分
文章描述详细:
4.5
分
代码注释:
4.5
分
综合:
4.5
分
作者例子
python 爬取王者荣耀高清壁纸
使用python-nmap 搭建基本端口扫描器
使用python3打造一个自己的mysql管理工具库