随笔描述

nmap 可以进行端口的扫描,在安全或运维中可以说是一款不错的神奇吧,在大部分LINUX 里面都自带了nmap 这款工具,他不仅仅是端口扫描,自身还提供许多插件可以使用。

官方文档

nmap 官方文档

github文档

说说libnmap

libnmap是一个python库,使python开发人员能够操纵nmap进程和数据。

如果您需要实现以下操作,则libnmap是您要查找的内容:

  1. 定期自动或安排nmap扫描
  2. 操纵nmap扫描结果进行报告
  3. 比较和差异nmap扫描生成图
  4. 批处理扫描报告

    ...

    上述用例将在libnmap模块的帮助下轻松实现。

nmap 的模块

github

lib目前提供以下模块:

  • 过程:使您能够启动nmap扫描
  • 解析:使您能够从文件,字符串...中解析nmap报告或扫描结果(到目前为止只有XML)
  • 报告:使您能够操作解析的扫描结果,并以json格式对扫描结果进行序列化
  • diff:使您能够看到两次扫描之间发生了什么变化
  • common:包含基本的nmap对象,如NmapHost和NmapService。要注意的是,每个对象都可以与另一个类似的对象“diff()ed”。
  • 插件:使您能够直接在“NmapReport”对象中支持扫描结果的数据存储。从报告模块:

开始应用

简单的例子

rom libnmap.process import NmapProcess
from libnmap.parser import NmapParser nm = NmapProcess("127.0.0.1",options="-sV -p 22")
nm.run() nmap_report = NmapParser.parse(nm.stdout) for scanned_hosts in nmap_report.hosts:
print scanned_hosts
x=[ [a, [ b.address for b in nmap_report.hosts for c in b.get_open_ports() if a==c[0] ] ] for a in sorted(set([ b[0] for a in nmap_report.hosts for b in a.get_open_ports()]),key=int) ]
print x
y=sorted(set([ b[0] for a in nmap_report.hosts for b in a.get_open_ports()]), key=int)
#print y

运行的结果:

主要参数的介绍

  • NmapProcess 开始一个扫描任务
  • NmapParser 对扫描的结果进行处理,实例化

端口信息

开放指定端口号的主机

  • 显示所有开放指定端口号的主机。生成一个包含主机地址(string)的列表。下面以 443 端口为例,你可以修改成你自己需要的值。

[ a.address for a in nmap_report.hosts if (a.get_open_ports()) and 443 in [b[0] for b in a.get_open_ports()] ]

开放端口数量


- 显示一系列主机开放端口的数量。生成一个包含端口数量(int)的列表,并进行排序。

sorted(set([ b[0] for a in nmap_report.hosts for b in a.get_open_ports()]), key=int)

### 主机开放端口对应的服务,按端口号进行分组

- 显示所有主机开放的端口号,按端口号进行分组和排序。生成一个包含多个列表的列表(即列表的每个元素也为列表),其中每个成员列表第一个元素为端口号(int),第二个元素为一个包含开放对应端口主机 IP 地址(string)的列表。

[ [a, [ b.address for b in nmap_report.hosts for c in b.get_open_ports() if a==c[0] ] ] for a in sorted(set([ b[0] for a in nmap_report.hosts for b in a.get_open_ports()]),key=int) ]

###SSL/TLS 和 HTTP/HTTPS

- 使用 SSL 的主机和端口
显示所有使用 SSL 的主机和端口。这是通过查找是否有服务使用了 “SSL” 通道或者相关脚本检测的结果中包含 pem 证书。生成一个包含一系列列表的列表,每个成员列表中包含主机地址(string)和端口号(int)。

[ [a.address, b.port] for a in nmap_report.hosts for b in a.services if b.tunnel=='ssl' or "'pem'" in str(b.scripts_results) ]


- 下面的内容包含上述相同的信息,但不在是一个包含列表的列表,而是使用 join 函数创建了一个包含 “主机:端口号”(string) 的列表。

[ ':'.join([a.address, str(b.port)]) for a in nmap_report.hosts for b in a.services if b.tunnel=='ssl' or "'pem'" in str(b.scripts_results) ]

包含 web 服务的主机和端口


- 显示所有的 web 服务及其对对应的端口号和协议(http 或 https)。这会生成一个包含多个列表的列表,其中每个成员列表包含协议(string)、地址(string)和端口号(int)。但这里会有些问题,nmap 在报告使用 https 的网站时,有些时候会显示服务是 “https”,而有时则会显示为使用 “ssl” 通道的 “http”,所以我调整了下数据格式以便统一输出。

[ [(b.service + b.tunnel).replace('sl',''), a.address, b.port] for a in nmap_report.hosts for b in a.services if b.open() and b.service.startswith('http') ]

- 这里还是相同的信息,只不过是在原先包含协议、主机和端口号的列表中增加了url(string)。

[ (b.service + b.tunnel).replace('sl','') + '

关于libnmap 的一些应用的更多相关文章

  1. Nmap结果文件XML文件解析

    对nmap扫描结果xml格式的文件进行解析,无需直接xml解析或读取,可直接使用模块: 1.nmapparser 安装:pip install nmapparser Demo: #!/usr/bin/ ...

随机推荐

  1. [luogu1600 noip2016] 天天爱跑步 (树上差分)

    题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵 ...

  2. [poj 3539] Elevator (同余类bfs)

    Description Edward works as an engineer for Non-trivial Elevators: Engineering, Research and Constru ...

  3. 基础框架整合-ssm框架+前后台交互完整教程

    1.基本概念 ssm:spring+springMVC+mybatis 2.开发环境 Eclipse mars + jdk1.7 + maven + tomcat7 3.使用maven构建web项目 ...

  4. HDU 5168

    把边按权值排序后,就相当于求一个子序列以1开始和以n结束.由于边权递增,而且相差>=k,所以,边的顺序也必定是递增的.知道,当处理一条出边时,必定是从入边选择一条最优的边,考虑两个因素,入边的权 ...

  5. XCODE插件 之 Code Pilot 无鼠标化

    什么是Code Pilot? Code Pilot 是一个 Xcode 5 插件.同意你不许使用鼠标就能高速地查找项目内的文件.方法和标识符. 它使用模糊查询匹配(fuzzy query matchi ...

  6. tapestry3创建自己定义组件

    两种方法创建自己定义标签: 一.通过AbstractComponent父类渲染,此种方法直接在java类中编写页面脚本.然后输出. 1.编写java类com/ailk/ech/ecop/view/te ...

  7. C# 用ManulResetEvent 控制Thread的 Suspend、Resume

    class Program { static void Main(string[] args) { Thread thread = new Thread(Work); thread.Start(); ...

  8. 门面模式(Facade)

    一:定义 提供一个统一的接口代表子系统内部的一组接口.门面模式提供一个高层的接口,使得子系统更易于使用.   二:经验 2.1 window系统的软关机(不是直接断电)是一个过程, 它自己背后会做很多 ...

  9. C-结构体应用(10)

    结构体是用来定义多种类型的复合类型,在 C语言中与类的区别在于结构体注重的是数据而类除了数据还包含函数,第2点区别在于结构体所声明的成员默认是"public"点.而类的默认是pri ...

  10. qq邮箱的SMTP服务器是什么

    qq邮箱的SMTP服务器是什么 QQ邮箱POP3 和 SMTP 服务器地址设置如下:POP3服务器地址为“pop.qq.com”,SMTP服务器地址为“smtp.qq.com”注:1.SMTP服务器需 ...