热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python3nmap函数简介及使用方法

本文介绍了python3nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。

简介



python-nmap是一个使用nmap进行端口扫描的python库,它可以很轻易的生成nmap扫描报告,并且可以帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。

可以看到python-nmap只有四个py文件(__init__.py, nmap.py, test.py, test_nmap.py),下面就一一进行解读

 


 __init__.py



 除去几十行的注释外,真正的代码只有四行,基本内容就是从同目录的nmap.py下导入一些基本信息:作者(__author__),版本(__version__),最后修改日期(__last_modification__),这些在nmap.py下都有写

 


 test.py



 test.py也只有简单的几行,运行时就是打印出本地的Host,猜测是用来测试是否可以利用nmap的扫描功能 

 


nmap.py



nmap.py用于调用nmap的功能进行扫描,主要的扫描函数为PortScanner(object):

 

class PortScanner(object):

PortScanner类的英文注释就写着功能:PortScanner class allows to use nmap from python(PortScanner类允许在python使用nmap)

def __init__(self, nmap_search_path=('nmap', '/usr/bin/nmap', '/usr/local/bin/nmap', '/sw/bin/nmap', '/opt/local/bin/nmap')):

主要功能就是在nmap_search_path查找nmap的路径(从nmap_search_path可以看出在Windows下使用得自己添加路径)和初始化PortScanner模块,包括本机上nmap的路径(self._nmap_path),扫描的结果(self._scan_result),nmap的主版本(self._nmap_version_number),  nmap的子版本(self._nmap_subversion_number),  nmap输出的版本信息(self._nmap_last_output),是否找到nmap(is_nmap_found)

def

get_nmap_last_output(self):

返回文本输出,可能用于调试,这里有作者的英文注释

 

def nmap_version(self):

如果检查到nmap返回nmap的版本信息

 

def listscan(self, hosts='127.0.0.1'):

不进行扫描,但解析目标主机并返回一个主机列表

 

def scan(self, hosts='127.0.0.1', ports=None, arguments='-sV', sudo=False):

调用nmap的扫描功能进行扫描,以json格式输出

 

 

def analyse_nmap_xml_scan(self, nmap_xml_output=None, nmap_err='', nmap_err_keep_trace='', nmap_warn_keep_trace=''):

对nmap的扫描结果进行处理,扫描结果是XML形式,转化为json形式打印出来

 

def __getitem__(self, host):

返回目标ip

 

def all_hosts(self):

以列表形式返回目标ip

 

def command_line(self):

返回输入的命令行

 

def scaninfo(self):

以结构体形式返回扫描信息

 

def scanstats(self):

以结构体形式返回扫描状态

 

def has_host(self, host):

如果目标主机有回应就返回True(检查是否有目标主机)

 

def csv(self):

把csv输出转化为文本返回

 

def __scan_progressive__(self, hosts, ports, arguments, callback, sudo):

用于PortScannerAsync的回调

 

class PortScannerAsync(object):

允许异步使用python中的nmap,每个主机的扫描结果都会通过回调返回,进行多线程扫描

def __init__(self):

调用PortScanner()检查nmap所在的系统和和nmap版本

 

def __del__(self):

用于对self._process清零,self._process用来存放扫描信息

 

def scan(self, hosts='127.0.0.1', ports=None, arguments='-sV', callback=None, sudo=False):

调用多线程扫描,并且结果通过回调函数返回

 

def stop(self):

 停止当前的扫描过程

 

def wait(self, timeout=None):

等待当前扫描进程的结束和超时

 

def still_scanning(self):

检查当前进程是否还在扫描

 

class PortScannerYield(PortScannerAsync):

针对主机的扫描结果调用Yield进行处理

def __init__(self):

调用PortScanner()检查nmap所在的系统和和nmap版本

 

def scan(self, hosts='127.0.0.1', ports=None, arguments='-sV', sudo=False):

把扫描结果放到迭代器里进行回调

 

