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