代码地址如下:
http://www.demodashi.com/demo/13255.html

一、前言

注意: 本文相关教程仅供个人学习使用,切勿用于非法用途,否则造成的相关损失及影响,作者不承担任何责任

林子大了什么鸟都有。网络发达了,什么人都有。开源程序也是人开发的,漏洞在所难免。当不正当的人遇到开源程序的漏洞,那就会引发服务器入侵。

尽可能的避免此类事件的发生。一个企业或者说一个网络管理员,需要知道自己提供服务的服务器上开放着哪些端口,提供着什么服务。这样就能在漏洞发生的时候,及时修补,避免不必要的损失。

ok,必要性说完了,我们来说我们怎么做这件事儿。

二、开发环境

需要的环境简介:

  • python 2.7

  • 端口扫描,现在行业内比较通用的开源组件是: nmap , github 开源地址: https://github.com/nmap/nmap
    这个开源工具给大家提供了一个shell 使用环境。

  • 但是当服务器成千上万,服务也成千上万,就需要一定的结构来处理开放的相关的端口及服务了。 很庆幸的,开源社区还提供了 nmap 的python api
    https://bitbucket.org/xael/python-nmap
    当然有比较小白的安装方法: pip install python-nmap (注意是python-nmap 不是nmap)

三、实现过程

扫描器的基本流程图及简单的配置介绍如下:

四、代码介绍如下:

  • 启动进程池:
    python 接口给多进程应用程序提供了丰富的使用,这里给大家提供一个多进程的教程 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431927781401bb47ccf187b24c3b955157bb12c5882d000

使用如下的代码初始化进程池:

from multiprocessing import Pool
p = Pool(4)  # 这里可以根据机器的性能状况设置进程池中的进程数
  • 获取IP 地址库:
    IP 地址库一般是企业内部的资产列表,可以是单个的机器,也可能是单个的网段。本实例为简单起见,用一个文本文件来充当相应的IP地址库, ip.txt 。其中,一行一个IP 资源 (IP 地址或者网段)。遍历文本文件即可:
 hosts = open(config.host_file)for host in hosts:print host 
  • 扫描单个项目,根据python-nmap的api 扫描单个的IP资源,简单代码如下:
import nmap
nm = nmap.PortScanner()
ret = nm.scan(ip,config.scan_port_range,config.scan_options,config.scan_sudo)
  • 获取扫描结果:
    单个IP 条目的扫描结果如下:

其中scan 属性对应的字典即是扫描结果,key 为IP , value 为扫描结果,value 中tcp 为对应的tcp 扫描条目。

了解结构以后,我们就可以写遍历结果代码了。

    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 的情况如下:

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 ,按照不同端口存储扫描结果,方便我们做进一步处理:

def gotOneResult(ip,port,detail):if detail.get('state') == 'open':print ip,port,detailreport_file = "reports/port_%d" % (int(port))open(report_file,"a").write("%s %d %s \n" % (ip,int(port),detail))

四、运行效果

最后展示一下扫描结果

demo 运行配置简介:

  • 扫描的是常见端口 : 22,80,21,6379,3306,443
  • ip地址 为随便掰的几个IP
  • 进程池4

五、项目结构以及使用注意点

项目结构图如下

使用说明:

修改一下ip.txt 放入自己的IP地址,app.py 修改 gotOneResult 为需要的处理方式就可以正常使用了。使用python-nmap 搭建基本端口扫描器

代码地址如下:
http://www.demodashi.com/demo/13255.html

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

