專利名稱:一種基于多名單的異常呼叫過(guò)濾方法
技術(shù)領(lǐng)域:
本發(fā)明屬于通信網(wǎng)絡(luò)安全技術(shù)領(lǐng)域,更為具體地講,涉及到一種在電信網(wǎng)及VoIP 通信網(wǎng)絡(luò)中對(duì)異常呼叫實(shí)施過(guò)濾的方法。通過(guò)該過(guò)濾方法,用戶可以免遭惡意騷擾,避免遭 受不必要的精神傷害。
背景技術(shù):
目前電信業(yè)務(wù)發(fā)展迅猛,以互聯(lián)網(wǎng)為代表的新技術(shù)革命正在深刻地改變著傳統(tǒng)電 信的概念和體系,電信界正面臨著一場(chǎng)百年巨變。以軟交換技術(shù)為核心、光網(wǎng)絡(luò)和分組型傳 送技術(shù)為基礎(chǔ)的開(kāi)放式融合網(wǎng),即下一代網(wǎng)絡(luò)成為研究的熱點(diǎn)。軟交換技術(shù)是實(shí)現(xiàn)下一代 網(wǎng)絡(luò)Voice Over IP的一個(gè)最佳解決方案。VoIP作為語(yǔ)音通信網(wǎng)絡(luò),和傳統(tǒng)的電話網(wǎng)絡(luò)一 樣,同樣需要信令系統(tǒng)的支撐。VoIP中的信令協(xié)議主要有H. 323、SIP等,用于呼叫的建立 與拆除。無(wú)論是隨著傳統(tǒng)電話業(yè)務(wù),還是VoIP等新的語(yǔ)音通信業(yè)務(wù)的不斷向前發(fā)展,異常 呼叫都時(shí)有發(fā)生并嚴(yán)重影響人們的正常生活。在日常家庭生活中,經(jīng)常會(huì)接收到散播廣告、 推銷、色情服務(wù)等的騷擾電話,給人們生活造成困擾,也造成人們精神上的損失。更為嚴(yán)重 的是,如果不法分子專門針對(duì)110、120、114以及其他重要客戶服務(wù)電話進(jìn)行騷擾,實(shí)施拒 絕服務(wù)攻擊,利用專門的控制軟件,向這些號(hào)碼發(fā)起大量的呼叫請(qǐng)求,使其一直處于忙的狀 態(tài),將會(huì)造成其他合法用戶無(wú)法正常呼入。對(duì)攻擊對(duì)象發(fā)起的這些攻擊將影響社會(huì)服務(wù)電 話系統(tǒng)無(wú)法正常運(yùn)作,給社會(huì)安定團(tuán)結(jié)帶來(lái)不良影響。如果攻擊者針對(duì)一些公司或者政府 部門的所有號(hào)碼實(shí)施拒絕服務(wù)攻擊,一旦在被攻擊對(duì)象業(yè)務(wù)最忙的時(shí)間段攻擊成功,將會(huì) 給被攻擊方造成無(wú)法估計(jì)的損失。因此,解決異常呼叫問(wèn)題已經(jīng)刻不容緩。目前,解決異常呼叫電話的策略為記錄對(duì)方電話號(hào)碼并將其列入呼入限制名單 的方式,或者利用電信局提供的追查惡意呼叫功能記錄下攻擊記錄的方式確定攻擊者身 份,但是這些行為都是發(fā)生在異常呼叫之后,并且可能需要接收方反饋相應(yīng)信息才能知道 該呼叫為異常呼叫,這樣可能是在非法呼叫已經(jīng)發(fā)生很久之后才人工將該呼叫ID加入到 限制名單,設(shè)置好名單后才能實(shí)現(xiàn)系統(tǒng)對(duì)異常呼叫的自動(dòng)處理,這種方式對(duì)異常呼叫的過(guò) 濾速度效率比較低。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提出一種快速有效的基于多名單的異常 呼叫過(guò)濾方法。為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明基于多名單的異常呼叫過(guò)濾方法,其特征在于,包括 以下步驟(1)、在獲取信令消息中,首先捕獲鏈路中傳輸?shù)臄?shù)據(jù)包,轉(zhuǎn)發(fā)除信令信息以外的 所有數(shù)據(jù)包,然后解析信令消息,提取呼叫ID ;(2)、將呼叫ID與白名單中的ID進(jìn)行匹配,如果該呼叫ID與白名單內(nèi)的某一 ID匹配,則認(rèn)為該呼叫是合法呼叫,為該呼叫建立正常的連接,實(shí)現(xiàn)正常呼叫行為,否則,進(jìn)行 下一步;白名單為注冊(cè)或經(jīng)檢測(cè)確認(rèn)為合法用戶的呼叫ID組成的表單;(3)、將呼叫ID與灰名單中的ID進(jìn)行匹配,如果該呼叫ID與灰名單內(nèi)的某一 ID 匹配a、如果灰名單中匹配的ID的狀態(tài)為NULL,則先為該呼叫建立正常的連接,然后進(jìn)行 灰名單的狀態(tài)處理該呼叫ID的呼叫次數(shù)在一定時(shí)間內(nèi)是否達(dá)到門限值,如果達(dá)到,則判 斷該呼叫ID發(fā)起的呼叫為異常呼叫,將狀態(tài)更新為DROP,終止呼叫,否則為正常呼叫,將狀 態(tài)更新為GO ;b、如果灰名單中匹配的ID的狀態(tài)為DROP,則終止呼叫,如果是GO則建立正常 的呼叫連接;如果該呼叫ID與灰名單內(nèi)的ID均不匹配,則下一步;灰名單為經(jīng)過(guò)檢測(cè)系統(tǒng)初步檢測(cè)但并沒(méi)有確定是否為異常呼叫的呼叫ID組成的 表單,包括呼叫ID和該呼叫ID的狀態(tài);呼叫ID的狀態(tài)初始化為NULL,經(jīng)過(guò)狀態(tài)處理后更 新為DROP或G0,其中NULL表示空、DROP表示丟棄、GO表示放行;(4)、將呼叫ID與黑單中的ID進(jìn)行匹配,如果屬于黑名單內(nèi)的ID,則認(rèn)為該呼叫為 非法呼叫,終止呼叫,及時(shí)釋放本次呼叫所占用的資源,否則認(rèn)為是正常呼叫,建立正常的 呼叫連接;黑名單為經(jīng)過(guò)檢測(cè)系統(tǒng)檢測(cè)確定為異常呼叫的呼叫ID組成的表單。本發(fā)明的發(fā)明目的是這樣實(shí)現(xiàn)的本發(fā)明采用基于白名單、灰名單以及黑名單的多名單匹配過(guò)濾,能夠及時(shí)中斷異 常呼叫,并快速為合法用戶,即正常呼叫建立連接。此外,本發(fā)明還采用灰名單狀態(tài)處理機(jī) 制,實(shí)現(xiàn)灰名單內(nèi)狀態(tài)的自動(dòng)更新。同時(shí),基于多名單的匹配過(guò)濾與檢測(cè)過(guò)程是并行執(zhí)行 的,能夠?qū)崿F(xiàn)異常呼叫的在線過(guò)濾,及時(shí)發(fā)現(xiàn)異常并終止連接,使被叫用戶免遭騷擾。
圖1是實(shí)現(xiàn)本發(fā)明基于多名單的異常呼叫過(guò)濾方法一種具體實(shí)施方式
下的原理 模塊圖;圖2是本發(fā)明的黑、白、灰名單的一種以鏈表結(jié)構(gòu)存儲(chǔ)的格式圖;圖3是本發(fā)明的名單中的ID的一種映射流程圖及映射后的樹(shù)結(jié)構(gòu)圖;圖4是本發(fā)明的呼叫ID的一種匹配流程圖;圖5是本發(fā)明的灰名單狀態(tài)處理中的一種環(huán)形隊(duì)列結(jié)構(gòu)圖;圖6是本發(fā)明的灰名單狀態(tài)處理的一種流程圖;圖7是本發(fā)明的灰名單狀態(tài)處理中的一種鏈表結(jié)構(gòu)圖。
具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式
進(jìn)行描述,以便本領(lǐng)域的技術(shù)人員更好地 理解本發(fā)明。需要特別提醒注意的是,在以下的描述中,當(dāng)已知功能和設(shè)計(jì)的詳細(xì)描述也許 會(huì)淡化本發(fā)明的主要內(nèi)容時(shí),這些描述在這里將被忽略。圖1是實(shí)現(xiàn)本發(fā)明基于多名單的異常呼叫過(guò)濾方法一種具體實(shí)施方式
下的原理 模塊圖。
本發(fā)明基于多名單的異常呼叫過(guò)濾方法,是針對(duì)呼叫中的信令消息進(jìn)行的,如在 VoIP中的SIP信令。會(huì)話建立與拆除都需要信令消息在兩端之間傳輸,獲取信令消息并提 取呼叫ID,然后與名單規(guī)則進(jìn)行匹配比對(duì),以實(shí)現(xiàn)過(guò)濾目的。如圖1所示,在本實(shí)施例中,提供了一種實(shí)現(xiàn)基于多名單的異常呼叫過(guò)濾方法,實(shí) 現(xiàn)過(guò)程包括數(shù)據(jù)獲取及呼叫ID提取、白名單匹配、灰名單匹配、灰名單狀態(tài)處理、黑名單 匹配等五個(gè)模塊。在獲取信令消息中,首先捕獲鏈路中傳輸?shù)臄?shù)據(jù)包,轉(zhuǎn)發(fā)除信令信息以外的所有 數(shù)據(jù)包,然后解析信令消息,提取呼叫ID以用于下面的名單匹配,例如VoIP中的SIP信令 信息的獲取過(guò)程。數(shù)據(jù)包獲取是基于WinPcap實(shí)現(xiàn)的,基于WinPcap的抓包技術(shù)屬于現(xiàn)有技術(shù),這里 不再介紹,最后把從網(wǎng)卡上截獲的數(shù)據(jù)包復(fù)制到內(nèi)核緩沖區(qū)后再將數(shù)據(jù)拷貝到用戶緩沖區(qū) 中以便后面的提取呼叫ID使用。從數(shù)據(jù)包中提取信令消息并轉(zhuǎn)發(fā)除此之外的所有數(shù)據(jù)包時(shí),需要對(duì)數(shù)據(jù)包拆封。 執(zhí)行步驟如下所示al 取MAC幀的數(shù)據(jù)區(qū),即得到IP數(shù)據(jù)包,通過(guò)IP數(shù)據(jù)包的協(xié)議(Protocol)字段 可以判斷所使用的傳輸層協(xié)議。因?yàn)镾IP消息傳輸使用UDP協(xié)議,所以將傳輸層協(xié)議不是 UDP協(xié)議的所有數(shù)據(jù)包轉(zhuǎn)發(fā),留下是UDP協(xié)議的數(shù)據(jù)包繼續(xù)判斷。a2 取IP數(shù)據(jù)包的數(shù)據(jù)區(qū),得到傳輸?shù)男帕钕?。讀取消息的首行特定字段即可 判斷該消息是否為SIP信令消息。例如,INVITE sip:bobibiloxi. com SIP/2. O為建立呼 叫的請(qǐng)求消息的首行,通過(guò)提取INVITE之后的sip就可以判斷該消息為SIP信令消息。a3:將不是SIP信令消息的數(shù)據(jù)包從用戶緩存中讀取轉(zhuǎn)發(fā)出去,并釋放用戶緩沖 資源。通過(guò)信令消息解析以提取呼叫ID,從而實(shí)現(xiàn)異常呼叫匹配過(guò)濾。根據(jù)SIP信令信 息的特征,例如一個(gè)建立呼叫的請(qǐng)求消息 INVITE sip:bobibiloxi. com SIP/2. O^Via: SIP/2. 0/UDP pc33. atlanta. com ;branch = z9hG4bKkjshdyff*l* To:bob<sip:bobibiloxi. com>*l* From: Alice<sip: aliceiatlanta. com> ;tag = 88s ja8xMax-Forwards: 70 CalI-ID:987asjd97y7atgiatlanta. com^CSeqil INVITEFrom 后面字段標(biāo)示呼叫的發(fā)起方,alicefetlanta. com即為發(fā)起呼叫的呼叫 ID.因?yàn)镾IP消息在傳輸之前均轉(zhuǎn)換為字符串格式,所以找到消息串的From 標(biāo)志,然后讀 取標(biāo)志后面的<sip:alice@atlanta. com>字段,就可以從中獲得發(fā)起方ID,即呼叫ID。圖2是本發(fā)明的黑、白、灰名單的一種以鏈表結(jié)構(gòu)存儲(chǔ)的格式圖。在本實(shí)施中,如圖2所示,黑、白、灰名單中的ID以鏈表結(jié)構(gòu)存儲(chǔ),黑、白名單的 結(jié)點(diǎn)中數(shù)據(jù)域?yàn)楹艚蠭Dbm、ID1I而灰名單的結(jié)點(diǎn)中數(shù)據(jù)域?yàn)楹艚蠭D及其狀態(tài)IDbP、 State11。鏈表的構(gòu)造屬于公眾技術(shù),在此不再贅述。在本實(shí)施例中,黑、白、灰名單的匹配執(zhí)行過(guò)程是相同的,所用到的匹配算法也相同,只是匹配之后的處理結(jié)果不同。白名單匹配之后對(duì)屬于名單內(nèi)的呼叫ID要建立正常的 連接,不屬于白名單內(nèi)的要繼續(xù)執(zhí)行灰名單匹配?;颐麊纹ヅ渲髮?duì)屬于名單內(nèi)的呼叫,如 果狀態(tài)為NULL,要先為該呼叫建立正常連接,然后執(zhí)行本次呼叫ID的狀態(tài)處理,以判斷最 終狀態(tài),如果是異常呼叫,則終止呼叫,如果不是,則保持;如果狀態(tài)為DROP或G0,則進(jìn)行終 止連接或建立正常連接。不屬于灰名單內(nèi)的要繼續(xù)進(jìn)行黑名單匹配,黑名單匹配后對(duì)屬于 黑名單內(nèi)的呼叫要及時(shí)做出響應(yīng)措施,終止呼叫,釋放本次呼叫所占用的系統(tǒng)資源,不屬于 黑名單內(nèi)的認(rèn)為是合法呼叫,要建立正常的連接。在本實(shí)施中,名單匹配所用到的算法為Bloom Filter算法,Bloom Filter算法是 一種空間效率很高的隨機(jī)數(shù)據(jù)結(jié)構(gòu),它利用位數(shù)組很簡(jiǎn)潔地表示一個(gè)集合元素,并能實(shí)現(xiàn) 對(duì)集合中成員的高效查詢。關(guān)于Bloom Filter算法,已是比較成熟的技術(shù),這里不再詳細(xì) 介紹。在本實(shí)施例中,為了減少算法中的hash沖突,提高算法執(zhí)行效率,Bloom Filter 算法結(jié)構(gòu)采用樹(shù)與數(shù)組相結(jié)合的架構(gòu),具體為1)、將名單中的ID映射成樹(shù)將名單中的ID經(jīng)過(guò)第一次hash計(jì)算之后的鍵值作為樹(shù)的根節(jié)點(diǎn),之后每次hash 之后的鍵值都作為上一次hash鍵值的子節(jié)點(diǎn),第一次hash后鍵值相同的名單中的ID構(gòu)成 一棵樹(shù);兩個(gè)數(shù)組,第一個(gè)數(shù)組a用來(lái)存放每棵樹(shù)的指針,第二個(gè)數(shù)組b用來(lái)存放鏈表指 針,鏈表存放最后一次hash后鍵值相同的名單中ID;第二個(gè)數(shù)組的作用是為了減少模糊 匹配之后的精確匹配時(shí)間,這樣精確匹配就不會(huì)再去讀取原名單,進(jìn)行所有字符串的比較 判斷,而是只進(jìn)行最后一次hash之后鍵值相同的字符串的比較判斷,所以減少精確匹配時(shí) 間。在本實(shí)施例中,如圖3所示,名單中的ID通過(guò)Bloom Filter運(yùn)算映射到樹(shù)結(jié)構(gòu) 中,用于后續(xù)的呼叫ID的匹配過(guò)濾。在本實(shí)施例種,算法采用h個(gè)hash函數(shù),并且保證這 些函數(shù)相互獨(dú)立,對(duì)同一字符串進(jìn)行單個(gè)運(yùn)算的時(shí)間開(kāi)銷近似相等。名單中的ID是以字符 串(string)的格式存在的,則名單映射實(shí)現(xiàn)步驟為bl 確定hash映射的范圍,即數(shù)組a的大?。籦2 名單中的ID執(zhí)行第一次hash運(yùn)算,Ic1 = Iiash1 (ID),查看標(biāo)示樹(shù)位置的數(shù)組 a,取鍵值對(duì)應(yīng)數(shù)組元素a[kj,看是否為空,如果空,則執(zhí)行步驟b3 ;如果不為空,則執(zhí)行步 驟b4 ;b3 為該鍵值建立一棵新樹(shù),同時(shí)把樹(shù)的位置指針賦值給a[kl],執(zhí)行步驟b4 ;b4 執(zhí)行第二次hash運(yùn)算,k2 = hash2 (ID),查找樹(shù)根節(jié)點(diǎn)的子節(jié)點(diǎn)是否存在kx, 如果不存在,則執(zhí)行步驟b5 ;若存在,則執(zhí)行步驟b6 ;b5 為該樹(shù)建立新的葉節(jié)點(diǎn),執(zhí)行步驟b6 ;b6 繼續(xù)下一次hash運(yùn)算,以后每次hash運(yùn)算之后都要以上一次hash值節(jié)點(diǎn)為 父節(jié)點(diǎn)查找其子節(jié)點(diǎn)是否存在該鍵值,不存在,則執(zhí)行步驟b5 ;存在,則執(zhí)行步驟b6,直到 最后的h次,hash運(yùn)算結(jié)束;b7 在最后的h次hash運(yùn)算后,kh = hashh(ID)后,查找第二個(gè)數(shù)組對(duì)應(yīng)鍵值元素 是否為空,若空,執(zhí)行步驟b8 ;否則,執(zhí)行步驟b9 ;
b8 為ID建立一個(gè)鏈表,將鏈表指針賦值給第二個(gè)數(shù)組元素b [kh],同時(shí)將ID拷貝 給鏈表的第一個(gè)節(jié)點(diǎn);b9 取數(shù)組元素b[kh],找到鏈表,將ID拷貝到對(duì)應(yīng)的鏈表中去。在本實(shí)施例中,如圖3所示,名單中的ID映射成樹(shù)共進(jìn)行了 6次hash運(yùn)算,即h =6。名單中的ID有4個(gè),為字符串stri、str2、str3、str4,設(shè)映射范圍是100,即樹(shù)的位置 數(shù)組a和鏈表的位置數(shù)組b元素均為100個(gè),初始化為NULL,即元素為空,四個(gè)字符串計(jì)巧、 str2, str3、Str4的映射樹(shù)如圖3右所示,則映射過(guò)程如下所示30 = Iiash1 (Str1) = Iiash1 (Str2),40 = Iiash1 (str3) = Iiash1 (Str4),97 = hash6 (Str1) = hash6 (str4), 82 = hash6 (str2) = hash6 (str3),中間幾次哈希鍵值如圖3所示,則a[30]是第一棵樹(shù)的位置,a[40]是第二棵樹(shù)的 位置。字符串Str1在第一次hash后,鍵值& = 30,查看a[30],為空,則創(chuàng)建一棵新樹(shù),將 樹(shù)的位置賦給a[30],30為樹(shù)的根節(jié)點(diǎn),然后開(kāi)始下一次hash運(yùn)算,每次hash后,創(chuàng)建新的 子節(jié)點(diǎn),直到6次hash運(yùn)算結(jié)束。字符串Str2第一次hash后,鍵值1^ = 30,查看a[30], 不為空,樹(shù)已存在,不必再創(chuàng)建新的樹(shù),然后開(kāi)始第二次hash運(yùn)算,鍵值為20,找到樹(shù)的位 置,查看根節(jié)點(diǎn)是否存在鍵值20的葉節(jié)點(diǎn),不存在,則為根節(jié)點(diǎn)建立新的子節(jié)點(diǎn)。之后進(jìn)行 第三次hash運(yùn)算,鍵值為35,查看鍵值20的節(jié)點(diǎn)是否存在鍵值35的子節(jié)點(diǎn),不存在,則建 立新的子節(jié)點(diǎn)。接著執(zhí)行下一次hash運(yùn)算并判斷,直到6次hash結(jié)束。字符串Str3在第 一次hash后,鍵值Ii1 = 40,查看a[40],為空,則創(chuàng)建一棵新樹(shù),將樹(shù)的位置賦給a[40],40 為根節(jié)點(diǎn),然后開(kāi)始下一次hash運(yùn)算,每次hash后,創(chuàng)建新的葉節(jié)點(diǎn),直到6次hash運(yùn)算 結(jié)束。字符串str4在第一次hash運(yùn)算后,鍵值Ic1 = 40,查看a[40],不為空,樹(shù)已經(jīng)存在, 然后開(kāi)始第二次hash運(yùn)算,鍵值為82,找到樹(shù)的位置,查看根節(jié)點(diǎn)是否存在鍵值82的葉節(jié) 點(diǎn),存在,則不必建立新的葉節(jié)點(diǎn),開(kāi)始下一次hash運(yùn)算,并查看上次hash鍵值節(jié)點(diǎn)的葉節(jié) 點(diǎn)是否存在本次hash鍵值,不存在,則建立新的葉節(jié)點(diǎn),直到六次hash結(jié)束。在最后一次 哈希后,為字符串計(jì)巧創(chuàng)建一個(gè)鏈表,并把鏈表位置放在b[97]中,同時(shí)將strl拷貝到鏈表 的第一個(gè)節(jié)點(diǎn)中,為字符串Str2也創(chuàng)建一個(gè)鏈表,并把鏈表位置放在b [82]中,同時(shí)將str2 拷貝到鏈表的第一個(gè)節(jié)點(diǎn)中,但是字符串Str3和Str4就不必在創(chuàng)建鏈表了,而是找到鏈表 位置新建一個(gè)節(jié)點(diǎn),直接將字符串拷貝到新建的節(jié)點(diǎn)中。字符串Str1映射到a[30]樹(shù)的左 分支,字符串Str2映射到a[30]樹(shù)的右分支;字符串Str3映射到a[40]樹(shù)的左分支,字符串 Str4映射到a[40]樹(shù)的右分支。2)、名單匹配cl 將 Cal_ID 執(zhí)行第一次 hash 運(yùn)算,gl = Iiash1(CallID) ;Call_ID 表示呼叫 ID ;c2 取a[gl]的值,判斷該元素是否為空,如果為空,則執(zhí)行步驟c3 ;否則,執(zhí)行步 驟c4;c3 本次呼叫源ID不在名單內(nèi),結(jié)束查找;c4 找到樹(shù)結(jié)構(gòu)位置,進(jìn)行第二次hash運(yùn)算& = hash2 (Call_ID),查找樹(shù)的第二 層子節(jié)點(diǎn)是否存在該值,如果不存在,則執(zhí)行步驟c3 ;否則執(zhí)行步驟c5 ;c5 進(jìn)行下一次hash運(yùn)算gi = Iiashi (Call_ID),查找下一層i子節(jié)點(diǎn)是否存在該 值,如果不存在,則執(zhí)行步驟c3 ;否則重復(fù)執(zhí)行步驟c5,直到h次hash結(jié)束;c6 如果本次呼叫ID進(jìn)行完所有hash運(yùn)算之后對(duì)應(yīng)樹(shù)的一條自根節(jié)點(diǎn)到最下層葉節(jié)點(diǎn)的路徑,則該呼叫ID有可能在名單內(nèi),要進(jìn)行精確匹配以做出最終判斷,找到第二 個(gè)數(shù)組b中最后一次hash之后的鍵值的數(shù)組元素b[kh],取出鏈表指針;c7 執(zhí)行呼叫ID與鏈表元素的逐一比較,如果存在相同的字符串,則執(zhí)行步驟c8 ; 如果呼叫ID與鏈表中所有元素都不相同,則執(zhí)行步驟c3 ;c8 停止查找,呼叫ID在名單內(nèi)。在本實(shí)施例中,如圖4所示,6次hash運(yùn)算和匹配,即h = 6。在本實(shí)施例中,本發(fā)明基于多名單的異常呼叫過(guò)濾方法中灰名單的狀態(tài)處理實(shí)現(xiàn) 方式為1)、首先給灰名單中的呼叫ID建立一張鏈表,鏈表中每個(gè)節(jié)點(diǎn)是一個(gè)包含兩個(gè)元 素的結(jié)構(gòu)體,兩元素分別為標(biāo)示呼叫的ID和指向環(huán)形隊(duì)列的指針;環(huán)形隊(duì)列的最大長(zhǎng)度看作是一個(gè)觸發(fā)門限值,作為發(fā)起呼叫次數(shù)的閥值,環(huán)形隊(duì) 列中每個(gè)節(jié)點(diǎn)包含兩個(gè)元素,分別為用來(lái)記錄該呼叫發(fā)起的次數(shù)和每次發(fā)起呼叫的時(shí)間;2),當(dāng)匹配到屬于灰名單中的呼叫ID時(shí),查找鏈表,如果該呼叫ID不存在,就在已 經(jīng)建立的鏈表中添加一個(gè)新節(jié)點(diǎn),將該呼叫ID加入到該節(jié)點(diǎn)的對(duì)應(yīng)結(jié)構(gòu)體中,同時(shí)為該呼 叫建立一個(gè)環(huán)形隊(duì)列,并將環(huán)形隊(duì)列指針加入鏈表節(jié)點(diǎn)的對(duì)應(yīng)位置;如果該呼叫ID已經(jīng)存在,則取環(huán)形隊(duì)列指針找到對(duì)應(yīng)環(huán)形隊(duì)列,將呼叫次數(shù)加一 后把該呼叫的呼叫次數(shù)及本次呼叫時(shí)間加入到環(huán)形隊(duì)列中;3)、狀態(tài)機(jī)始終在執(zhí)行操作遍歷鏈表中的節(jié)點(diǎn),取節(jié)點(diǎn)元素結(jié)構(gòu)體中的環(huán)形隊(duì)列 指針,找到對(duì)應(yīng)環(huán)形隊(duì)列,實(shí)施對(duì)鏈表中每個(gè)呼叫的環(huán)形隊(duì)列的監(jiān)測(cè)。當(dāng)某個(gè)ID的呼叫次 數(shù)在一定時(shí)間內(nèi)達(dá)到門限值時(shí)就判斷該ID發(fā)起的呼叫為異常呼叫,將狀態(tài)更新為DROP,否 則為正常呼叫,將狀態(tài)更新為GO。參照?qǐng)D5,在本實(shí)施例中,環(huán)形隊(duì)列的最大長(zhǎng)度減1作為一個(gè)門限值,即觸發(fā)呼叫 狀態(tài)轉(zhuǎn)變的閥值,圖中閥值為7。隊(duì)列中每個(gè)節(jié)點(diǎn)是包含兩個(gè)元素的結(jié)構(gòu)體,分別為用來(lái) 記錄該呼叫發(fā)起的次數(shù)和每次發(fā)起呼叫的時(shí)間。建立環(huán)形隊(duì)列后第一個(gè)節(jié)點(diǎn)為front = rear,當(dāng)有屬于灰名單內(nèi)的呼叫到來(lái)后,rear向后移動(dòng)一個(gè)節(jié)點(diǎn)位置,同時(shí)為節(jié)點(diǎn)賦值,呼 叫次數(shù)記為1,時(shí)間是本次呼叫到達(dá)的時(shí)間戳,以后每次有相同的呼叫源發(fā)起呼叫時(shí),就找 對(duì)應(yīng)環(huán)形隊(duì)列將呼叫次數(shù)加1賦給隊(duì)列新節(jié)點(diǎn)。結(jié)構(gòu)體定義如下所示struct CQ_arrival{int rec ;struct timeval time ;};參照?qǐng)D6,在本實(shí)施例中,提出了一種灰名單狀態(tài)處理方法,實(shí)現(xiàn)過(guò)程如下步驟所 示dl 給屬于灰名單內(nèi)的呼叫ID建立一張鏈表,鏈表中每個(gè)節(jié)點(diǎn)kn-1、kn、kn+1是 一個(gè)包含兩個(gè)元素的結(jié)構(gòu)體,兩元素分別為標(biāo)示呼叫的ID和指向環(huán)形隊(duì)列的指針,參照?qǐng)D 7,結(jié)構(gòu)體定義如下所示,struct Que_marked{
char*CallID ;// 呼叫 IDCirQueue^CirQ ;// 環(huán)形隊(duì)列的指針};d2 當(dāng)匹配到有屬于灰名單內(nèi)的呼叫到來(lái)時(shí),執(zhí)行步驟d3 ;d3 查看鏈表中是否已經(jīng)存在該呼叫ID,如果不存在,則執(zhí)行步驟d4 ;如果存在, 則執(zhí)行步驟d5 ;d4 給鏈表加入一個(gè)新節(jié)點(diǎn),同時(shí)為該呼叫建立一個(gè)環(huán)形隊(duì)列,將該呼叫ID和環(huán) 形隊(duì)列指針的兩元素結(jié)構(gòu)體加入節(jié)點(diǎn),然后執(zhí)行步驟d6 ;d5 取鏈表節(jié)點(diǎn)元素,找到該呼叫ID對(duì)應(yīng)的環(huán)形隊(duì)列,然后執(zhí)行步驟d6 ;d6 將該呼叫ID發(fā)起的呼叫次數(shù)和發(fā)起本次呼叫的時(shí)間加入到環(huán)形隊(duì)列的節(jié)點(diǎn) 中,實(shí)現(xiàn)隊(duì)列節(jié)點(diǎn)的更新操作;d7 狀態(tài)機(jī)始終在執(zhí)行步驟d8的操作;d8 遍歷鏈表的各個(gè)節(jié)點(diǎn),取出節(jié)點(diǎn)元素得到環(huán)形隊(duì)列的指針,然后轉(zhuǎn)至步驟d9 ;d9:判斷鏈表中呼叫的環(huán)形隊(duì)列是否有閥值觸發(fā),如果在給定時(shí)間內(nèi)存在環(huán)形隊(duì) 列閥值觸發(fā),則執(zhí)行步驟dlO ;如果在給定時(shí)間段內(nèi)環(huán)形隊(duì)列并沒(méi)有觸發(fā)閥值,執(zhí)行步驟 dll ;dlO 將該隊(duì)列對(duì)應(yīng)的呼叫視為異常呼叫,修改該呼叫ID在灰名單內(nèi)的狀態(tài)為 DROP,執(zhí)行步驟dl2。dll 將該隊(duì)列對(duì)應(yīng)的呼叫視為正常呼叫,修改該呼叫ID在灰名單內(nèi)的狀態(tài)為 GO ;dl2 實(shí)施阻斷處理,終止呼叫,釋放系統(tǒng)資源。在本實(shí)施例中,灰名單內(nèi)匹配的呼叫ID將隨著狀態(tài)機(jī)的執(zhí)行做出狀態(tài)轉(zhuǎn)換。狀態(tài) 機(jī)執(zhí)行循環(huán)遍歷灰名單鏈表,依次查看鏈表中每個(gè)呼叫ID對(duì)應(yīng)的環(huán)形隊(duì)列的閥值是否觸 發(fā),如果觸發(fā),則到灰名單內(nèi)找到本呼叫ID,將其狀態(tài)轉(zhuǎn)換為DROP,然后將該呼叫在鏈表中 的節(jié)點(diǎn)刪除,同時(shí)刪除該呼叫對(duì)應(yīng)的環(huán)形隊(duì)列,以釋放資源;如果給定時(shí)間還沒(méi)有觸發(fā)并且 閥值也沒(méi)有觸發(fā),則將移至下一個(gè)鏈表節(jié)點(diǎn),繼續(xù)狀態(tài)處理;如果給定時(shí)間觸發(fā),但是閥值 并沒(méi)有觸發(fā),則判斷該呼叫為正常呼叫,則到灰名單內(nèi)找到本呼叫ID,將其狀態(tài)轉(zhuǎn)換為G0, 然后將該呼叫在鏈表中的節(jié)點(diǎn)刪除,同時(shí)刪除該呼叫對(duì)應(yīng)的環(huán)形隊(duì)列,以釋放資源。盡管上面對(duì)本發(fā)明說(shuō)明性的具體實(shí)施方式
進(jìn)行了描述,以便于本技術(shù)領(lǐng)的技術(shù)人 員理解本發(fā)明,但應(yīng)該清楚,本發(fā)明不限于具體實(shí)施方式
的范圍,對(duì)本技術(shù)領(lǐng)域的普通技術(shù) 人員來(lái)講,只要各種變化在所附的權(quán)利要求限定和確定的本發(fā)明的精神和范圍內(nèi),這些變 化是顯而易見(jiàn)的,一切利用本發(fā)明構(gòu)思的發(fā)明創(chuàng)造均在保護(hù)之列。
權(quán)利要求
一種基于多名單的異常呼叫過(guò)濾方法,其特征在于,包括以下步驟(1)、在獲取信令消息中,首先捕獲鏈路中傳輸?shù)臄?shù)據(jù)包,轉(zhuǎn)發(fā)除信令信息以外的所有數(shù)據(jù)包,然后解析信令消息,提取呼叫ID;(2)、將呼叫ID與白名單中的ID進(jìn)行匹配,如果該呼叫ID與白名單內(nèi)的某一ID匹配,則認(rèn)為該呼叫是合法呼叫,為該呼叫建立正常的連接,實(shí)現(xiàn)正常呼叫行為,否則,進(jìn)行下一步;白名單為注冊(cè)或經(jīng)檢測(cè)確認(rèn)為合法用戶的呼叫ID組成的表單;(3)、將呼叫ID與灰名單中的ID進(jìn)行匹配,如果該呼叫ID與灰名單內(nèi)的某一ID匹配a、如果灰名單中匹配的ID的狀態(tài)為NULL,則先為該呼叫建立正常的連接,然后進(jìn)行灰名單的狀態(tài)處理該呼叫ID的呼叫次數(shù)在一定時(shí)間內(nèi)是否達(dá)到門限值,如果達(dá)到,則判斷該呼叫ID發(fā)起的呼叫為異常呼叫,將狀態(tài)更新為DROP,終止呼叫,否則為正常呼叫,將狀態(tài)更新為GO;b、如果灰名單中匹配的ID的狀態(tài)為DROP,則終止呼叫,如果是GO則建立正常的呼叫連接;如果該呼叫ID與灰名單內(nèi)的ID均不匹配,則下一步;灰名單為經(jīng)過(guò)檢測(cè)系統(tǒng)初步檢測(cè)但并沒(méi)有確定是否為異常呼叫的呼叫ID組成的表單,包括呼叫ID和該呼叫ID的狀態(tài);呼叫ID的狀態(tài)初始化為NULL,經(jīng)過(guò)狀態(tài)處理后更新為DROP或GO,其中NULL表示空、DROP表示丟棄、GO表示放行;(4)、將呼叫ID與黑單中的ID進(jìn)行匹配,如果屬于黑名單內(nèi)的ID,則認(rèn)為該呼叫為非法呼叫,終止呼叫,及時(shí)釋放本次呼叫所占用的資源,否則認(rèn)為是正常呼叫,建立正常的呼叫連接;黑名單為經(jīng)過(guò)檢測(cè)系統(tǒng)檢測(cè)確定為異常呼叫的呼叫ID組成的表單。
2.根據(jù)權(quán)利要求1所述的基于多名單的異常呼叫過(guò)濾方法,其特征在于,所述的匹配為1)、將名單中的ID映射成樹(shù)bl 確定hash映射的范圍,即數(shù)組a的大??;b2 名單中的ID執(zhí)行第一次hash運(yùn)算,Ii1 = hash! (ID),查看標(biāo)示樹(shù)位置的數(shù)組a,取鍵 值對(duì)應(yīng)數(shù)組元素a[kj,看是否為空,如果空,則執(zhí)行步驟b3 ;如果不為空,則執(zhí)行步驟b4 ; b3 為該鍵值建立一棵新樹(shù),同時(shí)把樹(shù)的位置指針賦值給a[kl],執(zhí)行步驟b4 ; b4 執(zhí)行第二次hash運(yùn)算,k2 = hash2 (ID),查找樹(shù)根節(jié)點(diǎn)的子節(jié)點(diǎn)是否存在k2,如果 不存在,則執(zhí)行步驟b5 ;若存在,則執(zhí)行步驟b6 ; b5 為該樹(shù)建立新的葉節(jié)點(diǎn),執(zhí)行步驟b6 ;b6 繼續(xù)下一次hash運(yùn)算,以后每次hash運(yùn)算之后都要以上一次hash值節(jié)點(diǎn)為父節(jié) 點(diǎn)查找其子節(jié)點(diǎn)是否存在該鍵值,不存在,則執(zhí)行步驟b5 ;存在,則執(zhí)行步驟b6,直到最后 的h次,hash運(yùn)算結(jié)束;b7 在最后的h次hash運(yùn)算后,kh = haShh(ID)后,查找第二個(gè)數(shù)組對(duì)應(yīng)鍵值元素是否 為空,若空,執(zhí)行步驟b8 ;否則,執(zhí)行步驟b9 ;b8 為ID建立一個(gè)鏈表,將鏈表指針賦值給第二個(gè)數(shù)組元素b[kh],同時(shí)將ID拷貝給鏈 表的第一個(gè)節(jié)點(diǎn);b9 取數(shù)組元素b[kh],找到鏈表,將ID拷貝到對(duì)應(yīng)的鏈表中去。2)、名單匹配cl 將 Call_ID 執(zhí)行第一次 hash 運(yùn)算,gl = Iiash1 (Call_ID) ;Call_ID 表示呼叫 ID ; c2 取a[gl]的值,判斷該元素是否為空,如果為空,則執(zhí)行步驟c3 ;否則,執(zhí)行步驟c4;c3 本次呼叫源ID不在名單內(nèi),結(jié)束查找;c4 找到樹(shù)結(jié)構(gòu)位置,進(jìn)行第二次hash運(yùn)算& = hash2(Call_ID),查找樹(shù)的第二層子 節(jié)點(diǎn)是否存在該值,如果不存在,則執(zhí)行步驟c3 ;否則執(zhí)行步驟c5 ;c5 進(jìn)行下一次hash運(yùn)算gi = hash, (Call_ID),查找下一層i子節(jié)點(diǎn)是否存在該值, 如果不存在,則執(zhí)行步驟c3 ;否則重復(fù)執(zhí)行步驟c5,直到h次hash結(jié)束;c6 如果本次呼叫ID進(jìn)行完所有hash運(yùn)算之后對(duì)應(yīng)樹(shù)的一條自根節(jié)點(diǎn)到最下層葉節(jié) 點(diǎn)的路徑,則該呼叫ID有可能在名單內(nèi),要進(jìn)行精確匹配以做出最終判斷,找到第二個(gè)數(shù) 組b中最后一次hash之后的鍵值的數(shù)組元素b[kh],取出鏈表指針;c7 執(zhí)行呼叫ID與鏈表元素的逐一比較,如果存在相同的字符串,則執(zhí)行步驟c8 ;如果 呼叫ID與鏈表中所有元素都不相同,則執(zhí)行步驟c3 ; c8 停止查找,呼叫ID在名單內(nèi)。
3.根據(jù)權(quán)利要求1所述的基于多名單的異常呼叫過(guò)濾方法,其特征在于,所述的狀態(tài) 處理為1)、首先給灰名單中的呼叫ID建立一張鏈表,鏈表中每個(gè)節(jié)點(diǎn)是一個(gè)包含兩個(gè)元素的 結(jié)構(gòu)體,兩元素分別為標(biāo)示呼叫的ID和指向環(huán)形隊(duì)列的指針;環(huán)形隊(duì)列的最大長(zhǎng)度看作是一個(gè)觸發(fā)門限值,作為發(fā)起呼叫次數(shù)的閥值,環(huán)形隊(duì)列中 每個(gè)節(jié)點(diǎn)包含兩個(gè)元素,分別為用來(lái)記錄該呼叫發(fā)起的次數(shù)和每次發(fā)起呼叫的時(shí)間;2),當(dāng)匹配到屬于灰名單中的呼叫ID時(shí),查找鏈表,如果該呼叫ID不存在,就在已經(jīng)建 立的鏈表中添加一個(gè)新節(jié)點(diǎn),將該呼叫ID加入到該節(jié)點(diǎn)的對(duì)應(yīng)結(jié)構(gòu)體中,同時(shí)為該呼叫建 立一個(gè)環(huán)形隊(duì)列,并將環(huán)形隊(duì)列指針加入鏈表節(jié)點(diǎn)的對(duì)應(yīng)位置;如果該呼叫ID已經(jīng)存在,則取環(huán)形隊(duì)列指針找到對(duì)應(yīng)環(huán)形隊(duì)列,將呼叫次數(shù)加一后把 該呼叫的呼叫次數(shù)及本次呼叫時(shí)間加入到環(huán)形隊(duì)列中;3)、狀態(tài)機(jī)始終在執(zhí)行操作遍歷鏈表中的節(jié)點(diǎn),取節(jié)點(diǎn)元素結(jié)構(gòu)體中的環(huán)形隊(duì)列指 針,找到對(duì)應(yīng)環(huán)形隊(duì)列,實(shí)施對(duì)鏈表中每個(gè)呼叫的環(huán)形隊(duì)列的監(jiān)測(cè)當(dāng)某個(gè)ID的呼叫次數(shù) 在一定時(shí)間內(nèi)達(dá)到門限值時(shí)就判斷該ID發(fā)起的呼叫為異常呼叫,將狀態(tài)更新為DROP,否則 為正常呼叫,將狀態(tài)更新為GO。
4.根據(jù)權(quán)利要求3所述的基于多名單的異常呼叫過(guò)濾方法,其特征在于,當(dāng)所述的狀 態(tài)更新為DROP后,將該呼叫在鏈表中的節(jié)點(diǎn)刪除,同時(shí)刪除該呼叫對(duì)應(yīng)的環(huán)形隊(duì)列,以釋 放資源;當(dāng)所述的狀態(tài)更新為GO后,將該呼叫在鏈表中的節(jié)點(diǎn)刪除,同時(shí)刪除該呼叫對(duì)應(yīng)的環(huán) 形隊(duì)列,以釋放資源。全文摘要
本發(fā)明公開(kāi)了一種基于多名單的異常呼叫過(guò)濾方法,采用基于白名單、灰名單以及黑名單的多名單匹配過(guò)濾,能夠及時(shí)中斷異常呼叫,并快速為合法用戶,即正常呼叫建立連接。此外,本發(fā)明還采用灰名單狀態(tài)處理機(jī)制,實(shí)現(xiàn)灰名單內(nèi)狀態(tài)的自動(dòng)更新。同時(shí),基于多名單的匹配過(guò)濾與檢測(cè)過(guò)程是并行執(zhí)行的,能夠?qū)崿F(xiàn)異常呼叫的在線過(guò)濾,及時(shí)發(fā)現(xiàn)異常并終止連接,使被叫用戶免遭騷擾。
文檔編號(hào)H04M1/66GK101938583SQ20101027239
公開(kāi)日2011年1月5日 申請(qǐng)日期2010年9月3日 優(yōu)先權(quán)日2010年9月3日
發(fā)明者孫健, 王春厚, 董青, 許都, 隆克平 申請(qǐng)人:電子科技大學(xué)