nmap

简介

Nmap,也就是 Network Mapper,最早是 Linux 下的网络扫描和嗅探工具包。

nmap 是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。

正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱用的工具 。系统管理员可以利用 nmap 来探测工作环境中未经批准使用的服务器,但是黑客会利用 nmap 来搜集目标电脑的网络设定,从而制定攻击计划。

功能

  1. 主机发现 - 识别网络上的主机。例如,列出响应TCP和/或ICMP请求或打开特定端口的主机。
  2. 端口扫描 - 枚举目标主机上的开放端口。
  3. 版本检测 - 询问远程设备上的网络服务以确定应用程序名称和版本号。
  4. OS检测 - 确定网络设备的操作系统和硬件特性。
  5. 可与脚本进行脚本交互 - 使用 nmap 脚本引擎(NSE)和 Lua 编程语言。

历史

2009 年 07 月 17 日,开源网络安全扫描工具 nmap 正式发布了 5.00版,这是自 1997 年以来最重要的发布,代表着 nmap 从简单的网络连接端扫描软件变身为全方面的安全和网络工具组件。

nmap 于 1997 年 9 月推出,支持 Linux、Windows、Solaris、BSD、Mac OS X、AmigaOS 系统,采用 GPL 许可证,最初用于扫描开放的网络连接端,确定哪服务运行在那些连接端,它是评估网络系统安全的重要软件,也是黑客常用的工具之一。新的 nmap 5.00 版大幅改进了性能,增加了大量的脚本。例如 nmap 现在能登录进入 Windows,执行本地检查(PDF),能检测出臭名昭著的 Conficker 蠕虫。其它的主要特性包括:用于数据传输,重定向和调试的新 Ncat 工具,Ndiff 快速扫描比较工具,高级 GUI 和结果浏览器Zenmap等。

2010年01月25日,Nmap 5.20 发布。
2012年12月04日,Nmap 6.25 发布,网络安全审计工具。
2015年11月19日,Nmap 7.0发布。
2016年03月17日,Nmap 7.10发布。
2016年09月29日,Nmap 7.30发布。
2016年10月29日,Nmap 7.31发布。
2016年12月20日,Nmap 7.40发布。
2017年06月13日,Nmap 7.50发布。
2017年07月31日,Nmap 7.60发布。
2018年03月20日,Nmap 7.70发布。
2019年08月10日,nmap 7.80发布

安装

