前言

  python-nmap是一个Python库,可帮助您使用nmap端口扫描程序。它可以轻松操纵nmap扫描结果,将是一个完美的选择想要自动执行扫描任务的系统管理员的工具和报告。 它还支持nmap脚本输出。

  目前最新版本是0.6.1,具体请参考官方站点

安装

  推荐采用pip安装的方式。

pip install python-nmap
# for 国内,安装0.6.1版本
pip3 install -i https://pypi.douban.com/simple/ python-nmap==0.6.1

使用

基础使用

#!/usr/bin/env python
# -*- coding:utf- -*- import nmap def test():
ip = '172.16.176.120'
nm = nmap.PortScanner()
nm.scan(ip, '80, 445', '-v -n -sS -T4 -Pn')
print(nm.command_line())
print(nm.scaninfo())
print(nm.all_hosts())
print(nm[ip]) if __name__ == '__main__':
test()
# python3 scan_nmap.py
nmap -oX - -p "80, 445" -v -n -sS -T4 -Pn 172.16.176.120
{'tcp': {'method': 'syn', 'services': '80,445'}}
['172.16.176.120']
{'hostnames': [{'name': '', 'type': ''}], 'addresses': {'ipv4': '172.16.176.120'}, 'vendor': {}, 'status': {'state': 'up', 'reason': 'user-se
t'}, 'tcp': {80: {'state': 'open', 'reason': 'syn-ack', 'name': 'http', 'product': '', 'version': '', 'extrainfo': '', 'conf': '', 'cpe': ''
}, : {'state': 'closed', 'reason': 'reset', 'name': 'microsoft-ds', 'product': '', 'version': '', 'extrainfo': '', 'conf': '', 'cpe': ''}
}}

主机解析

  扫描之后,通过nm[ip]获取特定ip地址的扫描结果,返回的是一个‘类json格式’,剩下的便是对返回的结果进行解析了。

{
'hostnames': [{
'name': '',
'type': ''
}],
'addresses': {
'ipv4': '172.16.176.120'
},
'vendor': {},
'status': {
'state': 'up',
'reason': 'user-set '
},
'tcp ': {
: {'state ': 'open ',
'reason ': 'syn - ack ',
'name ': 'http ',
'product ': '',
'version ': '',
'extrainfo ': '',
'conf ': '3 ',
'cpe ': ''
},
: {
'state': 'closed',
'reason': 'reset',
'name': 'microsoft-ds',
'product': '',
'version': '',
'extrainfo': '',
'conf': '',
'cpe': ''
}
}
}

  请查看官方示例https://pypi.org/project/python-nmap/

  为了便捷,这里用了ip这个变量,方便更改。

#!/usr/bin/env python
# -*- coding:utf- -*- import nmap
import json def test():
ip = '172.16.176.120'
nm = nmap.PortScanner()
nm.scan(ip, '80, 445', '-v -n -sS -T4 -Pn')
# print(nm.command_line())
# print(nm.scaninfo())
# print(nm.all_hosts())
# print(nm[ip])
print('主机名 => ', nm[ip].hostname())
print('主机状态 => ', nm[ip].state())
print('所有协议 => ', nm[ip].all_protocols())
print('TCP协议的所有端口 => ', nm[ip]['tcp'].keys())
print('获取tcp协议的所有端口(已排序) => ', nm[ip].all_tcp())
print('获取udp协议的所有端口(已排序) => ', nm[ip].all_udp())
print('是否存在某个tcp端口 => ', nm[ip].has_tcp())
print('获取有关TCP中端口80的信息 => ', nm[ip].tcp())
print('获取有关TCP中端口80的信息(json展开) => ')
print(json.dumps(nm[ip]['tcp'][], indent=, separators=(',', ':')))
print('获取端口80 / tcp的状态 =>', nm[ip]['tcp'][]['state']) if __name__ == '__main__':
test()

  结果如下:

