端口扫描原理和种类

原创 2011年01月21日 09:28:00
一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口
扫描,能得到许多有用的信息。进行扫描的方法很多,可以是手工进行扫描,也可
以用端口扫描软件进行。
在手工进行扫描时,需要熟悉各种命令。对命令执行后的输出进行分析。用扫描软
件进行扫描时,许多扫描器软件都有分析数据的功能。
  
通过端口扫描,可以得到许多有用的信息,从而发现系统的安全漏洞。
  
什么是扫描器
  
扫描器是一种自动检测远程或本地主机安全性弱点的程序,通过使用扫描器你可一
不留痕迹的发现远程服务器的各种TCP端口的分配及提供的服务和它们的软件版本
!这就能让我们间接的或直观的了解到远程主机所存在的安全问题。
  
工作原理
  
扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种
方法,可以搜集到很多关于目标主机的各种有用的信息(比如:是否能用匿名登陆
!是否有可写的FTP目录,是否能用TELNET,HTTPD是用ROOT还是nobady在跑!)
  
  
扫描器能干什么
  
扫描器并不是一个直接的攻击网络漏洞的程序,它仅仅能帮助我们发现目标机的某
些内在的弱点。一个好的扫描器能对它得到的数据进行分析,帮助我们查找目标主
机的漏洞。但它不会提供进入一个系统的详细步骤。
  
扫描器应该有三项功能:发现一个主机或网络的能力;一旦发现一台主机,有发现
什么服务正运行在这台主机上的能力;通过测试这些服务,发现漏洞的能力。
  
编写扫描器程序必须要很多TCP/IP程序编写和C, Perl和或SHELL语言的知识。需要
一些Socket编程的背景,一种在开发客户/服务应用程序的方法。开发一个扫描器
是一个雄心勃勃的项目,通常能使程序员感到很满意。
  
常用的端口扫描技术
  
  
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时,是十分有用的。
  
IP段扫描
  
这种不能算是新方法,只是其它技术的变化。它并不是直接发送TCP探测数据包,
是将数据包分成两个较小的IP段。这样就将一个TCP头分成好几个数据包,从而过
滤器就很难探测到。但必须小心。一些程序在处理这些小数据包时会有些麻烦。
  
  
TCP 反向 ident扫描
  
ident 协议允许(rfc1413)看到通过TCP连接的任何进程的拥有者的用户名,即使这
个连接不是由这个进程开始的。因此你能,举个例子,连接到http端口,然后用
identd来发现服务器是否正在以root权限运行。这种方法只能在和目标端口建立了
一个完整的TCP连接后才能看到。
  
FTP 返回攻击
  
FTP协议的一个有趣的特点是它支持代理(proxy)FTP连接。即入侵者可以从自己
的计算机a.com和目标主机target.com的FTP server-PI(协议解释器)连接,建立一
个控制通信连接。然后,请求这个server-PI激活一个有效的server-DTP(数据传输
进程)来给Internet上任何地方发送文件。对于一个User-DTP,这是个推测,尽管
RFC明确地定义请求一个服务器发送文件到另一个服务器是可以的。但现在这个方
法好象不行了。这个协议的缺点是“能用来发送不能跟踪的邮件和新闻,给许多服
务器造成打击,用尽磁盘,企图越过防火墙”。
  
我们利用这个的目的是从一个代理的FTP服务器来扫描TCP端口。这样,你能在一个
防火墙后面连接到一个FTP服务器,然后扫描端口(这些原来有可能被阻塞)。如
果FTP服务器允许从一个目录读写数据,你就能发送任意的数据到发现的打开的端
口。
  
对于端口扫描,这个技术是使用PORT命令来表示被动的User DTP正在目标计算机上
的某个端口侦听。然后入侵者试图用LIST命令列出当前目录,结果通过
Server-DTP发送出去。如果目标主机正在某个端口侦听,传输就会成功(产生一个
150或226的回应)。否则,会出现"425 Can build data connection: Connection
refused."。然后,使用另一个PORT命令,尝试目标计算机上的下一个端口。这种
方法的优点很明显,难以跟踪,能穿过防火墙。主要缺点是速度很慢,有的FTP服
务器最终能得到一些线索,关闭代理功能。
  
这种方法能成功的情景:
220 xxxxxxx.com FTP server (Version wu-2.4(3) Wed Dec 14 ...) ready.
220 xxx.xxx.xxx.edu FTP server ready.
220 xx.Telcom.xxxx.EDU FTP server (Version wu-2.4(3) Tue Jun 11 ...)
ready.
220 lem FTP server (SunOS 4.1) ready.
220 xxx.xxx.es FTP server (Version wu-2.4(11) Sat Apr 27 ...) ready.
220 elios FTP server (SunOS 4.1) ready
  
这种方法不能成功的情景:
220 wcarchive.cdrom.com FTP server (Version DG-2.0.39 Sun May 4 ...)
ready.
220 xxx.xx.xxxxx.EDU Version wu-2.4.2-academ[BETA-12](1) Fri Feb 7
220 ftp Microsoft FTP Service (Version 3.0).
220 xxx FTP server (Version wu-2.4.2-academ[BETA-11](1) Tue Sep 3 ...)
ready.
220 xxx.unc.edu FTP server (Version wu-2.4.2-academ[BETA-13](6) ...)
ready.
  
