大家好,又见面了,我是你们的朋友全栈君。
Nmap
nmap是一个非常强大的网络扫描工具,学习nmap的话,我建议大家多读一读官方文档,这里我所写的也仅仅是对Nmap中文文档的一个总结,以及一些我的个人看法。 官方文档地址:http://www.nmap.com.cn/
- 主机发现
- 端口扫描
主机发现
nmap的主机发现主要是基于ICMP包的一个探测,所以用nmap的主机发现命令格式大多都是-P*;
代码语言:javascript复制 -sP : nmap 仅对主机进行ping扫描(并不进行端口探测,还有操作系统识别),这个命令仅仅是列出了这个主机是否存活,或者这一个网段内都有哪些主机是在存活状态。
代码语言:javascript复制 -P0 : nmap在默认情况下会只给存活的主机进行端口扫描,版本探测,而使用P0(注意字母P是大写,0是数字0)参数会使nmap对每一个指定的ip地址进行所要求的扫描。
代码语言:javascript复制 -PS : nmap向目标主机发送一个设置了SYN标志位的空的TCP报文,不管主机返回SYN/ACK包还是RST包,它都认为该主机存活。不过虽然官方文档上说该参数只关心主机是否存活,不过在当前最新版本的nmap来看,这个命令也对主机的各个端口进行了探测。
代码语言:javascript复制 -PA/-PU:分别向目标主机发送ACK/UDP报文进行主机探测。
代码语言:javascript复制 -n(不用域名解析):告诉nmap不对存活主机的IP进行域名解析 -R(为所有目标解析域名)
端口扫描
在学习端口扫描之前,我们需要先了解nmap对于端口的五种不同的状态。
open(开放的)、filtered(过滤的)、closed(关闭的)、open|filtered(开放或者被过滤的)、closed|filtered(关闭或者被过滤的)
代码语言:javascript复制 -sS:进行TCP SYN扫描,这个选项返回的结果与-PS返回的结果很像,它们两个参数的区别就是,-sS会发送一个ICMP包给目标主机,这个我们可以利用抓包工具来看一下。
这个截图告诉我们-sS参数会发送ICMP包给目标主机。
为了和下面的-sT参数区分开,我们看一下,用-sS参数的连接图。
代码语言:javascript复制 -sT:会完整的执行完TCP的三次握手,隐蔽性不强。
由此我们可以看出-sT参数隐蔽性并不强,一般用于-sS参数无法探测时。
代码语言:javascript复制 -sU:使用UDP协议对端口进行扫描(通常,这个端口很容易被管理员忽视)
代码语言:javascript复制 -sN; -sF; -sX (TCP Null,FIN,and Xmas扫描):这个扫描的好处就是,它可以在端口关闭时,任何一个不包含ACK,SYN或者RST的数据包,都会返回一个RST,而在端口开放时,则不作响应。但是这个是要满足一个前提的,就是要严格遵循RFC 793,但是事实上,并非所有系统都严格遵循RFC 793, 许多系统不管端口开放还是关闭,都响应RST。 这导致所有端口都标记为closed(关闭的)。
代码语言:javascript复制 -sA:发送ACK数据包进行探测,主要用来识别这个端口是否处于过滤状态,如果这个端口是开放的或者这个端口是关闭的都会返回一个RST包,这个被标记为未过滤的;如果不响应或者发送特定的ICMP错误消息(类型3,代号1,2,3,9,10, 或者13)的端口,标记为 filtered(被过滤的)。
代码语言:javascript复制 --scanflags:定制nmap扫描。 如:--scanflags URGACKPSHRSTSYNFIN设置了所有标志位,但是这对扫描没有太大用处。 标志位的顺序不重要。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140450.html原文链接:https://javaforall.cn