一种基于Web服务的非阻塞端信息跳变方法与流程

文档序号:11215945阅读:327来源:国知局
一种基于Web服务的非阻塞端信息跳变方法与流程

本发明涉及一种基于web服务的非阻塞端信息跳变方法,尤其涉及在服务器运行过程中,通过server.request()函数来为客户端提供服务,并通过调用select()函数确定在一定的服务响应时间timeout内是否有服务请求到来,之后把服务器收集到的退出的子进程状态作为判断标准来执行端信息跳变代码,实现服务器的非阻塞端信息跳变。



背景技术:

近年来,安全防范和网络对抗技术日益引起重视,确定性、相似性、静态性是现有web服务器设计的致命安全隐患,越来越多的web攻击令设计者防不胜防。动态目标防御作为一种新的主动网络防御技术备受关注,其核心思想是通过构建动态、异构、不确定的信息系统,增强其多样性、伪随机和不可预测性,增加攻击者的攻击难度。

端信息跳变技术作为动态目标防御在网络层实施的关键技术之一,指通信双方或多方按照一定的协议,伪随机的改变地址、端口、算法、服务等端信息,在保证正常通信的条件下,提升自身防御能力的一种主动网络防护技术。将端信息跳变技术应用于web服务开发,不仅增加了web服务开发的多样性、灵活性与便捷性,而且通过构建动态、异构、不确定的web服务端信息,可以有效破坏敌方攻击干扰,实现主动网络防护。

另一方面,在传统的网络编程中我们依赖于serversocket,socket进行通信,大致的框架就是serversocket调用accept方法,等待客户端的连接,如果连接进来的时候则创建一个服务器端socket,客户端和服务器端socket建立好inputstream和outputstream通道进行通信,在这个网络io的过程中inputstream的read和outputstream的write方法都可能发送阻塞。为了减少这种阻塞对其他连接的影响,一般都会在服务器端为每个连接开辟一个新的线程,或者使用线程池技术来避免线程的创建销毁同时又一定程度支持并发量。然而这种情况下,如果发生大量的read或者write阻塞线程池的效率会大大降低,而且操作系统也额外需要频繁的处理cpu的切换。

非阻塞式通信实际是对上述模式的扩展,它的核心思想是为传统的socket加入事件监听的功能,操作系统可以在socket和serversocket上进行事件监听,一旦监听的对象发生了连接和可读可写的事件,监听器就会对注册了事件的对象返回相应的通知。



技术实现要素:

本发明为实现web服务的非阻塞端信息跳变,以serversocket为原型,将服务器的非阻塞技术应用于端信息跳变,实现服务器地址、端口、算法等端信息的伪随机跳变,以此增强服务器编写的多样性,提高服务器的自身防御能力。

为达到上述目的,提出的一种基于web服务的非阻塞端信息跳变方法,主要包括以下步骤:

a、针对web服务器,创建一个客户端的socket请求处理类,检测客户端的连接请求;

b、实例化一个web服务器连接和请求处理类,对传入服务器的地址和请求执行监听与监测;

c、对web服务器阻塞处理函数进行重写,自定义阻塞中断处理时间timeout值;

d、调用select方法,检测web服务器在执行阻塞中断处理之前是否有服务请求,以此实现web服务器的非阻塞;

e、根据是否有服务请求选择不同的服务器操作,伪随机的改变web服务的地址、端口、算法、服务等端信息,实现web服务器的端信息跳变。

2.根据权利要求1所述的一种基于web服务的非阻塞端信息跳变方法其特征在于:所述步骤c中,在此我们将serversocket库函数中timeout自定义为阻塞中断处理时间,为了实现服务器的非阻塞端信息跳变,我们需要修改该数值,数值大小按程序需求定义。

3.根据权利要求1和权利要求2所述的一种基于web服务的非阻塞端信息跳变方法其特征在于:所述步骤d中,我们根据在设定的阻塞中断处理时间内是否有服务请求进行的到来判断服务器的是否跳变,编写的函数要求实现循环检测对服务器子进程状态的功能,根据子进程的状态来测定是否有服务进程到来,这样实时的检测就避免了web服务的阻塞。

4.根据权利要求1所述的一种基于web服务的非阻塞端信息跳变方法其特征在于:所述步骤e中,如果在上述步骤d中未检测到服务请求进程,原函数库默认服务器什么都不做,而我们在此添加我们的服务器跳变代码,让服务器运行我们的跳变代码,伪随机的改变web服务的地址、端口、算法、服务等端信息,实现服务器的端信息跳变,增强web服务的健壮性;如果在上述步骤d中检测到服务请求进程,程序可以调用封装好的request函数将步骤b中实例化过的服务器内容返回给客户端。这样,我们就实现了服务器编程的非阻塞端信息跳变。

以上技术方案可以看出,在本发明中,较之现有的非阻塞web服务而言,将端信息跳变与非阻塞算法相结合,通过监测web服务请求信息实现web服务器的可调控性,改变原有web服务器端信息的不可跳变性,从而为我们的服务器设计提供了新的方法,提高了我们服务器设计的便捷性。

此外,经过端信息跳变之后的web服务由于信息的不确定性,无法定位到确定的web服务信息,这样保证了web服务的可防御性,用于抵御web攻击有很好的效果,在一定程度上提高了web服务的安全性。

附图说明

为了更清楚的说明本发明实施例中的技术方案,下面结合附图与具体实施方案对本发明做进一步说明:

图1为发明公开的常用的socket套接字连接过程;