UDP ICMP端口不能到达扫描
  
这种方法与上面几种方法的不同之处在于使用的是UDP协议。由于这个协议很简单
,所以扫描变得相对比较困难。这是由于打开的端口对扫描探测并不发送一个确认
,关闭的端口也并不需要发送一个错误数据包。幸运的是,许多主机在你向一个未
打开的UDP端口发送一个数据包时,会返回一个ICMP_PORT_UNREACH错误。这样你就
能发现哪个端口是关闭的。UDP和ICMP错误都不保证能到达,因此这种扫描器必须
还实现在一个包看上去是丢失的时候能重新传输。这种扫描方法是很慢的,因为
RFC对ICMP错误消息的产生速率做了规定。同样,这种扫描方法需要具有root权限

  
UDP recvfrom()和write() 扫描
  
当非root用户不能直接读到端口不能到达错误时,Linux能间接地在它们到达时通
知用户。比如,对一个关闭的端口的第二个write()调用将失败。在非阻塞的UDP套
接字上调用recvfrom()时,如果ICMP出错还没有到达时回返回EAGAIN-重试。如果
ICMP到达时,返回ECONNREFUSED-连接被拒绝。这就是用来查看端口是否打开的技
术。
  
ICMP echo扫描
  
这并不是真正意义上的扫描。但有时通过ping,在判断在一个网络上主机是否开机
时非常有用。
  
典型扫描工具:nmap
  
在网上可以很容易地找到nmap的源码,有兴趣的话可以自行分析。

端口详解+端口扫描原理+简单端口扫描实现

一 摘要   端口是个网络应用中很重要的东西,相当于“门”了。 二 什么是端口   在 Internet上,各主机间通过TCP/TP协议发送和接收数据报,各个数据报根据其目的主机的ip地址来进...
  • pmt123456
  • pmt123456
  • 2017年02月15日 21:05
  • 2462

常见的端口扫描类型及原理

常见的扫描类型有以下几种:       秘密扫描 秘密扫描是一种不被审计工具所检测的扫描技术。 它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己。 秘密...
  • whatday
  • whatday
  • 2015年05月05日 17:10
  • 1997

端口扫描原理(转)

来源:http://wmjie.51.net/swords/ 关键字:    TCP/IP,UDP,三阶段握手,SYN扫描,FIN扫描,秘密扫描,间接扫描,诱骗扫描,指纹,协作扫描。    ...
  • suibianyongde2
  • suibianyongde2
  • 2014年09月26日 15:24
  • 666

php 端口扫描

$ip = '192.168.97.'; for($i=1;$i       system("nc -v -z {$ip}.{$i} 80");       system("nc -v -z {$ip...
  • Ambulong
  • Ambulong
  • 2016年08月09日 14:15
  • 491

如何对udp端口进行扫描

 由于UDP协议是非面向连接的,对UDP端口的探测也就不可能像TCP端口的探测那样依赖于连接建立过程(不能使用telnet这种tcp协议类型命令),这也使得UDP端口扫描的可靠性不高。所以虽然UDP协...
  • macky0668
  • macky0668
  • 2008年11月26日 08:56
  • 15645

关于端口扫描的总结

这帖子写的不赖。 他总结了常见的几种扫描方式的区别: 一:TCP扫描相对来说是速度比较慢的一种,为什么会慢呢?因为这种方法在扫描的时候会从本地主机的一个端口向目标主机的一个端口发出一个连接请求报文段,...
  • HK_5788
  • HK_5788
  • 2015年09月24日 22:23
  • 916

飘逸的python - 写个端口扫描器及各种并发尝试(多线程/多进程/gevent/futures)

端口扫描器原理很简单,无非就是操作socket,能connect就认定这个端口开放着。 import socket def scan(port): s = socket.socket() ...
  • u010180339
  • u010180339
  • 2014年10月06日 15:04
  • 6534

端口扫描原理与代码

1)原理摘自 百度  红客吧 http://tieba.baidu.com/f?kz=90077233TCP connect() 扫描是最基本的TCP扫描。操作系统提供的connect()系统调用,用...
  • sandyzhs
  • sandyzhs
  • 2009年04月17日 16:59
  • 4044

LCD类型和原理

LCD类型和原理 所谓液晶其实就是一种介乎于液体和晶体之间的物质。他的奇妙之处是可以通过电流来改变他的分子结构。正因为如此,我们可以为液 晶加上不同的工作电压,让他控制光线的通过量。从而显示变化万千的...
  • sunrock
  • sunrock
  • 2006年05月10日 09:50
  • 4245

端口扫描原理,(java)UDP端口扫描

一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行。 在手工进行扫描时,需要熟悉各种命...
  • luanxj
  • luanxj
  • 2007年10月12日 15:25
  • 7263
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:端口扫描原理和种类
举报原因:
原因补充:

(最多只允许输入30个字)