python3 scan_nmap.py
主机名 =>
主机状态 => up
所有协议 => ['tcp']
TCP协议的所有端口 => dict_keys([, ])
获取tcp协议的所有端口(已排序) => [, ]
获取udp协议的所有端口(已排序) => []
是否存在某个tcp端口 => True
获取有关TCP中端口80的信息 => {'state': 'open', 'reason': 'syn-ack', 'name': 'http', 'product': '', 'version': '', 'extrainfo': '', 'conf': '
', 'cpe': ''}
获取有关TCP中端口80的信息(json展开) =>
{
"state":"open",
"reason":"syn-ack",
"name":"http",
"product":"",
"version":"",
"extrainfo":"",
"conf":"",
"cpe":""
}
获取端口80 / tcp的状态 => open

  获取到某个ip的扫描结果,即可对nm[ip]的结果解析即可。

python-nmap

scan函数

def scan(self, hosts='127.0.0.1', ports=None, arguments='-sV', sudo=False):
"""
Scan given hosts May raise PortScannerError exception if nmap output was not xml Test existance of the following key to know
if something went wrong : ['nmap']['scaninfo']['error']
If not present, everything was ok. :param hosts: string for hosts as nmap use it 'scanme.nmap.org' or '198.116.0-255.1-127' or '216.163.128.20/20'
:param ports: string for ports as nmap use it '22,53,110,143-4564'
:param arguments: string of arguments for nmap '-sU -sX -sC'
:param sudo: launch nmap with sudo if True :returns: scan_result as dictionnary
"""

  scan函数定义如上,使用python-nmap传入参数格式跟使用nmap是一致的,填入arguments即可。

其它函数

  感觉没有更多特别的东西,简单列出,具体可以参考源代码。

C:\Users\Administrator\Downloads\python-nmap-0.6.\python-nmap-0.6.\nmap\nmap.py ( hits)
Line : def __init__(self, nmap_search_path=('nmap', '/usr/bin/nmap', '/usr/local/bin/nmap', '/sw/bin/nmap', '/opt/local/bin/nmap')):
Line : def get_nmap_last_output(self):
Line : def nmap_version(self):
Line : def listscan(self, hosts='127.0.0.1'):
Line : def scan(self, hosts='127.0.0.1', ports=None, arguments='-sV', sudo=False):
Line : def analyse_nmap_xml_scan(self, nmap_xml_output=None, nmap_err='', nmap_err_keep_trace='', nmap_warn_keep_trace=''):
Line : def __getitem__(self, host):
Line : def all_hosts(self):
Line : def command_line(self):
Line : def scaninfo(self):
Line : def scanstats(self):
Line : def has_host(self, host):
Line : def csv(self):

参考

  官方文档:https://pypi.org/project/python-nmap/

  Python-nmap 使用文档:https://www.twblogs.net/a/5c836630bd9eee35cd69b516/zh-cn

以上!

python-nmap 使用基础的更多相关文章

  1. [资料分享]Python视频教程(基础篇、进阶篇、项目篇)

    Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度.它可以用来开发各种程序,从简单的脚本任务到复杂的.面向对象的应用程序都有大显身手的地方.Python还被当作一 ...

  2. Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级

    前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问 ...

  3. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  4. Python 3 集合基础和概念!

    Python 3 集合基础和概念! Python 3中,集合是无序的,所以不能进行切片和索引操作. 创建集合有两个方法:set()方法创建的集合是可变的,可被迭代的:frozenset()方法创建的集 ...

  5. [Python] 文科生零基础学编程系列二——数据类型、变量、常量的基础概念

    上一篇:[Python] 文科生零基础学编程系列--对象.集合.属性.方法的基本定义 下一篇: (仍先以最简单的Excel的VBA为例,语法与Python不同,但概念和逻辑需要理解透彻) p.p1 { ...

  6. [Python] 文科生零基础学编程系列三——数据运算符的基本类别

    上一篇:[Python] 文科生零基础学编程系列二--数据类型.变量.常量的基础概念 下一篇: ※ 程序的执行过程,就是对数据进行运算的过程. 不同的数据类型,可以进行不同的运算, 按照数据运算类型的 ...

  7. Python网络编程基础pdf

    Python网络编程基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VGwGtMSZbE0bSZe-MBl6qA 提取码:mert 复制这段内容后打开百度网盘手 ...

  8. Python Numpy shape 基础用法(转自他人的博客,如涉及到侵权,请联系我)

    Python Numpy shape 基础用法 shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度.它的输入 ...

  9. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程 并行与并发 同步与异步 阻塞与非阻塞 CPU密集型与IO密集型 线程与进程 进 ...

  10. Python之路,第一篇:Python入门与基础

    第一篇:Python入门与基础 1,什么是python? Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 2,python的特征: (1)易于学习,易于利用: (2)开 ...

随机推荐

  1. Redis03——Redis是如何删除你的数据的

    众所周知Redis针对每一个key都能单独设置过期时间,那么Redis是怎么处理这些key的过期时间的呢?当同一时间有大量Key同时到期时,Redis又是怎么处理的呢?会不会影响到我的线上业务呢?如果 ...

  2. 通过实现简单聊天室了解websocket的基础使用

    websocket基础使用 用到的依赖包 websocket的依赖 <dependency> <groupId>javax.websocket</groupId> ...

  3. 01 UIPath抓取网页数据并导出Excel(非Table表单)

    上次转载了一篇<UIPath抓取网页数据并导出Excel>的文章,因为那个导出的是table标签中的数据,所以相对比较简单.现实的网页中,有许多不是通过table标签展示的,那又该如何处理 ...

  4. 数据库开发 Oracle与mysql间的批量处理接口 SSIS+存储过程实现

    公司目前不同的业务系统用了不同的数据库,涉及到oracle.mysql.sqlserver.而一些核心的业务在mysql中,所以平时经常要把oracle.sqlserver中的数据插入到mysql中. ...

  5. Head First设计模式——桥接模式

    桥接模式 桥接模式:不只改变你的实现,也改变你的抽象. 如果有一个电视厂家,遥控器需要升级,电视也需要修改.这种变化部分的封装就适合使用桥接模式,桥接模式通过将实现和抽象放在两个不同的类层次中而使它们 ...

  6. 【转】Java JDBC对应C# ADO连接数据库之区别

    JDBC对应C#连接数据库之区别 之前一直在用java,最近因为找了.NET的工作,开始学习.NET. 今天也是查了好多资料,但是一直没有看到和JDBC之间的对比博文,开始也是一头雾水! 但是功夫不负 ...

  7. 一明单词本持续更新ing...

    introductionshuffingdeployspecifyingreliableclusters programming scalemachinesdeliveringsubmarineadd ...

  8. 【2020-03-28】Dubbo源码杂谈

    前言 本周空闲时间利用了百分之六七十的样子.主要将Dubbo官网文档和本地代码debug结合起来学习,基本看完了服务导出.服务引入以及服务调用的过程,暂未涉及路由.字典等功能.下面对这一周的收获进行一 ...

  9. 【洛谷P1801】黑匣子——优先队列

    题目链接 一道有点意思的题目 我们可以维护两个优先队列:pqmin和pqmax 其中 pqmin 是小根堆, pqmax 是大根堆 每次 add 一个数字,则将数字推入到 pqmin 中 每次 get ...

  10. 解析“60k”大佬的19道C#面试题(下)

    解析"60k"大佬的19道C#面试题(下) 在上篇中,我解析了前 10 道题目,本篇我将尝试解析后面剩下的所有题目. 姐妹篇:解析"60k"大佬的19道C#面试 ...