网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
搜索关键字: 所有资讯 行业动态 市场趋势 政策法规 新品发布 技术资讯 价格快报 展会资讯
  • 达普IC芯片交易网 > 新闻中心 > 技术信息 > 正文
  • RSS
  • 基于多线程TCP端口扫描的实现与应用
    http://www.ic72.com 发布时间:2007/4/29 8:51:50
    基于多线程TCP端口扫描的实现与应用
    李 岩,裴昌幸,陈南
    (西安电子科技大学 陕西西安)

    随着计算机网络的快速发展和广泛应用,网络安全问题日益引起重视。端口扫描是网络安全问题中漏洞检测的一项重要手段。对攻击者而言,端口扫描是对目标系统进行针对性探测的必经之路。通过端口扫描可以知道目标系统开放了哪些端口,运行了哪些服务。攻击者根据扫描结果确定如何对目标系统进行下一步的探测或攻击。对安全管理员而言,端口扫描是进行脆弱性评估的必要手段。管理员针对端口扫描得到的安全敏感信息采取适当的防范补救措施,可以更好地对网络进行防护。本文研究并实现了一种基于多线程技术的高效TCP端口扫描器。

    1 端口扫描原理

    常见的端口扫描技术可以分为:开放扫描,如TCPConnect()扫描、TCP反向Ident扫描;半开放扫描,如TCPSYN扫描、ID头信息扫描;隐蔽扫描,如FIN扫描,ACK扫描等;区段扫描,如TCPecho,UDPecho等;其他扫描,如FTP弹跳等。

    下面介绍TCPConnect()扫描和TCPSYN扫描。

    TCPConnect()扫描通过调用Connect()函数连接目标主机的目标端口,根据函数的返回值来进行判断。如果Connect()调用返回成功标志,说明完成了一次完整的TCP三次握手连接过程,该端口是打开的,否则该端口就是关闭的。

    TCP SYN扫描通过发送SYN数据包给目标主机的目标端口,根据回复数据包来进行判断。一个SYNIACK的回复数据包表明目标端口打开,一个ACKRST数据包表示目标端口关闭。TCPSYN扫描不完成三次握手连接,如果收到SYNACK回复数据包,扫描程序发送RST数据包关闭连接。
    程序扫描部分的实现采用TCPConnect()扫描,功能扩展--简单的SYN攻击部分的实现用到了TCP SYN扫描。

    2 程序的概要和功能特点

    该程序用VC++6.0编写,提供了TCP端口扫描方面比较全面的功能:

    (1)通过Ping来检验IP是否在线。
    (2)通过IP地址查询计算机名。
    (3)通过在开放端口接收Banner信息检验目标计算机提供的服务类别。
    (4)检验一定范围内目标计算机端口开放情况。
    (5)将端口信息存储在端口列表文件,自定义要检验的端口。

    此外,程序扩展添加了SYN攻击功能。

    应用多线程技术提高扫描速率是本程序的主要特点。在进行端口扫描时,扫描者可以根据扫描主机的配置情况和扫描的范围自定义扫描所开启的线程数,开启多个线程同时对目标主机端口进行探测;同时程序添加了可选项Ping,可以根据需要选择在扫描之前执行Ping程序来探测目标主机是否激活,只对激活目标主机的端口进行扫描,以减少不必要开销。测试发现,在单线程情况下扫描一个端口平均需要1.5s,在开启25个线程时扫描一个端口平均只需要50ms,扫描速率大约提高了30倍。

    3 关键技术和流程

    3.1 多线程技术的应用

    (1)多线程Ping

    Ping程序的目的是为了测试另一台主机是否可达,其原理是发送一份ICMP回显请求报文给主机,等待返回ICMP回显应答。
    这里Ping程序的实现采用了多线程技术,同时启动多个线程并行执行,各个线程分别Ping不同IP地址的主机。在多线程中采用了临界区同步技术用以保证各个线程Ping到选定范围的所有IP地址并且不会出现重复。其中IP地址作为一个全局变量,临界区可以防止一次有不只一个线程修改这个全局变量。多线程要解决的另外一个问题是如何判别收到的数据包是对哪个线程所发出的探测包的回复。根据ICMP的协议规范,ICMP报文中包含序号和识别号,回复报文的序号和识别号与请求报文中的相同。所以,只要将进程号和线程号分别存人请求报文的序号和识别号,收到回复包时加以检验就可以有效完成识别.

    (2)多线程TCPConnect()扫描

    每台计算机都有65 535个端口,对一个IP地址段内多台主机的大量端口进行扫描是比较耗时的。为了提高扫描速率,端口扫描程序的实现也采用了多线程技术,同时启动多个线程并行执行,各个线程分别调用Connect()函数连接同一主机的不同端口,并试图在开放端口接收相关服务信息。在多线程中采用临界区同步技术保证各个线程扫描到同一主机选定范围内所有的端口并且不重复;同时采用信号量同步技术保证对选定范围内的各个IP逐一进行扫描。

    ①创建一个类型为sock_stream的流套接字。
    ②调用Connect()进行连接,根据返回值判断端口是否开放。
    ③对于开放端口调用Select()判断套接字状态。
    ④对于来自开放端口的可读信息调用Receive()接收信息并显示结果。
    ⑤关闭套接字。

    3.2 实现流程

    图1给出了端口扫描程序的实现流程。

    4 功能扩展

    受到TCPSYN扫描的启发,在功能扩展部分实现简单的SYN攻击功能。
    通常称TCPSYN扫描时建立的连接为半连接。SYN攻击通过建立大量的半连接实现。该攻击以多个随机的源主机地址向目的主机发送SYN包,而收到目的主机的SYNACK后并不回应。这样目的主机就为这些源主机建立了大量的连接队列,而且由于没有收到ACK一直维护着这些队列,造成了系统资源的大量消耗而不能向正常请求提供服务。


    简单的SYN攻击通过发送大量有SYN标志位的TCP数据包并配合IP欺骗实现。由于伪造的IP地址不存在,目标主机不可能收到ACK回复数据包,所建立的连接全部是半连接。

    SYN攻击程序工作流程如下:

    (1)创建一个类型为sock_raw的原始套接字,协议类型为IPPROTO_RAW。
    (2)调用SetSockOpt()来设置套接字的选项,自己合成一个要发送的包。
    (3)构造IP数据包,使用欺骗IP地址。
    (4)调用Sendto()发送IP数据包,循环多次。
    (5)关闭套接字。

    5.应 用

    (1)用于检查和确认各种配置的安全性该端口扫描程序的最大用途就是提供目标主机网络服务的清单。对黑客而言,所有的端口都可能成为其攻击的目标,所以从安全的角度出发,有必要将用户需要用到的正常计算机端口外的其他端口关闭掉。

    利用该端口扫描程序很多时候不仅可以获得目标主机对外开放的TCP端口列表,而且可以得到一些开放端口的Banner信息。这些信息对于判断监听端口上开放的服务类型以及对应的软件版本甚至操作系统类型都比较重要,很容易被攻击者利用,应予以处理。

    (2)用于简单的SYN网络攻击测试

    和端口扫描一样,攻击测试也是网络测量中安全分析的一项重要手段。该程序提供了简单的可以用于珍击测试的SYN攻击功能。攻击使用的是正常网络服务不会禁止的SYN数据包。由于数据包很小,所以很容易在短时间内大量产生;另外,由于攻击不需要目标主机的返回信息,因此可以伪造数据包的源IP和源端口,使目标主机无法追踪来源,也很难根据源IP和源端口进行过滤。当然,在用于测试某一主机抵御SYN攻击的能力时还需要多方协同完成。

    6 结 语

    运行该程序扫描了校园网内的一段IP地址。扫描结果符合实际情况,能够完成上面提到的各项功能,扫描速率令人满意。程序运行结果所示。

    随着人们对端口扫描重要性认识的提高,对端口扫描的研究将得到日益重视,端口扫描必将在网络安全领域更加充分的发挥作用。




    www.ic72.com 达普IC芯片交易网
  • 行业动态
  • 市场趋势
  • 政策法规
  • 新品发布
  • Baidu

    IC快速检索:abcdefghijklmnopqrstuvwxyz0123456789
    COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
    客户服务:service@IC72.com 库存上载:IC72@IC72.com
    (北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
    京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质