|
在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。二是逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65***35,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。我们这里将要介绍的就是逻辑意义上的端口。
要想知道端口扫描就得知道网络协议基础
按协议类型划分
按协议类型划分,可以分为TCP、UDP、IP和ICMP(Internet控制消息协议)等端口。下面主要介绍TCP和UDP端口:
(1)TCP端口
TCP端口,即传输控制协议端口,需要在客户端和服务器之间建立连接,这样可以提供可靠的数据传输。常见的包括FTP服务的21端口,Telnet服务的23端口,SMTP服务的25端口,以及HTTP服务的80端口等等。
(2)UDP端口
UDP端口,即用户数据包协议端口,无需在客户端和服务器之间建立连接,安全性得不到保障。常见的有DNS服务的53端口,SNMP(简单网络管理协议)服务的161端口,QQ使用的8000和4000端口等等。
TCP是一种可靠的面向连接的传送服务。它在传送数据时是分段进行的,主机交换数据必须建立一个会话。它用比特流通信,即数据被作为无结构的字节流。
通过每个TCP传输的字段指定顺序号,以获得可靠性。如果一个分段被分解成几个小段,接收主机会知道是否所有小段都已收到。通过发送应答,用以确认别的主机收到了数据。对于发送的每一个小段,接收主机必须在一个指定的时间返回一个确认。如果发送者未收到确认,数据会被重新发送;如果收到的数据包损坏,接收主机会舍弃它,因为确认未被发送,发送者会重新发送分段。
TCP是一种可靠的面向连接的传送服务。它在传送数据时是分段进行的,主机交换数据必须建立一个会话。它用比特流通信,即数据被作为无结构的字节流。
通过每个TCP传输的字段指定顺序号,以获得可靠性。如果一个分段被分解成几个小段,接收主机会知道是否所有小段都已收到。通过发送应答,用以确认别的主机收到了数据。对于发送的每一个小段,接收主机必须在一个指定的时间返回一个确认。如果发送者未收到确认,数据会被重新发送;如果收到的数据包损坏,接收主机会舍弃它,因为确认未被发送,发送者会重新发送分段。
UDP
用户数据报协议UDP提供了无连接的数据报服务。它适用于无须应答并且通常一次只传送少量数据的应用软件。
UDP端口
端口作为多路复用的消息队列使用。
15 NETSTAT 网络状态
53 DOMAIN 域名服务器
69 TFTP 平凡文件传送协议
137 NETBIOS-NS NETBIOS命令服务
138 NETBIOS-DGM NETBIOS数据报服务
161 SNMP SNMP网络监视器
扫描实现的几种原理,知道这些就知道端口扫描是怎么实现的了
TCP connect() 扫描
这是最基本的TCP扫描。操作系统提供的connect()系统调用,用来与每一个感兴趣
的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功
。否则,这个端口是不能用的,即没有提供服务。这个技术的一个最大的优点是,
你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速
度。如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花
费相当长的时间,你可以通过同时打开多个套接字,从而加速扫描。使用非阻塞
I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。但这种方法的缺点
是很容易被发觉,并且被过滤掉。目标计算机的logs文件会显示一连串的连接和连
接是出错的服务消息,并且能很快的使它关闭。
TCP SYN扫描
这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的
TCP连接。扫描程序发送的是一个SYN数据包,好象准备打开一个实际的连接并等待
反应一样(参考TCP的三次握手建立一个TCP连接的过程)。一个SYN|ACK的返回信
息表示端口处于侦听状态。一个RST返回,表示端口没有处于侦听态。如果收到一
个SYN|ACK,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。这种扫描
技术的优点在于一般不会在目标计算机上留下记录。但这种方法的一个缺点是,必
须要有root权限才能建立自己的SYN数据包。
TCP FIN 扫描
有的时候有可能SYN扫描都不够秘密。一些防火墙和包过滤器会对一些指定的端口
进行监视,有的程序能检测到这些扫描。相反,FIN数据包可能会没有任何麻烦的
通过。这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。另一方
面,打开的端口会忽略对FIN数据包的回复。这种方法和系统的实现有一定的关系 。
有的系统不管端口是否打开,都回复RST,这样,这种扫描方法就不适用了。并
且这种方法在区分Unix和NT时,是十分有用的。 |
|