前言

  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. SpringBoot内置的各种Starter是怎样构建的?--SpringBoot源码(六)

    注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 温故而知新 本篇接 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五) 温 ...

  2. Java反射之成员变量的反射

    上一篇介绍了Java反射之构造方法反射.这次我们在说一说如何反射类中的成员变量并用作一个简单案例. [一]Field类 Filed类代表字段,包含字段拥有的所有属性,比如修饰符,变量类型,值等等,Fi ...

  3. redis的批量操作命令pipeline(PHP实现)

    redis执行一条命令有四个过程:发送命令.命令排队.命令执行.返回结果:整个过程是一个往返时间(RTT).如果有n条命令,就会消耗n次RTT.Redis的客户端和服务端可能部署在不同的机器上.在两地 ...

  4. 将python的字典格式数据写入excei表中

    上面的为最终结果 import requests import re import xlwt import json # 导入必须的包: xlwt,json,requests,re. headers ...

  5. java 知识点总结(转)

    转载自 https://www.cnblogs.com/wl310538259/p/5218251.html (一)Java 1.接口和抽象类的区别 ①抽象类里可以有构造方法,而接口内不能有构造方法. ...

  6. BeanShell调用自己写的jar包进行MD5加密

    1.在eclipse中新建一个java工程,工程名随意. 2.在工程中添加一个package,package名为md5,在package下添加一个class,class名为mymd5. package ...

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

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

  8. ERP系统定价模型及费用组成

    很多人选择ERP系统的时候最关心的就是费用问题,因为很多中小企业资金都是比较缺乏的,如果需要使用大量的金钱来购买ERP系统这是不现实的.你知道ERP系统的定价模型有哪些吗?你知道影响ERP系统价格的因 ...

  9. MyBatis框架——延迟加载

    延迟加载也叫惰性加载或者懒加载,使⽤延迟是为了提⾼程序的运⾏效率,具体是通过尽量少执⾏ SQL 语句来提升效率.Java 程序与数据库的交互频率越低越好,MyBatis 提供的延迟加载功能就可以做到这 ...

  10. springBoot mybatis mysql pagehelper layui 分页

    <!-- 加入 pagehelper 分页插件 jar包--><dependency> <groupId>com.github.pagehelper</gro ...