python-nmap库使用教程(Nmap网络扫描器的Python接口)(功能:主机发现、端口扫描、操作系统识别等)

文章目录

  • Python-nmap库使用教程
    • 前置条件
    • 引入python-nmap
    • 创建Nmap扫描实例
    • 执行简单的主机发现(`nmap -sn`)
      • 示例,我有一台主机配置为不响应 ICMP 请求,但使用`nmap -sn`,仍然能够探测到设备:
    • 端口扫描
      • 扫描特定端口
      • 扫描多个端口和主机
    • 获取扫描结果
    • 解析高级扫描信息
    • 错误处理和异常
    • 使用Python-nmap进行OS指纹识别(猜测目标主机操作系统类型)
    • 总结

Python-nmap库使用教程

Python-nmap是一个Python库,用于帮助进行网络扫描。它是Nmap网络扫描器的Python接口,允许开发者从Python脚本中直接调用Nmap的功能。这篇文章将详细介绍如何使用python-nmap库来执行各种网络扫描任务。

前置条件

在开始之前,需要确保安装了Nmap和python-nmap库。可以通过以下命令安装Nmap:

sudo apt-get install nmap

对于python-nmap库,可以使用pip进行安装:

pip install python-nmap

引入python-nmap

要在Python代码中使用nmap,首先需要导入库:

import nmap

创建Nmap扫描实例

创建一个Nmap扫描实例是使用python-nmap进行扫描的第一步。下面的代码演示了如何创建一个Nmap扫描器对象:

nm = nmap.PortScanner()

执行简单的主机发现(nmap -sn

扫描一个或多个IP地址,以检查它们是否在线:

nm.scan(hosts='192.168.1.0/24', arguments='-sn')

上面的命令使用了-sn参数,这是Nmap的ping扫描选项,用于执行主机发现而不是端口扫描。-sn选项除了发送ICMP回显请求(即ping请求),还会发送TCP和/或UDP包到特定的端口。

示例,我有一台主机配置为不响应 ICMP 请求,但使用nmap -sn,仍然能够探测到设备:

用Advanced IP Scanner工具查看192.168.1.118设备是在线的:

在这里插入图片描述

配置了不响应ICMP请求:
在这里插入图片描述

nmap -sn 192.168.1.118

在这里插入图片描述

nmap -PR也可以,但耗时较长:

nmap -PR 192.168.1.118

在这里插入图片描述

端口扫描

扫描特定端口

可以指定扫描单个主机上的特定端口:

nm.scan('127.0.0.1', '22-443')

这将扫描本地主机(127.0.0.1)上从22到443之间的所有端口。

扫描多个端口和主机

也可以同时扫描多个端口和主机:

nm.scan('192.168.1.0/24 10.0.0.0/24', '22,80,443')

此命令会扫描两个子网内的主机,只检查端口22、80和443。

获取扫描结果

完成扫描后,可以获取关于发现的每个主机的信息:

for host in nm.all_hosts():
    print('Host : %s (%s)' % (host, nm[host].hostname()))
    print('State : %s' % nm[host].state())

上述代码将打印出所有已扫描主机的IP地址、主机名和状态(例如,‘up’或’down’)。

解析高级扫描信息

除了基础信息外,还可以获取更多细节,如开放端口和相应的服务信息:

for host in nm.all_hosts():
    for proto in nm[host].all_protocols():
        print('----------')
        print('Protocol : %s' % proto)

        lport = nm[host][proto].keys()
        for port in sorted(lport):
            print('port : %s\tstate : %s' % (port, nm[host][proto][port]['state']))

此段代码会列出每个主机的所有开放端口及其状态。

错误处理和异常

使用python-nmap时,需要考虑到异常情况,比如扫描权限不足、网络问题等。可以通过try-except块来捕获和处理这些异常:

try:
    nm.scan(hosts='192.168.1.0/24', arguments='-sS')
except nmap.PortScannerError as e:
    print("Scan error: " + str(e))
except Exception as e:
    print("Unexpected error: " + str(e))

在上面的代码中,PortScannerError捕获了与Nmap扫描相关的错误,而其他类型的异常则被通用的Exception捕获。

使用Python-nmap进行OS指纹识别(猜测目标主机操作系统类型)

Python-nmap可以使用Nmap的操作系统指纹识别功能来猜测目标主机上运行的操作系统类型。以下是如何实现的示例代码:

nm.scan(hosts='192.168.1.100', arguments='-O')
if 'osclass' in nm['192.168.1.100']:
    for osclass in nm['192.168.1.100']['osclass']:
        print('OSClass.type : {0}'.format(osclass['type']))
        print('OSClass.vendor : {0}'.format(osclass['vendor']))
        print('OSClass.osfamily : {0}'.format(osclass['osfamily']))
        print('OSClass.osgen : {0}'.format(osclass['osgen']))
        print('OSClass.accuracy : {0}'.format(osclass['accuracy']))
        print('')

这段代码尝试对IP为192.168.1.100的主机进行操作系统检测,并打印出可能的操作系统类别、供应商、家族和生成等信息。

总结

Python-nmap是一个功能强大的工具,可以用来增强网络扫描和主机发现过程。通过以上介绍和代码示例,应该能够开始使用python-nmap库来执行各种网络扫描任务。当然,进行网络扫描时,始终需要遵守相关法律法规,确保扫描活动是合法且有授权的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/205787.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从setText处理来学习绘制流程

Android中TextView调用setText是会进行text文字的更新,是一个比较简单的画面变化,这可以作为一个出发点来查看绘制处理流程。这里来问问chatGPT,来查看大致流程 请讲讲Android中textView的setText处理流程 ChatGPT Poe 当你调用 textView.s…

二分算法(整数二分、浮点数二分)

文章目录 二分一、整数二分(一)整数二分思路(二)整数二分算法模板1.左查找(寻找左侧边界)2.右查找(寻找右侧边界)3.总模板 (三)题目:数的范围 二、…

【linux网络】补充网关服务器搭建,综合应用SNAT、DNAT转换,dhcp分配、dns分离解析,nfs网络共享以及ssh免密登录

目录 linux网络的综合应用 1)网关服务器:ens35:12.0.0.254/24,ens33:192.168.100.254/24;Server1:192.168.100.101/24;PC1和server2:自动获取IP;交换机无需…

