如何使用nmap命令

Nmap是用于安全审核和渗透测试的强大网络扫描工具。 它是网络管理员用来解决网络连接问题和端口扫描的基本工具之一。

Nmap还可以检测Mac地址,操作系统类型,服务版本等。

本文介绍了如何使用 nmap 命令来执行各种网络任务。

安装Nmap#

Nmap是可以在所有主要操作系统上安装的多平台程序。 它最初以仅Linux工具的形式发布,后来被移植到其他系统,例如BSD,Windows和macOS。

如果您更喜欢GUI而不是命令行,则Nmap还具有一个称为Zenmap的图形用户界面。

官方二进制包可从Nmap下载页面下载。

安装过程很简单,并且会根据您的操作系统而有所不同。

在Ubuntu和Debian上安装Nmap#

Nmap可从默认的Ubuntu和Debian存储库中获得。 要安装它,请运行:

sudo apt updatesudo 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),它比connect选项要快,并且可用于所有兼容的TCP堆栈。

-sS 默认情况下处于打开状态 nmap 以具有管理特权的用户身份被调用:

sudo nmap 192.168.10.121

要获得更详细的输出,请使用增加详细程度 -v 要么 -vv

sudo nmap -vv 192.168.10.121

要执行UDP扫描,请使用(-sU)选项作为root用户:

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.1192.168.11.1192.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个连续的端口,而是1000个最常用的端口,范围从1到65389。

要扫描从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

端口范围可以用破折号指定。 例如,要扫描范围从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 选项:

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
...

您还可以使用以下命令在一个命令中扫描操作系统,版本并运行traceroute。 -A 选项:

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工具(例如: grepawkcut 。 grepable输出是使用 -oG 选项:

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是一个开放源代码工具,网络管理员主要使用它来发现主机和扫描端口。

请注意,在某些国家/地区,未经授权扫描网络是非法的。

如果您有任何疑问或意见,请在下面发表评论。

末端nmap

Sidebar