1.端口的概念是什么?
引自wikipedia上面的话.
端口应该是表示计算机网络通讯中的端点,它与IP地址一起组成了套接字,套接字标识了网络通信过程中必须的五种信息:通信协议,本机IP地址,本机端口,远程主机IP地址,远程主机端口。
2.端口扫描的概念是什么?
端口扫描是发送客户端请求到一系列的主机或者服务器端口地址上,以此探测服务器或主机端口存活情况。
3.端口扫描的分类以及原理有哪些?
一般而言分为9大类,具体的链接可参考nmap上面对扫描的描述:https://nmap.org/book/man-port-scanning-techniques.html
A:Tcp scan:主要是指主机通过与目标系统建立tcp三次握手连接,从而探测目标系统端口开放状态,在达成连接以后主机将立马关闭连接,避免造成dos攻击。一般而言在syn扫描不行的时候才考虑这选项,因为完成三次握手需要的时间更长,而且更容易被IDS发现。对应的nmap选项是-sT
B:Syn scan:相比tcp扫描而言,syn扫描并没有完成整个三次握手的过程,客户端先发送syn,服务端返回syn+ack,这时syn再发送rst包终止这次连接,因此并没有完成整个三次握手的过程。如果服务端端口关了但是没有过滤的话,服务端也会返回一个rst包。一般而言,如果服务器返回了icmp而不是syn+ack的话,那么就认为他是filter的,其对应的nmap选项是-sS。
C:Udp扫描:通过发送udp包到目标系统,如果目标端口是关闭的话,那就会返回一个icmp包,如果没有就证明这个端口是开放的,如果有防火墙过滤了该ICMP包话,那你探测到的端口就都是开放或者filter的了,因此后面的扫描器做了改变,通过发送应用层协议的udp包,期待目标系统应用层的响应包,如果有回应的话就说明该端口是开放的。udp扫描主要问题是速率,会比tcp扫描慢很多,因此我们可以在nmap里面设置--host-timeoutto skip slowhosts.其对应的选项是-sU,udp扫描可和tcp扫描结合起来一起用。
D:Ack scanning:通过向目标系统发送ack包,ack扫描并不用来扫描端口开放与否,而是往往用来判断端口是否被防火墙过滤,对应的选项是-sA
E:FIN扫描是一种隐蔽性较强的扫描,通过向目标系统发送fin包,若目标端口开放,则不会回应这个包,若目标端口关闭,则返回rst包,根据这一点来判断目标端口的情况。
F:Xmas-Tree扫描:通过同时设置
三个标志位,这种情况下若端口开放,则不会返回任何信息,若端口关闭,则有可能返回也有可能不返回。
G:SCTP INIT 扫描,SCTP是一种tcp和udp的可替代协议,这种扫描相当于syn扫描是半连接扫描,因此他的速率也比较快,能够大量扫描多个端口,对应的nmap选项是-sY
H:NULL扫描,不设置任何标志位,tcp标志头部比特为0,一般可以用来探测端口开放与否,如果开放或过滤就不回应,如果关闭就回复rst包,一般而言收到ICMP就认为是过滤。
I:window扫描
对应的选项是-sW
4.个人一点看法
现在市面上用的最多的就是nmap了,但经过这一篇博客研究以后发现就算是nmap提供的扫描方法,要么就是不能保证准确,要么就是只要防火墙过滤掉特定的包,制定针对各种扫描方式的过滤规则,基本就没有能准确判断的方法可以用了,号称扫描神器的nmap其实也有很多方法可以混淆,这一块可能还大有研究场景得去开发。