spring框架的事务传播级别经典篇

一 spring事务传播级别 1.1 总结概述 方法A:外围方法,方法B:内部方法,在A中调用B 1.事务级别PROPAGATION_REQUIRED: 如果A为PROPAGATION_REQUIRED:B 不管有没有设置事务级别,都会加入到A的事务级别中。如…

低代码究竟有何特别之处?为什么很多企业倾向于用低代码开发软件?

目录 一、低代码是什么 二、低代码有哪些核心能力? 三、低代码能做哪些事情? 1、软件开发快效率高 2、满足企业的多样化需求 3、轻松与异构系统集成 4、软件维护成本低 5、为企业实现降本增效 四、结语 低代码平台正高速发展中,越来越多的企业…

phpoffice在tp框架中如何实现导入导出功能

安装 phpoffice/phpspreadsheet 库 composer require phpoffice/phpspreadsheet 导入功能 创建一个用于上传文件的视图&#xff0c;可以使用元素来实现文件上传。 <!-- application/view/your/import.html --><form action"{:url(your/import)}" method&q…

智慧博物馆视频监控系统设计,可视化AI智能分析技术助力博物馆多维度监管

一、背景与需求 博物馆视频智能监控系统是智慧博物馆建设的重要组成部分&#xff0c;传统的博物馆视频监控系统以模拟系统架构为主&#xff0c;存在监管效率低、各个系统独立运作形成数据孤岛、以“事后补救”为主要监管手段等管理弊病&#xff0c;无法满足互联网高速发展背景…

学习笔记:Pytorch 搭建自己的Faster-RCNN目标检测平台

B站学习视频 up主的csdn博客 1、什么是Faster R-CNN 2、pytorch-gpu环境配置&#xff08;跳过&#xff09; 3、Faster R-CNN整体结构介绍 Faster-RCNN可以采用多种的主干特征提取网络&#xff0c;常用的有VGG&#xff0c;Resnet&#xff0c;Xception等等。 Faster-RCNN对输入…

Re8 Generative Modeling by Estimating Gradients of the Data Distribution