Centos7.3

  1. 官网下载页面获取最新的rpm包连接:

    1
    https://nmap.org/dist/nmap-7.91-1.x86_64.rpm
  2. 使用rpm命令下载安装:

    1
    [root@cs tmp]# rpm -vhU https://nmap.org/dist/nmap-7.91-1.x86_64.rpm
  3. 测试是否安装成功:

    1
    2
    3
    4
    5
    6
    [root@cs tmp]# nmap --version
    Nmap version 7.91 ( https://nmap.org )
    Platform: x86_64-redhat-linux-gnu
    Compiled with: nmap-liblua-5.3.5 openssl-1.1.1h nmap-libssh2-1.9.0 nmap-libz-1.2.11 nmap-libpcre-7.6 nmap-libpcap-1.9.1 nmap-libdnet-1.12 ipv6
    Compiled without:
    Available nsock engines: epoll poll select
  4. 来个示例,查看本机开放端口情况

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [root@cs tmp]# nmap localhost
    Starting Nmap 7.91 ( https://nmap.org ) at 2020-12-09 12:56 CST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.0000030s latency).
    Other addresses for localhost (not scanned): ::1
    Not shown: 995 closed ports
    PORT STATE SERVICE
    20/tcp open ftp-data
    21/tcp open ftp
    22/tcp open ssh
    25/tcp open smtp
    3306/tcp open mysql

    Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds

windows10

  1. 从 nmap 的官网下载二进制的安装包
  2. 一路下一步安装,中间会遇到安装插件,全选就完了。
  3. 安装完毕,后续可能会有使用 Python 调用 nmap 的情况,所以还需要将 nmap 的安装目录添加到系统的 path 中,然后重启电脑即可。

可能的报错

nmap3.exceptions.NmapNotInstalledError: Nmap is either not installed or we couldn't locate nmap path Please ensure nmap is installed

当你在 Windows 平台中,使用 Python 操作 nmap 时,而 nmap 的安装目录没有添加到系统 path 就会报这个错误。

解决办法就是添加 path

nmap 语法及常用命令

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
nmap [空格] [选项/多选项/协议] [空格] [目标]

选项:
-A :全面扫描. 综合扫描. 是一种完整扫描目标信息的扫描方式.
--exclude : 排除指定的地址 例: nmap 192.168.1.0/24 --exclude 192.168.1.1 那么就不会对192.168.1.1进行扫描,
--excludefile : 排除指定的地址列表 例: nmap 192.168.1.0/24 --excludefile list.txt 那么就不会对list.txt里面的地址进行扫描,
-iL : 扫描一个列表文件 例 nmap -iL list.txt
-sP : Ping扫描,效率高,返回信息少. 例: nmap -sP 192.168.1.110
-P0(Pn) :无Ping扫描,可以躲避防火墙防护,可以在目标主机禁止ping的情况下使用
-PS :TCP SYN Ping扫描
-PA :TCP ACK Ping扫描
PR : ARP Ping扫描
-n : 禁止DNS反向解析
-T : 时序选项, -TO-T5. 用于IDS逃逸,0=>非常慢,1=>缓慢的,2=>文雅的,3=>普通的,4=>快速的,5=>急速的
-p : 指定端口扫描
-F : 快速扫描
-f : 报文分段
-D : ip地址欺骗 例 nmap -D RND:5 192.168.1.110 RND:为生成随机ip地址
-sS : TCP SYN 扫描,速度快, 11000次左右. 较为隐蔽.
-sT : TCP连接扫描
-sU : UDP扫描,扫描非常慢,容易被忽视
-sN,-sF : 隐蔽扫描
-sI : 空闲扫描,允许端口完全欺骗,可以允许不使用自身ip的情况下发起扫描,非常之隐蔽的扫描.但得先寻找空闲主机,指令为 nmap -p80 -open -script ipidseq 192.168......,第二种是往事随机寻找, nmap -p80 -open -script ipidseq -iR 2000 (iR选项代表随机选择目标.2000带表选择的数量,-open代表只选择端口开放的空闲主机)
-p- : 扫描所有端口 1-65535
-top-ports : 只扫描开发概率最高的端口 后面跟上数值 例 nmap -top-ports 100 , 就是扫描概率最高的前100个端口
<版本探测相关>:
-sV : 版本探测 ,通过相应的端口探测对应的服务,根据服务的指纹识别出相应的版本.
-sV --allports : 只有使用--allports才能扫描所有的端口,默认情况下回跳过如 TCP9100端口(hp打印机专用端口)
--version-intersity : 设置扫描强度 0-9 ,数值越大越有可能被识别,花费时间越多,默认是7
--version-ligth : 扫描强度,轻量级扫描(2) ,等用于--version-intersity 2
--version-all :扫描强度,重量级扫描(9) ,等同于--version-intersity 9
--version-trace : 获取详细的版本信息
-sR : 判断开放端口是否为RPC端口, 如果是返回程序和版本号.
--resaon : 显示主机存活原因

例:nmap -A 192.168.1.110nmap -A 192.168.1.1-100 (对一个ip范围进行全面扫描)

nmap 支持多元化的语法格式 ,例:

  • nmap 192.168.1.110 单个目标扫描
  • nmap 192.168.1.110 192.168.1.22 192.168.1.33 多个目标扫描
  • nmap 192.168.43.10,20,30 多个目标扫描简写
  • nmap 192.168.1.1-30 指定范围段扫描

选项 -T 时序

1
2
3
4
5
6
7
8
9
10
11
12
13
-T(0-5) , 默认为3,

0 即Paranoid模式, 为了避开IDS的检测使扫描速度非常慢,nmap串所有的扫描.每隔最少5分钟才发送一个包.

1 即Sneaky模式,和0也差不多,区别就是发送数据包的间隔为15秒.

2 即Polite模式,不增加太大的网络负载.串行每个探测,并使每个探测间隔0.4

3 即Normal模式,nmap的默认选项,在不使网络过载或者主机/端口丢失的情况下尽可能快速的扫描.

4 即Aggressive模式,设置5分钟的超时限制,对每台主机的扫描时间不超过5分钟,并且对每次探测回应的等待时间不超过1.5秒.

5 即Insane模式, 只适合快速的网络或者不在意丢失默些信息,对每台主机的超时限制为75秒,对每次探测只等待0.3秒.

端口的说明

端口分为 TCP 和 UDP 两种类型

  • TCP: 面向连接. 较可靠
  • UDP: 无连接.不可靠的

常见 TCP 端口: 80, 443, 139, 445, 3306, 6379, 8080等.

端口范围 1-65535

  • 公认端口(well-known port):从0至1024,最常用端口,通常与协议绑定;
  • 注册端口(registered port):从1025至49151,这些端口已经注册到服务协议上;
  • 动态或私有端口(dynamic/private port):从49152至65535。

扫描结果端口状态说明

  • open:目标端口开启。
  • closed:目标端口关闭。
  • filtered:通常被防火墙拦截,无法判断目标端口开启与否。
  • unfiltered:目标端口可以访问,但无法判断开启与否。
  • open | filtered:无法确定端口是开启还是filtered。
  • closed | filtered:无法确定端口是关闭还是filtered。

Reference


nmap
https://flepeng.github.io/081-security-software-端口扫描-nmap/
作者
Lepeng
发布于
2021年3月8日
许可协议