本文介绍在Linux系统下使用nmap命令执行各种网络任务的基础知识。Nmap是用于安全审核和渗透测试的强大网络扫描工具,它是网络管理员用来解决网络连接问题和端口扫描的基本工具之一,同时Nmap还可以检测Mac地址、操作系统类型、服务版本等。当前Nmap是可以在所有主要操作系统上安装的多平台程序,它最初以仅Linux工具的形式发布,后来被移植到其他系统,例如BSD、macOS和Windows(Windows版本的Nmap有一些限制,并且通常比UNIX版本慢一些)。另外,如果您更喜欢GUI而不是命令行,则Nmap还具有一个称为Zenmap的图形用户界面,安装请参考在Ubuntu/Debian/Arch Linux/Fedora/OpenSUSE上安装Nmap的方法。
使用Nmap命令的语法 Nmap通常用于审核网络安全性、网络映射、识别开放端口以及搜索在线设备。 nmap命令的简化语法如下: nmap [Options] [Target...] 即:nmap [选项] [目标...] 使用Nmap的最基本示例是以标准用户身份扫描单个目标,而无需指定任何选项: nmap scanme.nmap.org 当以不具有原始数据包特权的非root用户身份被调用时,nmap将运行TCP连接扫描,默认情况下(-sT)在非特权模式下打开。 输出将类似于以下内容,包括有关扫描的基本信息以及已打开和已过滤的TCP端口的列表:
最受欢迎的扫描选项是TCP SYN扫描(-sS),它比connect选项要快,并且可用于所有兼容的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个连续的端口,而是1000个最常用的端口,范围从1到65389。 要扫描从1到65535的所有端口,请使用-p-选项: nmap -p- 192.168.10.121 每个端口可以处于以下状态之一: open-在端口上运行的程序响应请求。 closed-端口上没有任何程序运行,主机会回复请求。 filtered-不回复请求。 端口和端口范围是通过-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 参考:检查Linux中的开放端口列表:使用netstat、nmap、ss、lsof命令。
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可以检测到主机操作系统,它将打印如下内容:
通常,系统服务监听众所周知的标准端口并为其保留,例如,如果对应于SSH服务的22端口已打开,则您将假定SSH服务器在主机上运行,但是,您不能绝对确定,因为人们可以在所需的任何端口上运行服务。 通过服务和版本检测,Nmap将显示端口上侦听的程序和程序版本。 要扫描服务和版本,请使用-sV选项: sudo nmap -sV scanme.nmap.org
您还可以使用-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语言编写自己的脚本。 您可以使用脚本来检测恶意软件和不正常的程序等。 例如,要检查给定主机是否受有安全问题,可以使用: nmap -sV --script http-malware-host scanme.nmap.org
结论 Nmap是一个开放源代码工具,网络管理员主要使用它来发现主机和扫描端口,同时掌握了以上技术,等于是玩转了Linux系统下的Nmap命令。这里另外提醒的是:在某些国家或者地区,未经授权扫描网络是非法的,这点必需引起重视,只能用它来做正面的事情。
相关主题 |