位置:51电子网 » 技术资料 » 通信网络

基于多线程TCP端口扫描的实现与应用

发布时间:2008/5/29 0:00:00 访问次数:1303

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

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

相关IC型号

热门点击

 

推荐技术资料

耳机的焊接
    整机电路简单,用洞洞板搭线比较方便。EM8621实际采... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!