如何使用nmap命令?
Nmap是一个强大的网络扫描工具,用于安全审计和渗透测试。它是网络管理员用来排除网络连接问题和端口扫描的基本工具之一。
Nmap还可以检测Mac地址、操作系统类型、服务版本,以及更多信息。
本文解释了如何使用nmap
命令来执行各种网络任务的基本知识。
装上Nmap
Nmap是一个多平台程序,可以安装在所有主要操作系统上。它最初只作为一个Linux工具发布,后来被移植到其他系统,如BSD、Windows和macOS。
如果您喜欢图形用户界面而不是命令行,Nmap也有一个图形用户界面,叫做Zenmap 。
官方二进制包可以从Nmap 下载页面下载。
安装程序很简单,根据你的操作系统不同而不同。
在Ubuntu和Debian上的Nmap安装
Nmap可以从默认的Ubuntu和Debian软件仓库获得。要安装它,请运行。
sudo apt update
sudo apt install nmap
在CentOS和Fedora上的Nmap安装
在CentOS和其他红帽的衍生产品上运行。
sudo dnf install nmap
在macOS系统上安装Nmap
macOS用户可以通过从Nmap网站下载".dmg "安装包或通过Homebrew来安装Nmap。
brew install nmap
在Windows系统上安装Nmap
Nmap的Windows版本有一些限制,而且它一般比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栈起作用。
当nmap
以具有管理权限的用户身份被调用时,-sS
被默认为打开。
sudo nmap 192.168.10.121
对于更详细的输出,可以用-v
或-vv
来增加粗体字的输出。
sudo nmap -vv 192.168.10.121
要执行UDP扫描,请以root用户身份调用带有(-sU
)选项的命令。
sudo nmap -sU 192.168.10.121
关于端口扫描方法的完整列表,请访问Nmap文档页面 。
Nmap也支持IPv6地址。要指定一个IPv6主机,使用-6
选项。
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
和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
选项。
nmap 10.8-10.10,11,12.0/28 --exclude 10.10.12.12
指明和扫描端口
默认情况下,Nmap对1000个最常用的端口进行快速扫描。这些端口不是前1000个连续端口,而是从1到65389的1000个最常用的端口。
要扫描从1到65535的所有端口,请使用-p-
选项。
nmap -p- 192.168.10.121
每个端口都可以处于以下状态之一。
- 打开 - 在该端口上运行的程序,并且对请求作出回应。
- 关闭 - 没有程序在该端口上运行,并且主机对请求作出回应。
- 被过滤 - 主机没有回复请求。
端口和端口范围是用-p
选项来指定的。
例如,如果只扫描443端口,你可以使用下面的命令。
nmap -p 443 192.168.10.121
要指定一个以上的端口,请用逗号将目标端口分开。
nmap -p 80,443 192.168.10.121
端口范围可以用破折号来指定。例如,要扫描所有UDP端口,范围从1到1024,你可以运行。
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扫描或主机发现,请调用带有-sn
选项的nmap
命令。
sudo nmap -sn 192.168.10.0/24
-sn
选项告诉Nmap只发现在线主机而不做端口扫描。当您想快速确定哪些指定的主机在运行时,这很有用。
禁用DNS名称解析
Nmap的默认行为是为每个被发现的主机进行反向DNS解析,这增加了扫描时间。
当扫描大型网络时,禁用反向DNS解析并加快扫描速度是个好主意。要做到这一点,请用-n
选项来调用该命令。
sudo nmap -n 192.168.10.0/16
操作系统、服务和版本的检测
Nmap可以用TCP/IP堆栈指纹检测远程主机的操作系统。要运行操作系统检测,用-O
选项调用该命令。
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
选项。
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
...
你也可以使用-A
选项在一个命令中扫描操作系统、版本和运行traceroute。
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
选项。
sudo nmap -sU -p 1-1024 192.168.10.121 -oX output.xml
另一种有用的格式是grepable输出,它可以用标准的Unix工具来解析,如grep
,awk
和cut
。grepable输出是用-oG
选项指定的。
sudo nmap -sU -p 1-1024 192.168.10.121 -oG output
Nmap 脚本引擎
Nmap最强大的功能之一是它的脚本引擎。Nmap带有数百个脚本,而且您也可以用Lua语言写您自己的脚本。
你可以使用crips来检测恶意软件和后门,进行暴力攻击,以及更多。
例如,要检查一个给定的主机是否被破坏,你可以使用。
nmap -sV --script http-malware-host scanme.nmap.org
总结
Nmap是一个开源的工具,主要被网络管理员用来发现主机和扫描端口。
请注意,在一些国家,未经授权而扫描网络是不合法的。
如果你有任何问题或意见,请在下面留言。