Linux下网络探测工具nmap的使用

介绍

Nmap(Network Mapper)是一款开放源代码的网络探测和安全审核工具。它用于快速扫描一个网络和一台主机开放的端口,还能使用TCP/IP协议栈特征探测远程主机的操作系统类型。nmap支持很多扫描技术,例如:UDP、TCP connect()、TCP SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。

命令

1
nmap [扫描类型...] [选项] {扫描目标说明}

Nmap输出的是扫描目标的列表,以及每个目标的补充信息,至于是哪些信息则依赖于所使用的选项。 “所感兴趣的端口表格”是其中的关键。那张表列出端口号,协议,服务名称和状态。状态可能是open(开放的),filtered(被过滤的), closed(关闭的),或者unfiltered(未被过滤的)。 Open(开放的)意味着目标机器上的应用程序正在该端口监听连接/报文。 filtered(被过滤的) 意味着防火墙,过滤器或者其它网络障碍阻止了该端口被访问,Nmap无法得知 它是 open(开放的) 还是 closed(关闭的)。 closed(关闭的) 端口没有应用程序在它上面监听,但是他们随时可能开放。 当端口对Nmap的探测做出响应,但是Nmap无法确定它们是关闭还是开放时,这些端口就被认为是 unfiltered(未被过滤的) 如果Nmap报告状态组合 open|filtered 和 closed|filtered时,那说明Nmap无法确定该端口处于两个状态中的哪一个状态。 当要求进行版本探测时,端口表也可以包含软件的版本信息。当要求进行IP协议扫描时 (-sO),Nmap提供关于所支持的IP协议而不是正在监听的端口的信息。

除了所感兴趣的端口表,Nmap还能提供关于目标机的进一步信息,包括反向域名,操作系统猜测,设备类型,和MAC地址。

一些常用的参数有:

-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。        
-sn: Ping Scan 只进行主机发现,不进行端口扫描。        
-Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。        
-PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。        
-PE/PP/PM: 使用ICMP echo, timestamp, and netmask 请求包发现主机。-PO[protocollist]: 使用IP协议包探测对方主机是否开启。        
-n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。        
--dns-servers <serv1[,serv2],...>: 指定DNS服务器。        
--system-dns: 指定使用系统的DNS服务器        
--traceroute: 追踪每个路由节点  
-O:    激活对TCP/IP指纹特征(fingerprinting)的扫描,获得远程主机的标志,也就是操作系统类型
-v: 可以输出更详细的信息

实例

  1. 直接扫描主机
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
nmap www.sina.com.cn
Starting Nmap 5.51 ( http://nmap.org ) at 2016-11-17 13:58 CST
Nmap scan report for www.sina.com.cn (218.30.108.232)
Host is up (0.015s latency).
Not shown: 980 closed ports
PORT STATE SERVICE
21/tcp filtered ftp
22/tcp filtered ssh
23/tcp filtered telnet
80/tcp open http
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
161/tcp filtered snmp
389/tcp filtered ldap
445/tcp filtered microsoft-ds
593/tcp filtered http-rpc-epmap
873/tcp filtered rsync
901/tcp filtered samba-swat
1025/tcp filtered NFS-or-IIS
3128/tcp filtered squid-http
3389/tcp filtered ms-term-serv
4444/tcp filtered krb524
5631/tcp filtered pcanywheredata
5900/tcp filtered vnc
6129/tcp filtered unknown
6667/tcp filtered irc
Nmap done: 1 IP address (1 host up) scanned in 16.15 seconds
  1. 探测局域网内活动主机
    扫描局域网192.168.14.1-192.168.14.20之间都有哪些活动主机。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# nmap -sn 192.168.14.1-20
Starting Nmap 5.51 ( http://nmap.org ) at 2016-11-17 14:02 CST
Nmap scan report for lzv8 (192.168.14.8)
Host is up.
Nmap scan report for 192.168.14.10
Host is up (0.00068s latency).
MAC Address: 08:00:27:06:94:51 (Cadmus Computer Systems)
Nmap scan report for 192.168.14.13
Host is up (0.00062s latency).
MAC Address: 08:00:27:6E:41:07 (Cadmus Computer Systems)
Nmap scan report for 192.168.14.14
Host is up (0.00061s latency).
MAC Address: 08:00:27:76:6C:46 (Cadmus Computer Systems)
Nmap scan report for 192.168.14.17
Host is up (0.00060s latency).
MAC Address: 08:00:27:FD:8A:43 (Cadmus Computer Systems)
Nmap scan report for 192.168.14.18
Host is up (0.00052s latency).
MAC Address: 08:00:27:4F:F8:7D (Cadmus Computer Systems)
Nmap scan report for 192.168.14.20
Host is up (0.0015s latency).
MAC Address: 08:00:27:19:B8:3F (Cadmus Computer Systems)
Nmap done: 20 IP addresses (7 hosts up) scanned in 0.68 seconds
  1. 端口扫描

一些常用选项:

-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描。    
-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况。  
-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态。  
--scanflags <flags>: 定制TCP包的flags。  
-sI <zombiehost[:probeport]>: 指定使用idle scan方式来扫描目标主机(前提需要找到合适的zombie host)  
-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。  
-sO: 使用IP protocol 扫描确定目标机支持的协议类型。  
-b <FTP relay host>: 使用FTP bounce scan扫描方式  

检测出来的端口状态一共有6种:

  • open:端口是开放的。
  • closed:端口是关闭的。
  • filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
  • unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
  • open|filtered:端口是开放的或被屏蔽。
  • closed|filtered :端口是关闭的或被屏蔽。

一个简单示例如下:

1
nmap –sS –sU –T4 –top-ports 300 192.168.1.100

参数-sS表示使用TCP SYN方式扫描TCP端口;-sU表示扫描UDP端口;-T4表示时间级别配置4级;–top-ports 300表示扫描最有可能开放的300个端口(TCP和UDP分别有300个端口)。

念念不忘,必有回响