python-nmap 使用基础
前言
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 使用基础的更多相关文章
- [资料分享]Python视频教程(基础篇、进阶篇、项目篇)
Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度.它可以用来开发各种程序,从简单的脚本任务到复杂的.面向对象的应用程序都有大显身手的地方.Python还被当作一 ...
- Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级
前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问 ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- Python 3 集合基础和概念!
Python 3 集合基础和概念! Python 3中,集合是无序的,所以不能进行切片和索引操作. 创建集合有两个方法:set()方法创建的集合是可变的,可被迭代的:frozenset()方法创建的集 ...
- [Python] 文科生零基础学编程系列二——数据类型、变量、常量的基础概念
上一篇:[Python] 文科生零基础学编程系列--对象.集合.属性.方法的基本定义 下一篇: (仍先以最简单的Excel的VBA为例,语法与Python不同,但概念和逻辑需要理解透彻) p.p1 { ...
- [Python] 文科生零基础学编程系列三——数据运算符的基本类别
上一篇:[Python] 文科生零基础学编程系列二--数据类型.变量.常量的基础概念 下一篇: ※ 程序的执行过程,就是对数据进行运算的过程. 不同的数据类型,可以进行不同的运算, 按照数据运算类型的 ...
- Python网络编程基础pdf
Python网络编程基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VGwGtMSZbE0bSZe-MBl6qA 提取码:mert 复制这段内容后打开百度网盘手 ...
- Python Numpy shape 基础用法(转自他人的博客,如涉及到侵权,请联系我)
Python Numpy shape 基础用法 shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度.它的输入 ...
- python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)
python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程 并行与并发 同步与异步 阻塞与非阻塞 CPU密集型与IO密集型 线程与进程 进 ...
- Python之路,第一篇:Python入门与基础
第一篇:Python入门与基础 1,什么是python? Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 2,python的特征: (1)易于学习,易于利用: (2)开 ...
随机推荐
- 开源项目在闲鱼、b 站上被倒卖?这是什么骚操作?
起因 - 又是一封邮件 2020 年 3 月 2 日,收到了一封邮件,对,这次故事的起因又是一封邮件,和上次写个bug被国家信息安全漏洞共享平台抓到了一样. 这是一条评论通知邮件,一开始我以为只是正常 ...
- Vue2.0 【第一季】第2节 v-if v-else v-show 指令
目录 Vue2.0 [第一季]第2节 v-if v-else v-show 指令 第二节 v-if v-else v-show 指令 2.1 v-if指令.v-else指令: 2.2 v-show的使 ...
- frida(hook工具)的环境搭建
一.简介 frida 是一款基于 python+javascript 的 hook 框架,可运行在 android.ios.linux.win等各个平台,主要使用的动态二进制插桩技术. Frida官网 ...
- linux相关的帮助文档
几乎所有linux发行版都会提供大量的有用的文档. 手册页 linux发行版包含了有关常用命令.系统调用和库函数的手册页.手册页被分成不同的章节并分别标以序号: Section 名称 ...
- 初识Flask、快速启动
目录 一.初识Flask 1.1 什么是flask? 1.2 为什么要有flask? 二.Flask快速启动 一.初识Flask 1.1 什么是flask? Flask 本是作者 Armin Rona ...
- php 数据库 操作
header.php <?php error_reporting(0);//加上error_reporting(0);就不会弹出警告了 // header("Content-type: ...
- EPX-Studio操作多线程的方法
procedure TF1167908962.Button1Click(Sender: TObject); begin ThIndex := ; EPXThread1.StartThread; EPX ...
- [组件封装]微信小程序-图片批量上传照片墙
描述 批量上传图片, 可设置最大上传个数, 可删除, 可设置默认值. 效果 源码 pictures-wall.wxml <view class="picturesWall"& ...
- [C++]HelloWorld背后的故事!
人物介绍 姓名 HelloWorld 性别 .cpp 住址 D:\ 身份证号(SHA1) 25106D2879A9EA300BB264F8155A71D7C44DA2E8 故事简介 编写源文件 预编译 ...
- ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory
问题描述: ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory 首先检 ...