宋扬博士的作品&#xff0c;和DDPM同属扩散模型开创工作&#xff0c;但二者的技术路线不同 Introduction 当前生成模型主要分成两类 基于似然模型 通过近似最大似然直接学习分布的概率密度&#xff0c;如VAE 隐式生成模型 概率分布由其抽样过程的模型隐式表示&#xff0c…

Verilog 入门(三)(表达式)

文章目录 操作数操作符算术操作符关系操作符相等关系操作符逻辑操作符按位操作符条件操作符 操作数 操作数可以是以下类型中的一种&#xff1a; 常数参数线网寄存器位选择部分选择存储器单元函数调用 操作符 Verilog HDL中的操作符可以分为下述类型&#xff1a; 算术操作符…

WPF窗口样式的比较

WPF窗口样式的比较 1.WPF默认Window窗口 带有图标 标题栏 最小最大化推出按钮 <Window x:Class"GlowWindowDemo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006…

在Spring Boot中使用JavaMailSender发送邮件

用了这么久的Spring Boot&#xff0c;我们对Spring Boot的了解应该也逐步进入正轨了&#xff0c;这篇文章讲的案例也在我们的实际开发中算是比较实用的了&#xff0c;毕竟我们完成注册功能和对用户群发消息&#xff0c;都可以采用到邮箱发送功能&#xff0c;往下看&#xff0c;…

焕发图片生机,批量升级gif图片像素,打造高质量图片盛宴!

你是否曾经遇到过需要提高gif图片质量&#xff0c;但手动处理每一张图片又非常耗时且繁琐的情况&#xff1f;如果你觉得处理大量图片会让你感到压力&#xff0c;那么你一定需要我们的批量提高像素工具&#xff01; 第一步&#xff0c;首先我们要进入首助剪辑高手主页面&#x…

ELFK集群部署(Filebeat+ELK) 本地收集nginx日志 远程收集多个日志

filebeat是一款轻量级的日志收集工具&#xff0c;可以在非JAVA环境下运行。 因此&#xff0c;filebeat常被用在非JAVAf的服务器上用于替代Logstash&#xff0c;收集日志信息。 实际上&#xff0c;Filebeat几乎可以起到与Logstash相同的作用&#xff0c; 可以将数据转发到Logst…

正式版PS 2024 25新增功能 刚刚发布的虎标正式版

Adobe Photoshop 2024是一款业界领先的图像编辑软件&#xff0c;被广泛应用于设计、摄影、插图等领域。以下是这款软件的一些主要功能和特点&#xff1a; 丰富的工具和功能。Adobe Photoshop 2024提供了丰富的工具和功能&#xff0c;可以帮助用户对图像进行编辑、修饰和优化。…

虚拟数据生成_以Python为工具

生成虚拟数据_以Python为工具 生成虚拟数据技术在现实生活中具有多个重要的应用领域。它为数据隐私保护、机器学习算法开发、数据处理和可视化等方面提供了实用且有价值的解决方案。尤其是能满足定制化需求的虚拟数据&#xff0c;在预期的方向上让数据定向随机。 &#x1f339…

编程之外,生活的美好航程

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

volatile-之小总结

凭什么我们Java写了一个volatile关键字&#xff0c;系统底层加入内存屏障&#xff1f;两者的关系如何勾搭&#xff1f; 内存屏障是什么&#xff1f; 是一种屏障指令&#xff0c;它使得CPU或编译器对屏障指令的前和后所发出的内存操作执行一个排序的约 束。也称为内存栅栏或栅…

概念理论类-k8s :架构篇

转载&#xff1a;新手通俗易懂 k8s &#xff1a;架构篇 Kubernetes&#xff0c;读音是[kubə’netis]&#xff0c;翻译成中文就是“库伯奈踢死”。当然了&#xff0c;也可以直接读它的简称&#xff1a;k8s。为什么把Kubernetes读作k8s&#xff0c;因为Kubernetes中间有8个字母…

centos7配置tomcat

简介 Tomcat是一个使用Java编写的开源Web应用服务器,是由Apache Software Foundation管理的一个项目。它是一个轻量级的应用服务器,可以下载、安装和使用,而且还提供了许多高级功能,例如支持Java Servlet、JavaServer Pages (JSP)和JavaServer Faces (JSF) 等JavaEE技术,…