Linux系統(tǒng)中網(wǎng)絡(luò)協(xié)議棧管理方法及系統(tǒng)的制作方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及Linux系統(tǒng)
技術(shù)領(lǐng)域:
,特別是涉及Linux系統(tǒng)中網(wǎng)絡(luò)協(xié)議棧管理方法及系統(tǒng)。【
背景技術(shù):
】[0002]基于Linux操作系統(tǒng)平臺(tái)的網(wǎng)絡(luò)協(xié)議棧的處理流中注冊(cè)有多個(gè)鉤子節(jié)點(diǎn)(Hook),用于對(duì)網(wǎng)絡(luò)數(shù)據(jù)報(bào)文進(jìn)行相應(yīng)的處理操作,這些實(shí)現(xiàn)的基礎(chǔ)是通過使用現(xiàn)有netfilter/iptables系統(tǒng)提供的特殊命令iptables,建立這些規(guī)則,并將規(guī)則加到內(nèi)核空間內(nèi)特定信息包的過濾表內(nèi)的鏈上,例如,$iptables[~ttable]command[match][target],命令格式由表、命令、匹配和目標(biāo)組成。[0003]Netfilter中共定義有IINPUT,PREROUTING,FORWARD,OUTPUT,P0STR0UTING五個(gè)鉤子節(jié)點(diǎn)(Η00Κ),當(dāng)物理網(wǎng)絡(luò)上有數(shù)據(jù)到來時(shí),ip_rcV()函數(shù)會(huì)接收到,該函數(shù)在最后調(diào)用NFJTO0K將控制權(quán)交給netfilter在PRER0UTING點(diǎn)的處理規(guī)則處理。如果該網(wǎng)絡(luò)數(shù)據(jù)是發(fā)給本地的,就會(huì)調(diào)用ip_local_deliverO函數(shù),由netfilter的INPUT處理規(guī)則處理,INPUT處理完以后交給傳輸層,傳給應(yīng)用層中的用戶進(jìn)程。如果此數(shù)據(jù)是轉(zhuǎn)發(fā),會(huì)調(diào)用ip_rcv_finish()函數(shù),查詢路由表,調(diào)用ip_route_inputO函數(shù)將控制權(quán)交給ip_forwardO,由netfilter的FORWARD處理規(guī)則處理,ip_send()函數(shù)將數(shù)據(jù)發(fā)送,在發(fā)出此數(shù)據(jù)之前會(huì)通過NFJTO0K函數(shù)宏,由netfilter的P0STR0UTING處理規(guī)則處理。如果本地機(jī)器要發(fā)送網(wǎng)絡(luò)數(shù)據(jù)時(shí),netfilter會(huì)在將數(shù)據(jù)交給規(guī)則P0STR0UTING處理之前,由處理規(guī)則OUTPUT先進(jìn)行處理;而這些規(guī)則都是通過iptables命令行配置下發(fā),對(duì)于不熟悉這些規(guī)則的人員來說很復(fù)雜。[0004]現(xiàn)有的用于對(duì)Linux網(wǎng)絡(luò)協(xié)議棧各鉤子注冊(cè)點(diǎn)規(guī)則的用戶操作都是以命令行的方式,在需要向網(wǎng)絡(luò)協(xié)議棧的鉤子節(jié)點(diǎn)處添加或刪除規(guī)則等操作時(shí),需要對(duì)網(wǎng)絡(luò)協(xié)議棧對(duì)數(shù)據(jù)包的處理流程有清晰的了解,并且需要對(duì)用戶層的操作方式有清晰的了解,掌握各種參數(shù)以及操作方式,這使得對(duì)網(wǎng)絡(luò)協(xié)議棧鉤子節(jié)點(diǎn)處的規(guī)則注冊(cè)、去注冊(cè)過程變得困難。[0005]因此,需要提供一種簡(jiǎn)易有效地的操作方式,從而快速實(shí)現(xiàn)相關(guān)功能,提高產(chǎn)品開發(fā)的進(jìn)度及質(zhì)量?!?br/>發(fā)明內(nèi)容】[0006]鑒于以上所述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供Linux系統(tǒng)中網(wǎng)絡(luò)協(xié)議棧管理方法及系統(tǒng),將網(wǎng)絡(luò)協(xié)議棧內(nèi)規(guī)則處理數(shù)據(jù)包的信息通過可視化的交互界面顯示,使信息監(jiān)控更加簡(jiǎn)單直觀,且更便于對(duì)鉤子節(jié)點(diǎn)即規(guī)則的操作。[0007]為實(shí)現(xiàn)上述目標(biāo)及其他相關(guān)目標(biāo),本發(fā)明提供一種Linux系統(tǒng)中網(wǎng)絡(luò)協(xié)議棧管理方法,包括:建立Linux系統(tǒng)中用戶空間同內(nèi)核空間的通信通道,所述網(wǎng)絡(luò)協(xié)議棧在所述內(nèi)核空間內(nèi),所述網(wǎng)絡(luò)協(xié)議棧內(nèi)注冊(cè)有多個(gè)鉤子節(jié)點(diǎn),所述通信通道用于提供各鉤子節(jié)點(diǎn)的網(wǎng)絡(luò)數(shù)據(jù)流信息、及傳輸對(duì)應(yīng)各鉤子節(jié)點(diǎn)的操作信息;監(jiān)控各鉤子節(jié)點(diǎn)的網(wǎng)絡(luò)數(shù)據(jù)流情況;將通過所述監(jiān)控獲取的網(wǎng)絡(luò)數(shù)據(jù)流信息傳輸至用戶空間并通過交互界面顯示,并根據(jù)用戶在所述交互界面的輸入來生成所述操作信息并通過所述通信通道向內(nèi)核空間傳輸。[0008]可選的,所述通信通道是通過:在內(nèi)核空間創(chuàng)建socket通信結(jié)構(gòu)體并在用戶空間使用對(duì)應(yīng)的socket接口來建立的。[0009]可選的,所述socket通信結(jié)構(gòu)體是通過netlink_kernel_createO函數(shù)創(chuàng)建的。[0010]可選的,所述交互界面通過curses庫(kù)構(gòu)建。[0011]可選的,所述鉤子節(jié)點(diǎn)包括:網(wǎng)絡(luò)協(xié)議棧內(nèi)netfilter結(jié)構(gòu)中的IINPUT、PREROUTING,FORWARD、OUTPUT及POSTROUTING。[0012]為實(shí)現(xiàn)上述目標(biāo)及其他相關(guān)目標(biāo),本發(fā)明提供一種Linux系統(tǒng)中網(wǎng)絡(luò)協(xié)議棧管理系統(tǒng),包括:交互模塊,用于建立Linux系統(tǒng)中用戶空間同內(nèi)核空間的通信通道,所述網(wǎng)絡(luò)協(xié)議棧在所述內(nèi)核空間內(nèi),所述網(wǎng)絡(luò)協(xié)議棧內(nèi)注冊(cè)有多個(gè)鉤子節(jié)點(diǎn),所述通信通道用于提供各鉤子節(jié)點(diǎn)的網(wǎng)絡(luò)數(shù)據(jù)流信息、及傳輸對(duì)應(yīng)各鉤子節(jié)點(diǎn)的操作信息;監(jiān)控模塊,用于監(jiān)控各鉤子節(jié)點(diǎn)的網(wǎng)絡(luò)數(shù)據(jù)流情況;顯示模塊,用于將通過所述監(jiān)控獲取的網(wǎng)絡(luò)數(shù)據(jù)流信息傳輸至用戶空間并通過交互界面顯示;操作模塊,用于根據(jù)用戶在所述交互界面的輸入來生成所述操作信息并通過所述通信通道向內(nèi)核空間傳輸。[0013]可選的,所述通信通道是通過:在內(nèi)核空間創(chuàng)建socket通信結(jié)構(gòu)體并在用戶空間使用對(duì)應(yīng)的socket接口來建立的。[0014]可選的,所述socket通信結(jié)構(gòu)體是通過netlink_kernel_createO函數(shù)創(chuàng)建的。[0015]可選的,所述交互界面通過curses庫(kù)構(gòu)建。[0016]可選的,所述鉤子節(jié)點(diǎn)包括:網(wǎng)絡(luò)協(xié)議棧內(nèi)netfiIter結(jié)構(gòu)中的IINPUT、PREROUTING,FORWARD、OUTPUT及POSTROUTING。[0017]如上所述,本發(fā)明提供Linux系統(tǒng)中網(wǎng)絡(luò)協(xié)議棧管理方法及系統(tǒng),建立Linux系統(tǒng)中用戶空間同內(nèi)核空間的通信通道,所述網(wǎng)絡(luò)協(xié)議棧在所述內(nèi)核空間內(nèi),所述網(wǎng)絡(luò)協(xié)議棧內(nèi)注冊(cè)有多個(gè)鉤子節(jié)點(diǎn),所述通信通道用于提供各鉤子節(jié)點(diǎn)的網(wǎng)絡(luò)數(shù)據(jù)流信息、及傳輸對(duì)應(yīng)各鉤子節(jié)點(diǎn)的操作信息;監(jiān)控各鉤子節(jié)點(diǎn)的網(wǎng)絡(luò)數(shù)據(jù)流情況;將通過所述監(jiān)控獲取的網(wǎng)絡(luò)數(shù)據(jù)流信息傳輸至用戶空間并通過交互界面顯示;根據(jù)用戶在所述交互界面的輸入來生成所述操作信息并通過所述通信通道向內(nèi)核空間傳輸;本發(fā)明實(shí)現(xiàn)數(shù)據(jù)報(bào)文在Linux網(wǎng)絡(luò)協(xié)議棧中流經(jīng)過程的可視化顯示,可以清楚的了解數(shù)據(jù)包流過協(xié)議棧時(shí)的處理過程,通過可視化的操作方式在網(wǎng)絡(luò)協(xié)議棧的某些節(jié)點(diǎn)上添加、刪除或編輯規(guī)則,以達(dá)到過濾數(shù)據(jù)包的目的?!靖綀D說明】[0018]圖1顯示為本發(fā)明一實(shí)施例中的Linux系統(tǒng)中網(wǎng)絡(luò)協(xié)議棧管理方法的流程示意圖。[0019]圖2顯示為本發(fā)明一實(shí)施例中的Linux系統(tǒng)中網(wǎng)絡(luò)協(xié)議棧管理方法具體實(shí)現(xiàn)的軟件架構(gòu)示意圖。[0020]圖3顯示為本發(fā)明一實(shí)施例中的Linux系統(tǒng)中網(wǎng)絡(luò)協(xié)議棧管理系統(tǒng)的結(jié)構(gòu)示意圖。[0021]元件標(biāo)號(hào)說明[0022]I網(wǎng)絡(luò)協(xié)議棧管理系統(tǒng)[0023]11交互模塊[0024]12監(jiān)控模塊[0025]13顯示模塊[0026]14操作模塊[0027]SI?S3方法步驟【具體實(shí)施方式】[0028]以下通過特定的具體實(shí)例說明本發(fā)明的實(shí)施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點(diǎn)與功效。本發(fā)明還可以通過另外不同的【具體實(shí)施方式】加以實(shí)施或應(yīng)用,本說明書中的各項(xiàng)細(xì)節(jié)也可以基于不同觀點(diǎn)與應(yīng)用,在沒有背離本發(fā)明的精神下進(jìn)行各種修飾或改變。需說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。[0029]如圖1所示,本發(fā)明提供一種Linux系統(tǒng)中網(wǎng)絡(luò)協(xié)議棧管理方法,包括:[0030]步驟S1:建立Linux系統(tǒng)中用戶空間同內(nèi)核空間的通信通道,所述網(wǎng)絡(luò)協(xié)議棧在所述內(nèi)核空間內(nèi),所述網(wǎng)絡(luò)協(xié)議棧內(nèi)注冊(cè)有多個(gè)鉤子節(jié)點(diǎn),所述通信通道用于提供各鉤子節(jié)點(diǎn)的網(wǎng)絡(luò)數(shù)據(jù)流信息、及傳輸對(duì)應(yīng)各鉤子節(jié)點(diǎn)的操作信息;[0031]步驟S2:監(jiān)控各鉤子節(jié)點(diǎn)的網(wǎng)絡(luò)數(shù)據(jù)流情況;[0032]步驟S3:將通過所述監(jiān)控獲取的網(wǎng)絡(luò)數(shù)據(jù)流信息傳輸至用戶空間并通過交互界面顯示,并且根據(jù)用戶在所述交互界面的輸入來生成所述操作信息并通過所述通信通道向內(nèi)核空間傳輸。[0033]具體的,用戶在linux/netlink.h定義所述建立的通信通道所對(duì)應(yīng)的新的協(xié)議類型,內(nèi)核空間使用structsock*netlink_kernel_createO創(chuàng)建socket通信結(jié)構(gòu)體,相對(duì)應(yīng)的,用戶空間使用通用的socketAPIsGiD)來建立與內(nèi)核空間的通信通道,這個(gè)通道將用于監(jiān)控各個(gè)鉤子節(jié)點(diǎn)的網(wǎng)絡(luò)數(shù)據(jù)情況以及下發(fā)由用戶配置的操作信息。[0034]進(jìn)而,整個(gè)軟件架構(gòu)可例如圖2所示,Linux網(wǎng)絡(luò)協(xié)議棧中會(huì)有netfilter防火墻功能框架,其構(gòu)成就是在整個(gè)網(wǎng)絡(luò)流程的若干位置放置了一些檢測(cè)點(diǎn)(Η00Κ,鉤子節(jié)點(diǎn)),而在每個(gè)檢測(cè)點(diǎn)上登記了一些處理函數(shù)進(jìn)當(dāng)前第1頁(yè)1 2