端口扫描基本原理 端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关)
端口扫描是计算机解密高手喜欢的一种方式
攻击者可以通过它了解到从哪里可探寻到攻击弱点
实质上,端口扫描包括向每个端口发送消息,一次只发送一个消息
接收到的回应类型表示是否在使用该端口并且可由此探寻弱点
扫描器应该有三项功能:发现一个主机或网络的能力;一旦发现一台主机,有发现什么服务正运行在这台主机上的能力;通过测试这些服务,发现漏洞的能力
TCP connect() 扫描 这是最基本的 TCP 扫描
操作系统提供的 connect()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接
如果端口处于侦听状态,那么 connect()就能成功
否则,这个端口是不能用的,即没有提供服务
这个技术的一个最大的优点是,你不需要任何权限
系统中的任何用户都有权利使用这个调用
另一个好处就是速度
如果对每个目标端口以线性的方式,使用单独的 connect()调用,那么将会花费相当长的时间,你可以通过同时打开多个套接字,从而加速扫描
使用非阻塞I/O 允许你设置一个低的时间用尽周期,同时观察多个套接字
但这种方法的缺点是很容易被发觉,并且被过滤掉
目标计算机的 logs 文件会显示一连串的连接和连接是出错的服务消息,并且能很快的使它关闭
TCP SYN 扫描 这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的 TCP 连接
扫描程序发送的是一个 SYN 数据包,好象准备打开一个实际的连接并等待反应一样(参考TCP 的三次握手建立一个 TCP 连接的过程)
一个 SYN|ACK 的返回信息表示端口处于侦听状态
一个 RST 返回,表示端口没有处于侦听态
如果收到一个 SYN|ACK,则扫描程序必须再发送一个