著录项信息
专利名称 | 一种基于多名单的异常呼叫过滤方法 |
申请号 | CN201010272395.2 | 申请日期 | 2010-09-03 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2011-01-05 | 公开/公告号 | CN101938583A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04M7/00 | IPC分类号 | H;0;4;M;7;/;0;0;;;H;0;4;M;1;/;6;6查看分类表>
|
申请人 | 电子科技大学 | 申请人地址 | 四川省成都市高新区(西区)西源大道2006号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 电子科技大学 | 当前权利人 | 电子科技大学 |
发明人 | 许都;隆克平;孙健;王春厚;董青 |
代理机构 | 成都行之专利代理事务所(普通合伙) | 代理人 | 温利平 |
摘要
本发明公开了一种基于多名单的异常呼叫过滤方法,采用基于白名单、灰名单以及黑名单的多名单匹配过滤,能够及时中断异常呼叫,并快速为合法用户,即正常呼叫建立连接。此外,本发明还采用灰名单状态处理机制,实现灰名单内状态的自动更新。同时,基于多名单的匹配过滤与检测过程是并行执行的,能够实现异常呼叫的在线过滤,及时发现异常并终止连接,使被叫用户免遭骚扰。
1.一种基于多名单的异常呼叫过滤方法,其特征在于,包括以下步骤:
(1)、在获取信令消息中,首先捕获链路中传输的数据包,转发除信令信息以外的所有数据包,然后解析信令消息,提取呼叫ID;
(2)、将呼叫ID与白名单中的ID进行匹配,如果该呼叫ID与白名单内的某一ID匹配,则认为该呼叫是合法呼叫,为该呼叫建立正常的连接,实现正常呼叫行为,否则,进行下一步;
白名单为注册或经检测确认为合法用户的呼叫ID组成的表单;
(3)、将呼叫ID与灰名单中的ID进行匹配,如果该呼叫ID与灰名单内的某一ID匹配:
a、如果灰名单中匹配的ID的状态为NULL,则先为该呼叫建立正常的连接,然后进行灰名单的状态处理:该呼叫ID的呼叫次数在一定时间内是否达到门限值,如果达到,则判断该呼叫ID发起的呼叫为异常呼叫,将状态更新为DROP,终止呼叫,否则为正常呼叫,将状态更新为GO;b、如果灰名单中匹配的ID的状态为DROP,则终止呼叫,如果是GO则建立正常的呼叫连接;
如果该呼叫ID与灰名单内的ID均不匹配,则下一步;
灰名单为经过检测系统初步检测但并没有确定是否为异常呼叫的呼叫ID组成的表单,包括呼叫ID和该呼叫ID的状态;呼叫ID的状态初始化为NULL,经过状态处理后更新为DROP或GO,其中NULL表示空、DROP表示丢弃、GO表示放行;
(4)、将呼叫ID与黑单中的ID进行匹配,如果属于黑名单内的ID,则认为该呼叫为非法呼叫,终止呼叫,及时释放本次呼叫所占用的资源,否则认为是正常呼叫,建立正常的呼叫连接;
黑名单为经过检测系统检测确定为异常呼叫的呼叫ID组成的表单。
2.根据权利要求1所述的基于多名单的异常呼叫过滤方法,其特征在于,所述的匹配为:
1)、将名单中的ID映射成树:将名单中的ID经过第一次hash计算之后的键值作为树的根节点,之后每次hash之后的键值都作为上一次hash键值的子节点,第一次hash后键值相同的名单中的ID构成一棵树;
b1:确定hash映射的范围,即数组a的大小;
b2:名单中的ID执行第一次hash运算,k1=hash1(ID),查看标示树位置的数组a,取键值对应数组元素a[k1],看是否为空,如果空,则执行步骤b3;如果不为空,则执行步骤b4;
b3:为该键值建立一棵新树,同时把树的位置指针赋值给a[k1],执行步骤b4;
b4:执行第二次hash运算,k2=hash2(ID),查找树根节点的子节点是否存在k2,如果不存在,则执行步骤b5;若存在,则执行步骤b6;
b5:为该新树建立新的叶节点,执行步骤b6;
b6:继续下一次hash运算,以后每次hash运算之后都要以上一次hash值节点为父节点查找其子节点是否存在该键值,不存在,则执行步骤b5;存在,则执行步骤b6,直到最后的h次,hash运算结束;
b7:在最后的h次hash运算后,kh=hashh(ID)后,查找第二个数组对应键值元素是否为空,若空,执行步骤b8;否则,执行步骤b9;
b8:为ID建立一个链表,将链表指针赋值给第二个数组元素b[kh],同时将ID拷贝给链表的第一个节点;
b9:取数组元素b[kh],找到链表,将ID拷贝到对应的链表中去;
2)、名单匹配
c1:将Call_ID执行第一次hash运算,g1=hash1(Call_ID);Call_ID表示呼叫ID;
c2:取a[g1]的值,判断该元素是否为空,如果为空,则执行步骤c3;否则,执行步骤c4;
c3:本次呼叫源ID不在名单内,结束查找;
c4:找到树结构位置,进行第二次hash运算g2=hash2(Call_ID),查找树的第二层子节点是否存在该值,如果不存在,则执行步骤c3;否则执行步骤c5;
c5:进行下一次hash运算gi=hashi(Call_ID),查找下一层i子节点是否存在该值,如果不存在,则执行步骤c3;否则重复执行步骤c5,直到h次hash结束;
c6:如果本次呼叫ID进行完所有hash运算之后对应树的一条自根节点到最下层叶节点的路径,则该呼叫ID有可能在名单内,要进行精确匹配以做出最终判断,找到第二个数组b中最后一次hash之后的键值的数组元素b[kh],取出链表指针;
c7:执行呼叫ID与链表元素的逐一比较,如果存在相同的字符串,则执行步骤c8;如果呼叫ID与链表中所有元素都不相同,则执行步骤c3;
c8:停止查找,呼叫ID在名单内。
3.根据权利要求1所述的基于多名单的异常呼叫过滤方法,其特征在于,所述的状态处理为:
1)、首先给灰名单中的呼叫ID建立一张链表,链表中每个节点是一个包含两个元素的结构体,两元素分别为标示呼叫的ID和指向环形队列的指针;
环形队列的最大长度看作是一个触发门限值,作为发起呼叫次数的阀值,环形队列中每个节点包含两个元素,分别为用来记录该呼叫发起的次数和每次发起呼叫的时间;
2),当匹配到属于灰名单中的呼叫ID时,查找链表,如果该呼叫ID不存在,就在已经建立的链表中添加一个新节点,将该呼叫ID加入到该节点的对应结构体中,同时为该呼叫建立一个环形队列,并将环形队列指针加入链表节点的对应位置;
如果该呼叫ID已经存在,则取环形队列指针找到对应环形队列,将呼叫次数加一后把该呼叫的呼叫次数及本次呼叫时间加入到环形队列中;
3)、状态机始终在执行操作:遍历链表中的节点,取节点元素结构体中的环形队列指针,找到对应环形队列,实施对链表中每个呼叫的环形队列的监测:当某个ID的呼叫次数在一定时间内达到门限值时就判断该ID发起的呼叫为异常呼叫,将状态更新为DROP,否则为正常呼叫,将状态更新为GO。
4.根据权利要求3所述的基于多名单的异常呼叫过滤方法,其特征在于,当所述的状态更新为DROP后,将该呼叫在链表中的节点删除,同时删除该呼叫对应的环形队列,以释放资源;
当所述的状态更新为GO后,将该呼叫在链表中的节点删除,同时删除该呼叫对应的环形队列,以释放资源。
一种基于多名单的异常呼叫过滤方法\n技术领域\n[0001] 本发明属于通信网络安全技术领域,更为具体地讲,涉及到一种在电信网及VoIP通信网络中对异常呼叫实施过滤的方法。通过该过滤方法,用户可以免遭恶意骚扰,避免遭受不必要的精神伤害。\n背景技术\n[0002] 目前电信业务发展迅猛,以互联网为代表的新技术革命正在深刻地改变着传统电信的概念和体系,电信界正面临着一场百年巨变。以软交换技术为核心、光网络和分组型传送技术为基础的开放式融合网,即下一代网络成为研究的热点。软交换技术是实现下一代网络Voice Over IP的一个最佳解决方案。VoIP作为语音通信网络,和传统的电话网络一样,同样需要信令系统的支撑。VoIP中的信令协议主要有H.323、SIP等,用于呼叫的建立与拆除。\n[0003] 无论是随着传统电话业务,还是VoIP等新的语音通信业务的不断向前发展,异常呼叫都时有发生并严重影响人们的正常生活。在日常家庭生活中,经常会接收到散播广告、推销、色情服务等的骚扰电话,给人们生活造成困扰,也造成人们精神上的损失。更为严重的是,如果不法分子专门针对110、120、114以及其他重要客户服务电话进行骚扰,实施拒绝服务攻击,利用专门的控制软件,向这些号码发起大量的呼叫请求,使其一直处于忙的状态,将会造成其他合法用户无法正常呼入。对攻击对象发起的这些攻击将影响社会服务电话系统无法正常运作,给社会安定团结带来不良影响。如果攻击者针对一些公司或者政府部门的所有号码实施拒绝服务攻击,一旦在被攻击对象业务最忙的时间段攻击成功,将会给被攻击方造成无法估计的损失。因此,解决异常呼叫问题已经刻不容缓。\n[0004] 目前,解决异常呼叫电话的策略为:记录对方电话号码并将其列入呼入限制名单的方式,或者利用电信局提供的追查恶意呼叫功能记录下攻击记录的方式确定攻击者身份,但是这些行为都是发生在异常呼叫之后,并且可能需要接收方反馈相应信息才能知道该呼叫为异常呼叫,这样可能是在非法呼叫已经发生很久之后才人工将该呼叫ID加入到限制名单,设置好名单后才能实现系统对异常呼叫的自动处理,这种方式对异常呼叫的过滤速度效率比较低。\n发明内容\n[0005] 本发明的目的在于克服现有技术的不足,提出一种快速有效的基于多名单的异常呼叫过滤方法。\n[0006] 为实现上述发明目的,本发明基于多名单的异常呼叫过滤方法,其特征在于,包括以下步骤:\n[0007] (1)、在获取信令消息中,首先捕获链路中传输的数据包,转发除信令信息以外的所有数据包,然后解析信令消息,提取呼叫ID;\n[0008] (2)、将呼叫ID与白名单中的ID进行匹配,如果该呼叫ID与白名单内的某一ID匹配,则认为该呼叫是合法呼叫,为该呼叫建立正常的连接,实现正常呼叫行为,否则,进行下一步;\n[0009] 白名单为注册或经检测确认为合法用户的呼叫ID组成的表单;\n[0010] (3)、将呼叫ID与灰名单中的ID进行匹配,如果该呼叫ID与灰名单内的某一ID匹配:a、如果灰名单中匹配的ID的状态为NULL,则先为该呼叫建立正常的连接,然后进行灰名单的状态处理:该呼叫ID的呼叫次数在一定时间内是否达到门限值,如果达到,则判断该呼叫ID发起的呼叫为异常呼叫,将状态更新为DROP,终止呼叫,否则为正常呼叫,将状态更新为GO;b、如果灰名单中匹配的ID的状态为DROP,则终止呼叫,如果是GO则建立正常的呼叫连接;\n[0011] 如果该呼叫ID与灰名单内的ID均不匹配,则下一步;\n[0012] 灰名单为经过检测系统初步检测但并没有确定是否为异常呼叫的呼叫ID组成的表单,包括呼叫ID和该呼叫ID的状态;呼叫ID的状态初始化为NULL,经过状态处理后更新为DROP或GO,其中NULL表示空、DROP表示丢弃、GO表示放行;\n[0013] (4)、将呼叫ID与黑单中的ID进行匹配,如果属于黑名单内的ID,则认为该呼叫为非法呼叫,终止呼叫,及时释放本次呼叫所占用的资源,否则认为是正常呼叫,建立正常的呼叫连接;\n[0014] 黑名单为经过检测系统检测确定为异常呼叫的呼叫ID组成的表单。\n[0015] 本发明的发明目的是这样实现的:\n[0016] 本发明采用基于白名单、灰名单以及黑名单的多名单匹配过滤,能够及时中断异常呼叫,并快速为合法用户,即正常呼叫建立连接。此外,本发明还采用灰名单状态处理机制,实现灰名单内状态的自动更新。同时,基于多名单的匹配过滤与检测过程是并行执行的,能够实现异常呼叫的在线过滤,及时发现异常并终止连接,使被叫用户免遭骚扰。\n附图说明\n[0017] 图1是实现本发明基于多名单的异常呼叫过滤方法一种具体实施方式下的原理模块图;\n[0018] 图2是本发明的黑、白、灰名单的一种以链表结构存储的格式图;\n[0019] 图3是本发明的名单中的ID的一种映射流程图及映射后的树结构图;\n[0020] 图4是本发明的呼叫ID的一种匹配流程图;\n[0021] 图5是本发明的灰名单状态处理中的一种环形队列结构图;\n[0022] 图6是本发明的灰名单状态处理的一种流程图;\n[0023] 图7是本发明的灰名单状态处理中的一种链表结构图。\n具体实施方式\n[0024] 下面结合附图对本发明的具体实施方式进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。\n[0025] 图1是实现本发明基于多名单的异常呼叫过滤方法一种具体实施方式下的原理模块图。\n[0026] 本发明基于多名单的异常呼叫过滤方法,是针对呼叫中的信令消息进行的,如在VoIP中的SIP信令。会话建立与拆除都需要信令消息在两端之间传输,获取信令消息并提取呼叫ID,然后与名单规则进行匹配比对,以实现过滤目的。\n[0027] 如图1所示,在本实施例中,提供了一种实现基于多名单的异常呼叫过滤方法,实现过程包括:数据获取及呼叫ID提取、白名单匹配、灰名单匹配、灰名单状态处理、黑名单匹配等五个模块。\n[0028] 在获取信令消息中,首先捕获链路中传输的数据包,转发除信令信息以外的所有数据包,然后解析信令消息,提取呼叫ID以用于下面的名单匹配,例如VoIP中的SIP信令信息的获取过程。\n[0029] 数据包获取是基于WinPcap实现的,基于WinPcap的抓包技术属于现有技术,这里不再介绍,最后把从网卡上截获的数据包复制到内核缓冲区后再将数据拷贝到用户缓冲区中以便后面的提取呼叫ID使用。\n[0030] 从数据包中提取信令消息并转发除此之外的所有数据包时,需要对数据包拆封。\n执行步骤如下所示:\n[0031] a1:取MAC帧的数据区,即得到IP数据包,通过IP数据包的协议(Protocol)字段可以判断所使用的传输层协议。因为SIP消息传输使用UDP协议,所以将传输层协议不是UDP协议的所有数据包转发,留下是UDP协议的数据包继续判断。\n[0032] a2:取IP数据包的数据区,得到传输的信令消息。读取消息的首行特定字段即可判断该消息是否为SIP信令消息。例如,INVITE sip:bob@biloxi.com SIP/2.0为建立呼叫的请求消息的首行,通过提取INVITE之后的sip就可以判断该消息为SIP信令消息。\n[0033] a3:将不是SIP信令消息的数据包从用户缓存中读取转发出去,并释放用户缓冲资源。\n[0034] 通过信令消息解析以提取呼叫ID,从而实现异常呼叫匹配过滤。根据SIP信令信息的特征,例如一个建立呼叫的请求消息:\n[0035] INVITE sip:bob@biloxi.com SIP/2.0\n[0036] Via:SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKkjshdyff[0037] To:bob\n[0038] From:Alice;tag=88sja8x\n[0039] Max-Forwards:70\n[0040] Call-ID:987asjd97y7atg@atlanta.com\n[0041] CSeq:1INVITE\n[0042] From:后面字段标示呼叫的发起方,alice@atlanta.com即为发起呼叫的呼叫ID.因为SIP消息在传输之前均转换为字符串格式,所以找到消息串的From:标志,然后读取标志后面的字段,就可以从中获得发起方ID,即呼叫ID。\n[0043] 图2是本发明的黑、白、灰名单的一种以链表结构存储的格式图。\n[0044] 在本实施中,如图2所示,黑、白、灰名单中的ID以链表结构存储,黑、白名单的结点中数据域为呼叫ID1~m、ID1~n而灰名单的结点中数据域为呼叫ID及其状态ID1~p、State1~p。链表的构造属于公众技术,在此不再赘述。\n[0045] 在本实施例中,黑、白、灰名单的匹配执行过程是相同的,所用到的匹配算法也相同,只是匹配之后的处理结果不同。白名单匹配之后对属于名单内的呼叫ID要建立正常的连接,不属于白名单内的要继续执行灰名单匹配。灰名单匹配之后对属于名单内的呼叫,如果状态为NULL,要先为该呼叫建立正常连接,然后执行本次呼叫ID的状态处理,以判断最终状态,如果是异常呼叫,则终止呼叫,如果不是,则保持;如果状态为DROP或GO,则进行终止连接或建立正常连接。不属于灰名单内的要继续进行黑名单匹配,黑名单匹配后对属于黑名单内的呼叫要及时做出响应措施,终止呼叫,释放本次呼叫所占用的系统资源,不属于黑名单内的认为是合法呼叫,要建立正常的连接。\n[0046] 在本实施中,名单匹配所用到的算法为Bloom Filter算法,Bloom Filter算法是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合元素,并能实现对集合中成员的高效查询。关于Bloom Filter算法,已是比较成熟的技术,这里不再详细介绍。\n[0047] 在本实施例中,为了减少算法中的hash冲突,提高算法执行效率,Bloom Filter算法结构采用树与数组相结合的架构,具体为:\n[0048] 1)、将名单中的ID映射成树\n[0049] 将名单中的ID经过第一次hash计算之后的键值作为树的根节点,之后每次hash之后的键值都作为上一次hash键值的子节点,第一次hash后键值相同的名单中的ID构成一棵树;\n[0050] 两个数组,第一个数组a用来存放每棵树的指针,第二个数组b用来存放链表指针,链表存放最后一次hash后键值相同的名单中ID;第二个数组的作用是为了减少模糊匹配之后的精确匹配时间,这样精确匹配就不会再去读取原名单,进行所有字符串的比较判断,而是只进行最后一次hash之后键值相同的字符串的比较判断,所以减少精确匹配时间。\n[0051] 在本实施例中,如图3所示,名单中的ID通过Bloom Filter运算映射到树结构中,用于后续的呼叫ID的匹配过滤。在本实施例种,算法采用h个hash函数,并且保证这些函数相互独立,对同一字符串进行单个运算的时间开销近似相等。名单中的ID是以字符串(string)的格式存在的,则名单映射实现步骤为:\n[0052] b1:确定hash映射的范围,即数组a的大小;\n[0053] b2:名单中的ID执行第一次hash运算,k1=hash1(ID),查看标示树位置的数组a,取键值对应数组元素a[k1],看是否为空,如果空,则执行步骤b3;如果不为空,则执行步骤b4;\n[0054] b3:为该键值建立一棵新树,同时把树的位置指针赋值给a[k1],执行步骤b4;\n[0055] b4:执行第二次hash运算,k2=hash2(ID),查找树根节点的子节点是否存在kx,如果不存在,则执行步骤b5;若存在,则执行步骤b6;\n[0056] b5:为该树建立新的叶节点,执行步骤b6;\n[0057] b6:继续下一次hash运算,以后每次hash运算之后都要以上一次hash值节点为父节点查找其子节点是否存在该键值,不存在,则执行步骤b5;存在,则执行步骤b6,直到最后的h次,hash运算结束;\n[0058] b7:在最后的h次hash运算后,kh=hashh(ID)后,查找第二个数组对应键值元素是否为空,若空,执行步骤b8;否则,执行步骤b9;\n[0059] b8:为ID建立一个链表,将链表指针赋值给第二个数组元素b[kh],同时将ID拷贝给链表的第一个节点;\n[0060] b9:取数组元素b[kh],找到链表,将ID拷贝到对应的链表中去。\n[0061] 在本实施例中,如图3所示,名单中的ID映射成树共进行了6次hash运算,即h=6。名单中的ID有4个,为字符串str1、str2、str3、str4,设映射范围是100,即树的位置数组a和链表的位置数组b元素均为100个,初始化为NULL,即元素为空,四个字符串str1、str2、str3、str4的映射树如图3右所示,则映射过程如下所示:\n[0062] 30=hash1(str1)=hash1(str2),40=hash1(str3)=hash1(str4),[0063] 97=hash6(str1)=hash6(str4),82=hash6(str2)=hash6(str3),[0064] 中间几次哈希键值如图3所示,则a[30]是第一棵树的位置,a[40]是第二棵树的位置。字符串str1在第一次hash后,键值k1=30,查看a[30],为空,则创建一棵新树,将树的位置赋给a[30],30为树的根节点,然后开始下一次hash运算,每次hash后,创建新的子节点,直到6次hash运算结束。字符串str2第一次hash后,键值k1=30,查看a[30],不为空,树已存在,不必再创建新的树,然后开始第二次hash运算,键值为20,找到树的位置,查看根节点是否存在键值20的叶节点,不存在,则为根节点建立新的子节点。之后进行第三次hash运算,键值为35,查看键值20的节点是否存在键值35的子节点,不存在,则建立新的子节点。接着执行下一次hash运算并判断,直到6次hash结束。字符串str3在第一次hash后,键值k1=40,查看a[40],为空,则创建一棵新树,将树的位置赋给a[40],40为根节点,然后开始下一次hash运算,每次hash后,创建新的叶节点,直到6次hash运算结束。字符串str4在第一次hash运算后,键值k1=40,查看a[40],不为空,树已经存在,然后开始第二次hash运算,键值为82,找到树的位置,查看根节点是否存在键值82的叶节点,存在,则不必建立新的叶节点,开始下一次hash运算,并查看上次hash键值节点的叶节点是否存在本次hash键值,不存在,则建立新的叶节点,直到六次hash结束。在最后一次哈希后,为字符串str1创建一个链表,并把链表位置放在b[97]中,同时将str1拷贝到链表的第一个节点中,为字符串str2也创建一个链表,并把链表位置放在b[82]中,同时将str2拷贝到链表的第一个节点中,但是字符串str3和str4就不必在创建链表了,而是找到链表位置新建一个节点,直接将字符串拷贝到新建的节点中。字符串str1映射到a[30]树的左分支,字符串str2映射到a[30]树的右分支;字符串str3映射到a[40]树的左分支,字符串str4映射到a[40]树的右分支。\n[0065] 2)、名单匹配\n[0066] c1:将Cal_ID执行第一次hash运算,g1=hash1(Call_ID);Call_ID表示呼叫ID;\n[0067] c2:取a[g1]的值,判断该元素是否为空,如果为空,则执行步骤c3;否则,执行步骤c4;\n[0068] c3:本次呼叫源ID不在名单内,结束查找;\n[0069] c4:找到树结构位置,进行第二次hash运算g2=hash2(Call_ID),查找树的第二层子节点是否存在该值,如果不存在,则执行步骤c3;否则执行步骤c5;\n[0070] c5:进行下一次hash运算gi=hashi(Call_ID),查找下一层i子节点是否存在该值,如果不存在,则执行步骤c3;否则重复执行步骤c5,直到h次hash结束;\n[0071] c6:如果本次呼叫ID进行完所有hash运算之后对应树的一条自根节点到最下层叶节点的路径,则该呼叫ID有可能在名单内,要进行精确匹配以做出最终判断,找到第二个数组b中最后一次hash之后的键值的数组元素b[kh],取出链表指针;\n[0072] c7:执行呼叫ID与链表元素的逐一比较,如果存在相同的字符串,则执行步骤c8;\n如果呼叫ID与链表中所有元素都不相同,则执行步骤c3;\n[0073] c8:停止查找,呼叫ID在名单内。\n[0074] 在本实施例中,如图4所示,6次hash运算和匹配,即h=6。\n[0075] 在本实施例中,本发明基于多名单的异常呼叫过滤方法中灰名单的状态处理实现方式为:\n[0076] 1)、首先给灰名单中的呼叫ID建立一张链表,链表中每个节点是一个包含两个元素的结构体,两元素分别为标示呼叫的ID和指向环形队列的指针;\n[0077] 环形队列的最大长度看作是一个触发门限值,作为发起呼叫次数的阀值,环形队列中每个节点包含两个元素,分别为用来记录该呼叫发起的次数和每次发起呼叫的时间;\n[0078] 2),当匹配到属于灰名单中的呼叫ID时,查找链表,如果该呼叫ID不存在,就在已经建立的链表中添加一个新节点,将该呼叫ID加入到该节点的对应结构体中,同时为该呼叫建立一个环形队列,并将环形队列指针加入链表节点的对应位置;\n[0079] 如果该呼叫ID已经存在,则取环形队列指针找到对应环形队列,将呼叫次数加一后把该呼叫的呼叫次数及本次呼叫时间加入到环形队列中;\n[0080] 3)、状态机始终在执行操作:遍历链表中的节点,取节点元素结构体中的环形队列指针,找到对应环形队列,实施对链表中每个呼叫的环形队列的监测。当某个ID的呼叫次数在一定时间内达到门限值时就判断该ID发起的呼叫为异常呼叫,将状态更新为DROP,否则为正常呼叫,将状态更新为GO。\n[0081] 参照图5,在本实施例中,环形队列的最大长度减1作为一个门限值,即触发呼叫状态转变的阀值,图中阀值为7。队列中每个节点是包含两个元素的结构体,分别为用来记录该呼叫发起的次数和每次发起呼叫的时间。建立环形队列后第一个节点为front=rear,当有属于灰名单内的呼叫到来后,rear向后移动一个节点位置,同时为节点赋值,呼叫次数记为1,时间是本次呼叫到达的时间戳,以后每次有相同的呼叫源发起呼叫时,就找对应环形队列将呼叫次数加1赋给队列新节点。结构体定义如下所示:\n[0082] struct CQ_arrival\n[0083] {\n[0084] int rec;\n[0085] struct timeval time;\n[0086] };\n[0087] 参照图6,在本实施例中,提出了一种灰名单状态处理方法,实现过程如下步骤所示:\n[0088] d1:给属于灰名单内的呼叫ID建立一张链表,链表中每个节点kn-1、kn、kn+1是一个包含两个元素的结构体,两元素分别为标示呼叫的ID和指向环形队列的指针,参照图\n7,结构体定义如下所示,\n[0089] struct Que_marked\n[0090] {\n[0091] char*CallID;//呼叫ID\n[0092] CirQueue*CirQ;//环形队列的指针\n[0093] };\n[0094] d2:当匹配到有属于灰名单内的呼叫到来时,执行步骤d3;\n[0095] d3:查看链表中是否已经存在该呼叫ID,如果不存在,则执行步骤d4;如果存在,则执行步骤d5;\n[0096] d4:给链表加入一个新节点,同时为该呼叫建立一个环形队列,将该呼叫ID和环形队列指针的两元素结构体加入节点,然后执行步骤d6;\n[0097] d5:取链表节点元素,找到该呼叫ID对应的环形队列,然后执行步骤d6;\n[0098] d6:将该呼叫ID发起的呼叫次数和发起本次呼叫的时间加入到环形队列的节点中,实现队列节点的更新操作;\n[0099] d7:状态机始终在执行步骤d8的操作;\n[0100] d8:遍历链表的各个节点,取出节点元素得到环形队列的指针,然后转至步骤d9;\n[0101] d9:判断链表中呼叫的环形队列是否有阀值触发,如果在给定时间内存在环形队列阀值触发,则执行步骤d10;如果在给定时间段内环形队列并没有触发阀值,执行步骤d11;\n[0102] d10:将该队列对应的呼叫视为异常呼叫,修改该呼叫ID在灰名单内的状态为DROP,执行步骤d12。\n[0103] d11:将该队列对应的呼叫视为正常呼叫,修改该呼叫ID在灰名单内的状态为GO;\n[0104] d12:实施阻断处理,终止呼叫,释放系统资源。\n[0105] 在本实施例中,灰名单内匹配的呼叫ID将随着状态机的执行做出状态转换。状态机执行循环遍历灰名单链表,依次查看链表中每个呼叫ID对应的环形队列的阀值是否触发,如果触发,则到灰名单内找到本呼叫ID,将其状态转换为DROP,然后将该呼叫在链表中的节点删除,同时删除该呼叫对应的环形队列,以释放资源;如果给定时间还没有触发并且阀值也没有触发,则将移至下一个链表节点,继续状态处理;如果给定时间触发,但是阀值并没有触发,则判断该呼叫为正常呼叫,则到灰名单内找到本呼叫ID,将其状态转换为GO,然后将该呼叫在链表中的节点删除,同时删除该呼叫对应的环形队列,以释放资源。\n[0106] 尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
法律信息
- 2016-10-26
未缴年费专利权终止
IPC(主分类): H04M 7/00
专利号: ZL 201010272395.2
申请日: 2010.09.03
授权公告日: 2012.12.05
- 2012-12-05
- 2011-03-02
实质审查的生效
IPC(主分类): H04M 7/00
专利申请号: 201010272395.2
申请日: 2010.09.03
- 2011-01-05
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2007-09-12
|
2006-03-10
| | |
2
| |
2008-04-30
|
2007-11-27
| | |
3
| |
2008-09-10
|
2008-04-23
| | |
4
| | 暂无 |
2006-04-18
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |