关于libnmap 的一些应用
随笔描述
nmap 可以进行端口的扫描,在安全或运维中可以说是一款不错的神奇吧,在大部分LINUX 里面都自带了nmap 这款工具,他不仅仅是端口扫描,自身还提供许多插件可以使用。
官方文档
说说libnmap
libnmap是一个python库,使python开发人员能够操纵nmap进程和数据。
如果您需要实现以下操作,则libnmap是您要查找的内容:
- 定期自动或安排nmap扫描
- 操纵nmap扫描结果进行报告
- 比较和差异nmap扫描生成图
- 批处理扫描报告
...
上述用例将在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 的一些应用的更多相关文章
- Nmap结果文件XML文件解析
对nmap扫描结果xml格式的文件进行解析,无需直接xml解析或读取,可直接使用模块: 1.nmapparser 安装:pip install nmapparser Demo: #!/usr/bin/ ...
随机推荐
- 洛谷P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
题目描述 众所周知,在每一个彗星后都有一只UFO.这些UFO时常来收集地球上的忠诚支持者.不幸的是,他们的飞碟每次出行都只能带上一组支持者.因此,他们要用一种聪明的方案让这些小组提前知道谁会被彗星带走 ...
- BZOJ 4951 [WF2017]Money for Nothing (决策单调优化DP+分治)
题目大意:略 题目传送门 不愧是$World final$的神题,代码短,思维强度大,细节多到吐..调了足足2h 贪心 我们利用贪心的思想,发现有一些工厂/公司是非常黑心的 以工厂为例,对于一个工厂$ ...
- django与mysql实现简单的增删查改
模型定义 from django.db import models class Grades(models.Model): g_name = models.CharField(max_length=2 ...
- Android ViewGroup拦截触摸事件具体解释
前言 在自己定义ViewGroup中.有时候须要实现触摸事件拦截.比方ListView下拉刷新就是典型的触摸事件拦截的样例. 触摸事件拦截就是在触摸事件被parent view拦截,而不会分发给其ch ...
- 解决ORA-02395:超出I/O使用的调用限制问题
ORACLE的PROFILE文件是限制数据库用户使用的资源的一种手段.如:控制session或sql能使用的CPU.控制用户的password管理策略等. 数据库创建后,系统则存在名为DEFAULT的 ...
- 0x12 队列
感觉和栈那一讲一样简单啊.. poj2259 这个乱搞硬模拟吧...没更新last WA了N次...(叫你懒得写拍) #include<cstdio> #include<iostre ...
- linux + nginx 的配置优化
linux 关于TCP/IP 的优化配置 配置文件/etc/sysctl.conf 修改完文件生效的命令 /sbin/sysctl -p 如下是总结的配置内容及说明 net.ipv4.con ...
- 使用log4net记录日志到数据库(含自定义属性)
日志输出自定义属性! 特来总结一下: 一.配置文件 使用log4写入数据库就不多说了,网上方法很多,自定义字段如下 <commandText value="INSERT INTO db ...
- RTSP/RTP 媒体传输和控制协议
1 前言 本文档主要描述了 NewStream Vision 系统中前端视频服务器(DVR, 网络摄像机), 中心转发服务器以及客户端之间的多媒体通信以及控制协议. 本协议主要基于标准的 IETE 的 ...
- div position:fixed后,水平居中的问题
.div{position:fixed;margin:auto;left:0; right:0; top:0; bottom:0;width:200px; height:150px;}