class PortScannerHostDict(dict):

PortScannerHostDict:用于存储和访问主机扫描结果的字典类

def hostnames(self):

以列表形式返回主机名

def hostname(self):

返回第一个主机名,为了兼容性问题,不甚理解

def state(self):
def uptime(self):

 两个都是返回主机的状态信息

def all_protocols(self):

 all_protocols:以列表形式返回扫描的协议

def all_tcp(self):
def has_tcp(self, port):
def tcp(self, port):

 三个函数的作用就是列出扫描到的TCP端口的信息

def all_udp(self):
def has_udp(self, port):
def udp(self, port):

 三个函数的作用就是列出扫描到的UDP端口的信息

def all_ip(self):
def has_ip(self, port):
def ip(self, port):

 三个函数的作用就是列出扫描到的IP端口的信息

def all_sctp(self):
def has_sctp(self, port):
def sctp(self, port):

 三个函数的作用就是列出扫描到的SCTP端口的信息

 

class PortScannerError(Exception):

为PortScanner检测异常的类

返回异常信息

 def __get_last_online_version():

 通过查询官网获得最新的python-nmap的版本信息,如0.6.1

 

 def convert_nmap_output_to_encoding(value, code="ascii"):

 对Unicode编码的scan_result对象进行编码的转换,作为字典返回

 


test_nmap.py



 test_nmap.py是用来对python-nmap进行测试和对nmap是否正常运行的检查,无论是pdb库还是nose测试框架都经常用于python的测试和调试

 

class Pdb(Plugin):

提供调试选项,如果在程序测试时遇到错误或故障会放到pdb里进行调试

def options(self, parser, env):

 定义命令行选项:包括--pdb, --pdb-failures,  --pdb-errors

 

def configure(self, options, conf):

 通过检查异常来匹配哪一个类型的异常触发插件

 

def addError(self, test, err):

 如果配置调试结果是调试错误把错误放入pdb

 

def addFailure(self, test, err):

 如果配置调试结果是调试失败把错误放入pdb

 

def debug(self, err):

 不甚理解,猜测是输出错误信息

 

def setup_module():

 设置扫描模块进行扫描

 

def test_wrong_args():

 测试输入的错误参数

 

def test_host_scan_error():

 测试主机扫描的错误

 

def xmlfile_read_setup():

 测试是否能读取xml文件

 

def test_command_line():

 测试输入命令行的命令是否合法

 

def test_scan_info():

 测试扫描信息是否存在

 

def test_all_hosts():
def test_host():
def test_host_no_hostname():
def test_port():

 45.33.32.156是nmap的官网里的一个机器人,用来测试nmap是否能正确的运行

 

def test_listscan():

测试列表扫描主机的结果

 

def test_csv_output():

 测试输出格式是否为CSV

 

def test_listscan():

 测试列表扫描

 

def test_ipv6():

 测试对IPV6的扫描

 

def test_ipv4_async():

 测试IPV4的异步扫描

 

def test_ipv6_async():

 测试IPV6的异步扫描

 

def scan_localhost_sudo_arg_O():

 扫描本地主机用户的信息

 

def test_sudo():

 测试主机信息

 

def test_parsing_osmap_osclass_and_others():

 测试是否获得主机的信息

 

def test_all_protocols():

 测试本地主机的信息

 

def xmlfile_read_setup_multiple_osmatch():

 读取osmatch_output.xml文件,设置osmatch的xml格式输出

 

def test_multipe_osmatch():

 检查主机的osmatch里是否存在一些信息

 

def test_convert_nmap_output_to_encoding():

 测试是否对nmap扫描结果进行了编码

 

def test_WARNING_case_sensitive():

 测试warning的警告信息是否存在

 

def test_scan_progressive():

 测试异步扫描的情况

 


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文详细介绍了如何使用Spring Boot进行高效开发,涵盖了配置、实例化容器以及核心注解的使用方法。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
author-avatar
超可爱萌地1983
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有