Nmap 是一款功能强大的网络扫描工具,用于安全审计和渗透测试。它是网络管理员用来解决网络连接问题和解决问题的基本工具之一端口扫描
.
Nmap还可以检测Mac地址,OS type、服务版本等等。
本文介绍了如何使用的基础知识nmap
命令来执行各种网络任务。
安装 Nmap#
Nmap 是一个多平台程序,可以安装在所有主要操作系统上。它最初仅作为 Linux 工具发布,后来被移植到 BSD、Windows 和 macOS 等其他系统。
如果您更喜欢 GUI 而不是命令行,Nmap 还有一个图形用户界面,称为Zenmap
.
官方二进制包可以从Nmap下载下载页面
.
安装过程很简单,并且根据您的操作系统而有所不同。
在 Ubuntu 和 Debian 上安装 Nmap#
Nmap 可从默认的 Ubuntu 和 Debian 存储库中获取。要安装它,请运行:
sudo apt update
sudo apt install nmap
在 CentOS 和 Fedora 上安装 Nmap#
在 CentOS 和其他 Red Hat 衍生产品上运行:
sudo dnf install nmap
在 macOS 上安装 Nmap#
macOS 用户可以通过从 Nmap 站点或通过 Homebrew 下载“.dmg”安装包来安装 Nmap:
brew install nmap
在 Windows 上安装 Nmap#
Windows 版本的 Nmap 有一些限制,通常比 UNIX 版本慢一点。
在 Windows 上安装 Nmap 最简单的选择是下载并运行自安装 exe 文件。
您可以通过命令行或启动 Zenmap 程序在 Windows 上运行 Nmap。有关如何在 Windows 上使用 Nmap 的更多信息,请查看安装后使用说明
.
使用 Nmap#
Nmap 通常用于审核网络安全、网络映射、识别开放端口以及搜索在线设备。
简化的语法nmap
命令如下:
nmap [Options] [Target...]
使用 Nmap 的最基本示例是以标准用户身份扫描单个目标,而不指定任何选项:
nmap scanme.nmap.org
当以不具有原始数据包权限的非 root 用户身份调用时,nmap
运行 TCP 连接扫描。这 (-sT
) 在非特权模式下默认打开。
输出将如下所示,包括有关扫描的基本信息以及打开和过滤的 TCP 端口的列表。
Starting Nmap 7.91 ( https://nmap.org ) at 2020-12-16 20:19 CET
Nmap scan report for cast.lan (192.168.10.121)
Host is up (0.048s latency).
Not shown: 981 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
53/tcp open domain
80/tcp open http
110/tcp open pop3
143/tcp open imap
443/tcp open https
587/tcp open submission
993/tcp open imaps
995/tcp open pop3s
1025/tcp open NFS-or-IIS
1080/tcp open socks
8080/tcp open http-proxy
8081/tcp open blackice-icecap
Nmap done: 1 IP address (1 host up) scanned in 1.78 seconds
最流行的扫描选项是 TCP SYN 扫描(-sS
)比连接选项更快,并且适用于所有兼容的 TCP 堆栈。
-sS
默认情况下打开nmap
以具有管理权限的用户身份调用:
sudo nmap 192.168.10.121
要获得更详细的输出,请使用增加详细程度-v
or -vv
:
sudo nmap -vv 192.168.10.121
要执行 UDP 扫描,请使用 (-sU
) 作为 root 用户的选项:
sudo nmap -sU 192.168.10.121
有关端口扫描方法的完整列表,请访问Nmap 文档页面
.
Nmap 还支持 IPv6 地址。要指定 IPv6 主机,请使用-6
option:
sudo nmap -6 fd12:3456:789a:1::1
指定目标主机#
Nmap 将所有不是选项的参数视为目标主机。
最简单的选择是传递一个或多个目标地址或域名:
nmap 192.168.10.121 host.to.scan
您可以使用 CIDR 表示法来指定网络范围:
nmap 192.168.10.0/24
要指定八位位组范围,请使用破折号字符。例如,扫描192.168.10.1
, 192.168.11.1
, and 192.168.12.1
:
nmap 192.168.10-12.1
另一个可用于指定目标的字符是逗号。以下命令针对与上述相同的主机:
nmap 192.168.10,11,12.1
您可以组合所有形式:
nmap 10.8-10.10,11,12.0/28 192.168.1-2.100,101
要确保在扫描之前指定了正确的主机,请使用列表扫描选项(-sL
),它仅列出目标而不运行扫描:
nmap -sL 10.8-10.10,11,12.0/28 192.168.1-2.100,101
如果要排除指定范围内的目标,请使用--exclude
option:
nmap 10.8-10.10,11,12.0/28 --exclude 10.10.12.12
指定和扫描端口#
默认情况下,Nmap 对 1000 个最常用端口执行快速扫描。这些端口不是前 1000 个连续端口,而是从 1 到 65389 的 1000 个最常用端口。
要扫描从 1 到 65535 的所有端口,请使用-p-
option:
nmap -p- 192.168.10.121
每个端口可以处于以下状态之一:
- open - 端口上运行的程序响应请求。
- 关闭 - 端口上没有程序运行,主机回复请求。
- 已过滤 - 主机不回复请求。
-
端口和端口范围由-p
option.
例如,要仅扫描端口 443,您可以使用以下命令:
nmap -p 443 192.168.10.121
要指定多个端口,请用逗号分隔目标端口:
nmap -p 80,443 192.168.10.121
可以使用破折号指定端口范围。例如,要扫描从 1 到 1024 的所有 UDP 端口,您可以运行:
sudo nmap -sU -p 1-1024 192.168.10.121
全部合并:
nmap -p 1-1024,8080,9000 192.168.10.121
也可以使用端口名称来指定端口。例如,要扫描端口22、ssh,可以使用:
nmap -p ssh 192.168.10.121
Ping 扫描#
要执行 ping 扫描或主机发现,请调用nmap
命令与-sn
option:
sudo nmap -sn 192.168.10.0/24
The -sn
选项告诉 Nmap 仅发现在线主机而不进行端口扫描。当您想要快速确定哪些指定主机已启动并正在运行时,这非常有用。
禁用 DNS 名称解析#
Nmap 的默认行为是对每个发现的主机执行反向 DNS 解析,这会增加扫描时间。
扫描大型网络时,最好禁用反向 DNS 解析并加快扫描速度。为此,请使用以下命令调用该命令-n
option:
sudo nmap -n 192.168.10.0/16
操作系统、服务和版本检测#
Nmap 可以使用 TCP/IP 堆栈指纹来检测远程主机操作系统。要运行操作系统检测,请使用以下命令调用命令-O
option:
sudo nmap -O scanme.nmap.org
如果 Nmap 可以检测到主机操作系统,它将打印如下内容:
...
Device type: general purpose
Running: Linux 5.X
OS CPE: cpe:/o:linux:linux_kernel:5
OS details: Linux 5.0 - 5.4
Network Distance: 18 hops
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 26.47 seconds
通常,系统服务侦听众所周知并为其保留的标准端口。例如,如果与 SSH 服务对应的端口 22 打开,您将假设主机上运行着 SSH 服务器。但是,您不能绝对确定,因为人们可以在他们想要的任何端口上运行服务。
通过服务和版本检测,Nmap 将显示哪些程序在端口上侦听以及程序版本。
要扫描服务和版本,请使用-sV
option:
sudo nmap -sV scanme.nmap.org
...
PORT STATE SERVICE VERSION
19/tcp filtered chargen
22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
445/tcp filtered microsoft-ds
9929/tcp open nping-echo Nping echo
31337/tcp open tcpwrapped
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
...
您还可以使用以下命令在一个命令中扫描操作系统、版本并运行 Traceroute-A
option:
sudo nmap -A 192.168.10.121
Nmap 输出#
默认情况下,Nmap 将信息打印到标准输出(stdout)。
如果您扫描大型网络或需要信息供以后使用,您可以将输出保存到文件中。
Nmap 提供了多种输出类型。要以正常格式保存输出,请使用-oN
选项后跟文件名:
sudo nmap -sU -p 1-1024 192.168.10.121 -oN output.txt
最流行的选项是将输出保存为 XML 格式。为此,请使用-oX
option:
sudo nmap -sU -p 1-1024 192.168.10.121 -oX output.xml
另一种有用的格式是 grepable 输出,它可以使用标准 Unix 工具进行解析,例如grep
, awk
and cut。 grepable 输出指定为-oG
option:
sudo nmap -sU -p 1-1024 192.168.10.121 -oG output
Nmap 脚本引擎#
Nmap 最强大的功能之一是它的脚本引擎。 Nmap 附带数百个脚本,你也可以用Lua语言编写自己的脚本。
您可以使用脚本来检测恶意软件和后门、执行暴力攻击等。
例如,要检查给定主机是否受到威胁,您可以使用:
nmap -sV --script http-malware-host scanme.nmap.org
结论#
Nmap 是一个开源工具,主要由网络管理员用来发现主机和扫描端口。
请注意,在某些国家/地区,未经授权扫描网络是不合法的。
如果您有任何疑问或意见,请在下面留言。