图2为发明公开的基于web服务的非阻塞端信息跳变方法流程图。

具体实施方式

请参阅图2,其为本发明基于web服务的非阻塞端信息跳变方法。

步骤a:针对web服务器,创建一个客户端的socket请求处理类,检测客户端的连接请求。

所述步骤a的请求处理类即为socket套接字连接过程。如图1,即为一个完整的socket套接字编程过程,它主要包括服务器监听,客户端请求,连接确认,数据传输,关闭连接等步骤,套接字之间的连接过程即为该过程的前三个步骤。

服务器监听:服务端首先创建一个socket套接字,利用listen()函数来监听是否有socket请求到来。此时服务器处于等待连接的状态,实时监控网络状态。

客户端请求:客户端创建一个socket套接字请求,并利用connect()函数与服务器进行连接。此过程中,客户端的socket套接字必须首先描述它要连接的服务器的socket套接字,确定服务器端套接字的ip地址和端口号,然后就向服务器端套接字提出连接请求。

连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

步骤b:实例化一个web服务器连接和请求处理类,对传入服务器的地址和请求执行监听与监测。

所述步骤b中,在实例化一个服务器类的过程中,利用socketserver函数库函数,将本机ip地址作为服务器的地址,绑定相关服务到本机。其中,socketserver有4个类:tcpserver,udpserver,unixstreamserver,unixdatagramserver。这4个类是同步进行处理的,另外通过forkingmixin和threadingmixin类来支持异步。集成threadingmixin类时需要处理异常关闭。daemon_threads指示服务器是否要等待线程终止,要是线程互相独立,必须要设置为true,默认是false。

步骤c:对web服务器阻塞处理函数进行重写,自定义阻塞中断处理时间timeout值。

所述步骤c中,在此我们将serversocket库函数中timeout自定义为阻塞中断处理时间,为了实现服务器的非阻塞端信息跳变,我们需要修改该数值,数值大小按程序需求定义。

步骤d:调用select方法,检测web服务器在执行阻塞中断处理之前是否有服务请求,以此实现web服务器的非阻塞。

所述步骤d中,我们根据在设定的阻塞中断处理时间内是否有服务请求进行的到来判断服务器的是否跳变,编写的函数要求实现循环检测对服务器子进程状态的功能,根据子进程的状态来测定是否有服务进程到来,这样实时的检测就避免了web服务的阻塞。

下面以unix下的python为例,假定我们设定的timeout值为0.5,即服务器运行0.5s后检测该0.5s内是否有客户端的服务请求。select方法是进程指定内核监听哪些文件描述符的哪些事件,当没有文件描述符事件发生时,进程被阻塞;当一个或者多个文件描述符事件发生时,进程被唤醒。它的文件描述符为:

fd_r_list,fd_w_list,fd_e_list=select.select(rlist,wlist,xlist,[timeout])

参数:可接受四个参数(前三个必须)

rlist:waituntilreadyforreading;wlist:waituntilreadyforwriting;xlist:waitforan“exceptionalcondition”;timeout:超时时间。

返回值:三个列表

select方法用来监视文件描述符(当文件描述符条件不满足时,select会阻塞),当某个文件描述符状态改变后,会返回三个列表。

当参数1序列中的fd满足“可读”条件时,则获取发生变化的fd并添加到fd_r_list中;当参数2序列中含有fd时,则将该序列中所有的fd添加到fd_w_list中;当参数3序列中的fd发生错误时,则将该发生错误的fd添加到fd_e_list中;当超时时间为空,则select会一直阻塞,直到监听的句柄发生变化;当超时时间=n(正整数)时,那么如果监听的句柄均无任何变化,则select会阻塞n秒,之后返回三个空列表,如果监听的句柄有变化,则直接执行。

调用select方法,根据返回的三个列表的状态来检测是否有客户端的请求,这样就可以实现服务器的非阻塞。

步骤e:根据是否有服务请求选择不同的服务器操作,伪随机的改变web服务的地址、端口、算法、服务等端信息,实现web服务器的端信息跳变。

所述步骤e中,如果在上述步骤d中未检测到服务请求进程,原函数库默认服务器什么都不做,而我们在此添加我们的服务器跳变代码,让服务器运行我们的跳变代码,伪随机的改变web服务的地址、端口、算法、服务等端信息,实现服务器的端信息跳变,增强web服务的健壮性;如果在上述步骤d中检测到服务请求进程,程序可以调用封装好的request函数将步骤b中实例化过的服务器内容返回给客户端。这样,我们就实现了服务器编程的非阻塞端信息跳变。

如图2所示为完整的基于web服务的非阻塞端信息跳变方法流程图。它很好的阐述了该方法的设计过程,它将非阻塞的方法跟端信息跳变相结合,可以有效的预防外部网络的攻击,为我们的网络服务提供更高的安全性。其中端信息跳变包括ip地址跳变,端口跳变,加密算法的跳变等,是一种很好的防御方法,既有良好的服务性,又有较高的安全性。

以上将基于web服务的非阻塞端信息跳变方法基本步骤进行了详细描述。在此方案下的非阻塞跳变服务器设计方法,通过将非阻塞socketserver与端信息跳变相结合,旨在实现web服务的非阻塞端信息跳变,从而实现web服务设计的多样性。经过端信息跳变之后的web服务由于信息的不确定性,无法定位到确定的web服务信息,这样保证了web服务的可防御性,用于抵御web攻击有很好的效果,在一定程度上提高了web服务的安全性。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1