前言

  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. vue中计算属性中的set和get

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <body& ...

  2. python之 filter

    filter的语法:filter(函数名字,可迭代的变量) 其实filter就是一个“过滤器”:把[可迭代的变量]中的值,挨个地传给函数进行处理,那些使得函数的返回值为True的变量组成的迭代器对象就 ...

  3. CF1082B Vova and Trophies 题解

    CF1082B Vova and Trophies 题解 瞎搞题,推荐的,一看是道水题,就随手A了-- 题目描述 Vova has won \(n\)trophies in different com ...

  4. USB概述及协议基础

    USB概述及协议基础 USB的拓扑结构 USB是一种主从结构的系统.主机叫做Host,从机叫做Device(也叫做设备). 通常所说的主机具有一个或者多个USB主控制器(host controller ...

  5. 【JAVA进阶架构师指南】之一:如何进行架构设计

    前言   本博客是长篇系列博客,旨在帮助想提升自己,突破技术瓶颈,但又苦于不知道如何进行系统学习从而提升自己的童鞋.笔者假设读者具有3-5年开发经验,java基础扎实,想突破自己的技术瓶颈,成为一位优 ...

  6. Windows10专业版+Microsoft office2016专业增强版免费无毒官方正版装机教程(简)

    win10: 1.官网制作系统盘(具体见官网提示) 2.备份C盘 3.重启,主板调到USB优先(重启后疯狂按F12或del,具体看主板型号) 4.安装(这个看造化) 5.激活 slmgr /ipk N ...

  7. Socket编程简介

    目录 背景 基础 流程 参考 本文系读书笔记,非深入研究,也无代码,如非所需,请见谅. 哦,这里有份不错的:Linux的SOCKET编程详解 背景 花了好久的时间(大约一周,我太垃圾)看完了一篇英文文 ...

  8. iOS 原生库(AVFoundation)实现二维码扫描,封装的工具类,不依赖第三方库,可高度自定义扫描动画及界面(Swift 4.0)

    Create QRScanner.swift file // // QRScanner.swift // NativeQR // // Created by Harvey on 2017/10/24. ...

  9. 妈妈再也不担心我面试被Redis问得脸都绿了

    长文前排提醒,收藏向前排提醒,素质三连 (转发 + 在看 + 留言) 前排提醒! 前言 Redis 作为一个开源的,高级的键值存储和一个适用的解决方案,已经越来越在构建 「高性能」.「可扩展」 的 W ...

  10. java,jq,ajax写分页

    1.先写好html基础样式 我懒得去写css样式233,能看就行 <style> #page { width: 20px; } </style> <table> & ...