使用python-nmap 搭建基本端口扫描器相关推荐

  1. python调用扫描仪_使用Python编写简单的端口扫描器的实例分享

    单线程实现单线程实现道理比较简单,这里尝试Soket连接3389,连接成功说明端口开放,否则说明没有开远程服务.随便修改了一下就ok了,代码如下,最终得到自己的IP地址. #!/usr/bin/env ...

  2. 【Python黑帽子】——搭建TCP端口扫描器

    作者名:Demo不是emo  主页面链接:主页传送门 创作初心:一切为了她 座右铭:不要让时代的悲哀成为你的悲哀 专研方向:网络安全,数据结构 每日emo:唯有信仰与日月亘古不变 经过一段时间pyth ...

  3. python写端口扫描器_使用Python编写简单的端口扫描器的实例分享

    #!/usr/bin/env python import socket if __name__=='__main__': port=3389 s=socket.socket() for cnt in ...

  4. python 实现简单的端口扫描器

    1 #coding=utf-8 2 import socket 3 import time 4 import sys 5 6 def portScanner(ip,port): 7 server = ...

  5. python 端口扫描_Python学习之端口扫描器(终)

    序 接着学习.其实,在端口扫描工具里面有一个特别出名,那就是nmap,其官方网站是 https://nmap.org/,而Python里面也有一个nmap模块,此次就是使用 python-nmap 模 ...

  6. python编写一个端口扫描器

    可以使用 Python 来编写一个端口扫描器.下面是一个简单的端口扫描器的代码示例: import socketdef port_scanner(host, port):try:sock = sock ...

  7. 基于Python Tkinter的多线程局域网扫描器

    #本文仅供参考有不足之处请指出 一.设计环境 系统:Windows 11 语言:python3.8 编译器:PyCharm 二.设计要求 1.局域网内的存活主机发现 2.扫描指定主机开放的端口 3.图 ...

  8. 【python安全攻防】python简易端口扫描器

    文章目录 socket套接字 optparse模块 socket解析主机进行连接 获取banner threading多线程 端口扫描器 python-nmap端口扫描 对自己看python绝技的一次 ...

  9. python代码扫描工具_用Python编写一个高效的端口扫描器的方法

    PyPortScanner python多线程端口扫描器. 输出示例: Github 背景 有时候,在进行网络相关的研究的时候,我们需要执行一些有目的的参数测量.而端口扫描就是其中比较普遍也比较重要的 ...

最新文章

  1. J2EE分布式框架之开发环境部署(上)
  2. URLEncoder和URLDecoder(乱码处理)
  3. 【转】维护工厂库存的一般设置
  4. Scala模式匹配:对元组进行匹配
  5. 通过MULE集成服务的几种方式
  6. Linux Shell脚本 - 什么是Shell
  7. 合泰单片机市场占有率_holtek单片机图文全面详解
  8. 水性喷涂胶行业调研报告 - 市场现状分析与发展前景预测
  9. 设计模式(七): 通过转接头来观察适配器模式(Adapter Pattern)
  10. C#中的底层音频控制播放
  11. Atitit  如何让精灵控件运动
  12. 【洛谷1985】【USACO07OPEN】翻转棋
  13. Druid连接池简单配置
  14. java课程设计——租房管理系统
  15. linux的鼠标右键老是建立文件夹,右键新建只有文件夹怎么办|右键只能新建文件夹解决方法-系统城...
  16. svn分支管理的使用与经验
  17. 关于自动拼接地图算法
  18. win10清理_win10不再需要杀毒软件,同时建议不要安装垃圾清理类软件
  19. Java——SOF 与 OOM
  20. [PHP] 新浪企业邮箱登录功能难点梳理

热门文章

  1. bat 复制文件夹_一个神奇的bat批处理文件,更好的隐藏电脑里的文件或者文件夹...
  2. 填坑-关于IIC通讯
  3. 从程序员到项目经理(十):程序员加油站 --要执着但不要固执
  4. Leetcode - 143. Reorder List
  5. mysql(mariadb)的安装与使用,mysql相关命令,mysql数据类型
  6. oracle如何添加undo,ORACLE RAC 11G 添加以及删除UNDO表空间
  7. 剑指Offer的学习笔记(C#篇)-- 数组中重复的数字
  8. 2018牛客多校第一场 B.Symmetric Matrix
  9. Html IECheckBox双击问题
  10. iOS开发 UILabel实现自适应高宽