




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
網(wǎng)絡(luò)數(shù)據(jù)獲取與協(xié)議分析(2)彭光輝2023/1/102課程內(nèi)容一、課程組成:1、教材:網(wǎng)絡(luò)數(shù)據(jù)獲取與協(xié)議分析(2),內(nèi)容包括Libnids數(shù)據(jù)包捕獲與協(xié)議分析2、知識(shí)架構(gòu):網(wǎng)絡(luò)應(yīng)用協(xié)議工作原理、數(shù)據(jù)包捕獲與協(xié)議分析方法3、參考書(電子書):TCP/IP協(xié)議詳解卷1、2,Wireshark使用說明文檔,Linux命令大全4、閱讀與分享:信息安全完全手冊(cè)(第2版)二、課時(shí)安排:60學(xué)時(shí),4學(xué)分,課程分6個(gè)單元,三、課程單元:Libnids概述與IDS/IPS技術(shù)、nids庫函數(shù)使用、HTTP協(xié)議分析、POP3協(xié)議分析、SMTP協(xié)議分析、FTP協(xié)議分析、Telnet協(xié)議分析四、閱讀分享課:時(shí)間:每周三,主講人:同學(xué),每人一章,一個(gè)學(xué)時(shí)五、預(yù)期成果:1、具備較寬的信息安全基礎(chǔ)知識(shí),2、具備網(wǎng)絡(luò)應(yīng)用協(xié)議分析能力六、考核方式:1、考績:45%,單元實(shí)驗(yàn)作業(yè)評(píng)價(jià)成績2、考勤:15%,實(shí)驗(yàn)室進(jìn)出打卡記錄3、考試:40%,課程結(jié)束考試教材提綱Libnids概述Libnids函數(shù)Libnids應(yīng)用第一單元計(jì)劃(IDS/IPS)1、Libnids簡(jiǎn)介2、入侵檢測(cè)系統(tǒng)與入侵防護(hù)系統(tǒng)Libnids使用范圍Libnids使用范圍Libnids(LibraryNetworkIntrusionDetectionSystem)是一個(gè)用于網(wǎng)絡(luò)入侵檢測(cè)開發(fā)的專業(yè)編程接口。它實(shí)現(xiàn)了基于網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)的基本框架,并提供了一些基本的功能。使用Libnids可以快速地構(gòu)建基于網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng),并可以在此基礎(chǔ)上進(jìn)一步擴(kuò)展開發(fā)。Libnids實(shí)現(xiàn)入侵檢測(cè)系統(tǒng)的底層功能,使開發(fā)者可以專注于高層的功能開發(fā)。Libnids是基于Libpcap和Libnet而開發(fā)的,所以它具有Libpcap和Libnet的優(yōu)點(diǎn),具有較強(qiáng)的移植性,效率高,使用簡(jiǎn)單。Libnids是仿照Linux2.O.x內(nèi)核中的TCP/IP協(xié)議部分而實(shí)現(xiàn)的,具有高可靠性,并通過了很多測(cè)試。
Libnids使用范圍Libnids的主要功能包括捕獲網(wǎng)絡(luò)數(shù)據(jù)包、IP碎片重組、TCP數(shù)據(jù)流重組以及端口掃描攻擊檢測(cè)和異常數(shù)據(jù)包檢測(cè)等。IP碎片重組是Libnids的一個(gè)重要內(nèi)容,它是仿照Linux內(nèi)核中的IP重組而實(shí)現(xiàn)的,所以非常可靠。Libnids提供了TCP數(shù)據(jù)流重組功能,這是Libpcap所不具備的,利用TCP數(shù)據(jù)流重組,可以分析基于TCP協(xié)議的各種應(yīng)用層協(xié)議。另外,Libnids還提供了檢測(cè)TCP端口掃描攻擊的功能,檢測(cè)異常數(shù)據(jù)包的功能,這是入侵榆測(cè)系統(tǒng)(IDS)最基本韻功能。Libnids使用范圍Libndis使用了Libpcap,所以它具有捕獲數(shù)據(jù)包的功能,利用Libnids可以輕松地實(shí)現(xiàn)對(duì)數(shù)據(jù)包的捕獲,并對(duì)其進(jìn)行分析。同時(shí),Libnids提供了TCP數(shù)據(jù)流重組功能,所以對(duì)于分析基于TCP協(xié)議的各種協(xié)議Libnids都能夠勝任。Libnids還提供了對(duì)IP分片進(jìn)行重組的功能,以及端口掃描檢測(cè)和異常數(shù)據(jù)包檢測(cè)功能,所以它對(duì)于分析網(wǎng)絡(luò)異常情況也是非常有效的??偨Y(jié)起來,Libnids可以用在以下幾個(gè)方面,但并不局限于此。Libnids使用范圍入侵檢測(cè)系統(tǒng)
Libnids提供了據(jù)包捕獲、協(xié)議分析接口,TCP數(shù)據(jù)流重組,IP碎片重組功能,對(duì)異常數(shù)據(jù)包的檢測(cè),TCP端口掃描的檢測(cè)等功能。最重要的是,Libnids為入侵檢測(cè)系統(tǒng)更深入的開發(fā)提供了開發(fā)接口。因此,開發(fā)人員可以更關(guān)注于對(duì)入侵檢測(cè)技術(shù)的研究,而不用考慮底層的實(shí)現(xiàn)細(xì)節(jié)。Libnids使用范圍網(wǎng)絡(luò)協(xié)分析Libnids是在Libpcap基礎(chǔ)上升發(fā)的,所以它具備了Libpcap的功能,可以實(shí)現(xiàn)各種協(xié)議的分析,并在Libpcap的基礎(chǔ)上開發(fā)了更多有用的功能,如TCP數(shù)據(jù)流重組。這樣,在利用Libnids分析基于TCP協(xié)議的各種協(xié)議時(shí),不僅可以分析各種單個(gè)TCP數(shù)據(jù)包,而且可以分析整個(gè)TCP連接過程。這對(duì)于分析FTP協(xié)議、HTTP協(xié)議、POP3協(xié)議等基于TCP的應(yīng)用層協(xié)議足非常有幫助的。Libnids使用范圍網(wǎng)絡(luò)嗅探系統(tǒng)網(wǎng)絡(luò)嗅探也稱網(wǎng)絡(luò)監(jiān)視,主要是指檢測(cè)網(wǎng)絡(luò)信息,查看網(wǎng)絡(luò)內(nèi)容。針對(duì)不同的目的,有各種各樣的網(wǎng)絡(luò)嗅探。例如,對(duì)于網(wǎng)絡(luò)管理員來說,為了掌握整個(gè)網(wǎng)絡(luò)的運(yùn)行狀況,想檢測(cè)網(wǎng)絡(luò)出現(xiàn)的故障,他可以利用網(wǎng)絡(luò)嗅探技術(shù)來實(shí)現(xiàn)。對(duì)于網(wǎng)絡(luò)非法攻擊者來說,為了獲得敏感信息,他也可以利用網(wǎng)路嗅探技術(shù)捕獲他所需的內(nèi)容,如密碼、用戶、賬號(hào)等。利用Libnids可以輕松獲取很多協(xié)議傳輸?shù)挠脩艉兔艽a。所以說,Libnids是一把雙刃劍。除此之外.利用Libnids還可以重現(xiàn)網(wǎng)絡(luò)內(nèi)容,還原網(wǎng)絡(luò)數(shù)據(jù),如重現(xiàn)HTTP協(xié)議中傳輸?shù)木W(wǎng)頁、POP3協(xié)議中傳輸?shù)碾娮余]件等。入侵檢測(cè)系統(tǒng)(IDS)與入侵防護(hù)系統(tǒng)(IPS)每一個(gè)網(wǎng)絡(luò)安全的實(shí)現(xiàn)都是基于某種明確申明或者假設(shè)的模型。例如,組織使用防火墻作為他們的主要防御手段是基于外圍安全模型,而組織采用集中不同的安全機(jī)制是在實(shí)踐分層防御模型,任何安全設(shè)計(jì)都包括假設(shè)什么是可信的,什么是不可信的,誰能去哪里,明確的定義什么是完全可信的、什么是部分可信的、什么是不可信的,以及了解正在使用哪個(gè)防御模型,可以讓安全基礎(chǔ)設(shè)施更加有效和更好地融入環(huán)境實(shí)行保護(hù)。網(wǎng)絡(luò)安全解決方案現(xiàn)代化的網(wǎng)絡(luò)系統(tǒng),在采用傳統(tǒng)的靜態(tài)(如防火墻、加密和認(rèn)證等)的安全防護(hù)體系的手段的同時(shí),需要結(jié)合具有現(xiàn)代化的先進(jìn)的網(wǎng)絡(luò)安全實(shí)時(shí)檢測(cè)和監(jiān)控、網(wǎng)絡(luò)安全評(píng)估、安全漏洞掃描技術(shù)和工具,并制訂嚴(yán)格完善的安全管理制度,才能構(gòu)成一個(gè)現(xiàn)代化的動(dòng)態(tài)網(wǎng)絡(luò)安全系統(tǒng),保證信息系統(tǒng)機(jī)密性、完整性和可用性(CIA)。網(wǎng)絡(luò)安全解決方案信息安全三原則:在信息安全等級(jí)保護(hù)工作中,根據(jù)信息系統(tǒng)的機(jī)密性(Confidentiality)、完整性(Integrality)、可用性(Availability)來劃分信息系統(tǒng)的安全等級(jí),三個(gè)性質(zhì)簡(jiǎn)稱CIA。機(jī)密性:只有授權(quán)用戶可以獲取信息。完整性:保證信息傳輸?shù)倪^程中,不被非法修改和破壞??捎眯裕汉戏ㄓ脩魧?duì)信息資源的使用不會(huì)被不正當(dāng)?shù)鼐芙^。網(wǎng)絡(luò)戰(zhàn):收集信息,阻斷攻擊,摧毀敵手網(wǎng)絡(luò)。美國中央情報(bào)局:CIA(CentralIntelligenceAgency),主要職責(zé):收集情報(bào)
暗殺顛覆敵對(duì)政權(quán)。信息安全三原則:CIA網(wǎng)絡(luò)安全解決方案網(wǎng)絡(luò)安全工具的特點(diǎn)優(yōu)點(diǎn)局限性防火墻可簡(jiǎn)化網(wǎng)絡(luò)管理,產(chǎn)品成熟無法處理網(wǎng)絡(luò)內(nèi)部的攻擊IDS/IPS實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)安全狀態(tài)誤警率高,緩慢攻擊,新的攻擊模式Scanner完全主動(dòng)式安全工具,能夠了解網(wǎng)絡(luò)現(xiàn)有的安全水平,簡(jiǎn)單可操作,幫助系統(tǒng)管理員和安全服務(wù)人員解決實(shí)際問題,并不能真正了解網(wǎng)絡(luò)上即時(shí)發(fā)生的攻擊VPN保護(hù)公網(wǎng)上的內(nèi)部通信可視為防火墻上的一個(gè)漏洞防病毒針對(duì)文件與郵件,產(chǎn)品成熟功能單一IDS是英文“IntrusionDetectionSystems”的縮寫,中文意思是“入侵檢測(cè)系統(tǒng)”。系統(tǒng)依照一定的安全策略,對(duì)網(wǎng)絡(luò)、系統(tǒng)的運(yùn)行狀況進(jìn)行監(jiān)視,盡可能發(fā)現(xiàn)各種攻擊企圖、攻擊行為或者攻擊結(jié)果,以保證網(wǎng)絡(luò)系統(tǒng)資源的機(jī)密性、完整性和可用性。入侵檢測(cè)系統(tǒng)我們做一個(gè)形象的比喻:假如防火墻是一幢大樓的門鎖,那么IDS就是這幢大樓里的監(jiān)視系統(tǒng)。一旦小偷爬窗進(jìn)入大樓,或內(nèi)部人員有越界行為,只有實(shí)時(shí)監(jiān)視系統(tǒng)才能發(fā)現(xiàn)情況并發(fā)出警告。入侵檢測(cè)系統(tǒng)不同于防火墻,IDS入侵檢測(cè)系統(tǒng)是一個(gè)監(jiān)聽設(shè)備,沒有跨接在任何鏈路上,無須網(wǎng)絡(luò)流量流經(jīng)它便可以工作。因此,對(duì)IDS的部署,唯一的要求是:IDS應(yīng)當(dāng)掛接在所有所關(guān)注流量都必須流經(jīng)的鏈路上。在這里,"所關(guān)注流量"指的是來自高危網(wǎng)絡(luò)區(qū)域的訪問流量和需要進(jìn)行統(tǒng)計(jì)、監(jiān)視的網(wǎng)絡(luò)報(bào)文。入侵檢測(cè)系統(tǒng)通用入侵檢測(cè)系統(tǒng)模型通用入侵檢測(cè)模型數(shù)據(jù)收集器(又可稱為探測(cè)器):主要負(fù)責(zé)收集數(shù)據(jù)。探測(cè)器的輸入數(shù)據(jù)流包括任何可能包含入侵行為線索的系統(tǒng)數(shù)據(jù)。比如網(wǎng)絡(luò)數(shù)據(jù)包、日志文件和系統(tǒng)調(diào)用記錄等。探測(cè)器將這些數(shù)據(jù)收集起來,然后發(fā)送到檢測(cè)器進(jìn)行處理。檢測(cè)器(又可稱為分析器或檢測(cè)引擎):負(fù)責(zé)分析和檢測(cè)入侵的任務(wù),并發(fā)出警報(bào)信號(hào)。知識(shí)庫:提供必要的數(shù)據(jù)信息支持。例如用戶歷史活動(dòng)檔案,或者是檢測(cè)規(guī)則集合等??刂破鳎焊鶕?jù)警報(bào)信號(hào),人工或者自動(dòng)做出反應(yīng)動(dòng)作。IDS基本結(jié)構(gòu)入侵檢測(cè)系統(tǒng)包括三個(gè)功能部件(1)信息收集(2)分析引擎(3)響應(yīng)部件信息搜集信息收集入侵檢測(cè)的第一步是信息收集,收集內(nèi)容包括系統(tǒng)、網(wǎng)絡(luò)、數(shù)據(jù)及用戶活動(dòng)的狀態(tài)和行為需要在計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)中的若干不同關(guān)鍵點(diǎn)(不同網(wǎng)段和不同主機(jī))收集信息盡可能擴(kuò)大檢測(cè)范圍從一個(gè)源來的信息有可能看不出疑點(diǎn)信息收集入侵檢測(cè)的效果很大程度上依賴于收集信息的可靠性和正確性要保證用來檢測(cè)網(wǎng)絡(luò)系統(tǒng)的軟件的完整性特別是入侵檢測(cè)系統(tǒng)軟件本身應(yīng)具有相當(dāng)強(qiáng)的堅(jiān)固性,防止被篡改而收集到錯(cuò)誤的信息信息收集的來源系統(tǒng)或網(wǎng)絡(luò)的日志文件網(wǎng)絡(luò)流量系統(tǒng)目錄和文件的異常變化程序執(zhí)行中的異常行為系統(tǒng)或網(wǎng)絡(luò)的日志文件攻擊者常在系統(tǒng)日志文件中留下他們的蹤跡,因此,充分利用系統(tǒng)和網(wǎng)絡(luò)日志文件信息是檢測(cè)入侵的必要條件日志文件中記錄了各種行為類型,每種類型又包含不同的信息,例如記錄“用戶活動(dòng)”類型的日志,就包含登錄、用戶ID改變、用戶對(duì)文件的訪問、授權(quán)和認(rèn)證信息等內(nèi)容顯然,對(duì)用戶活動(dòng)來講,不正常的或不期望的行為就是:重復(fù)登錄失敗、登錄到不期望的位置以及非授權(quán)的企圖訪問重要文件等等系統(tǒng)目錄和文件的異常變化網(wǎng)絡(luò)環(huán)境中的文件系統(tǒng)包含很多軟件和數(shù)據(jù)文件,包含重要信息的文件和私有數(shù)據(jù)文件經(jīng)常是黑客修改或破壞的目標(biāo)目錄和文件中的不期望的改變(包括修改、創(chuàng)建和刪除),特別是那些正常情況下限制訪問的,很可能就是一種入侵產(chǎn)生的指示和信號(hào)入侵者經(jīng)常替換、修改和破壞他們獲得訪問權(quán)的系統(tǒng)上的文件,同時(shí)為了隱藏系統(tǒng)中他們的表現(xiàn)及活動(dòng)痕跡,都會(huì)盡力去替換系統(tǒng)程序或修改系統(tǒng)日志文件分析引擎分析引擎模式匹配統(tǒng)計(jì)分析完整性分析,往往用于事后分析模式匹配模式匹配就是將收集到的信息與已知的網(wǎng)絡(luò)入侵和系統(tǒng)誤用模式數(shù)據(jù)庫進(jìn)行比較,從而發(fā)現(xiàn)違背安全策略的行為一般來講,一種攻擊模式可以用一個(gè)過程(如執(zhí)行一條指令)或一個(gè)輸出(如獲得權(quán)限)來表示。該過程可以很簡(jiǎn)單(如通過字符串匹配以尋找一個(gè)簡(jiǎn)單的條目或指令),也可以很復(fù)雜(如利用正規(guī)的數(shù)學(xué)表達(dá)式來表示安全狀態(tài)的變化)統(tǒng)計(jì)分析統(tǒng)計(jì)分析方法首先給系統(tǒng)對(duì)象(如用戶、文件、目錄和設(shè)備等)創(chuàng)建一個(gè)統(tǒng)計(jì)描述,統(tǒng)計(jì)正常使用時(shí)的一些測(cè)量屬性(如訪問次數(shù)、操作失敗次數(shù)和延時(shí)等)測(cè)量屬性的平均值和偏差被用來與網(wǎng)絡(luò)、系統(tǒng)的行為進(jìn)行比較,任何觀察值在正常值范圍之外時(shí),就認(rèn)為有入侵發(fā)生完整性分析完整性分析主要關(guān)注某個(gè)文件或?qū)ο笫欠癖桓模ㄎ募湍夸浀膬?nèi)容及屬性。響應(yīng)部件響應(yīng)動(dòng)作簡(jiǎn)單報(bào)警切斷連接封鎖用戶改變文件屬性最強(qiáng)烈反應(yīng):回?fù)艄粽呷肭謾z測(cè)系統(tǒng)性能關(guān)鍵參數(shù)誤報(bào)(falsepositive):如果系統(tǒng)錯(cuò)誤地將異常活動(dòng)定義為入侵漏報(bào)(falsenegative):如果系統(tǒng)未能檢測(cè)出真正的入侵行為入侵檢測(cè)系統(tǒng)的分類(1)按照分析方法(檢測(cè)方法)異常檢測(cè)模型(AnomalyDetection):首先總結(jié)正常操作應(yīng)該具有的特征(用戶輪廓),當(dāng)用戶活動(dòng)與正常行為有重大偏離時(shí)即被認(rèn)為是入侵(白名單)誤用檢測(cè)模型(MisuseDetection):收集非正常操作的行為特征,建立相關(guān)的特征庫,當(dāng)監(jiān)測(cè)的用戶或系統(tǒng)行為與庫中的記錄相匹配時(shí),系統(tǒng)就認(rèn)為這種行為是入侵(黑名單)入侵檢測(cè)系統(tǒng)的分類(2)網(wǎng)絡(luò)IDS:網(wǎng)絡(luò)IDS(NIDS)通常以非破壞方式使用。這種設(shè)備能夠捕獲LAN區(qū)域中的信息流并試著將實(shí)時(shí)信息流與已知的攻擊簽名進(jìn)行對(duì)照。主機(jī)IDS:主機(jī)入侵檢測(cè)系統(tǒng)(HIDS)是一種用于監(jiān)控單個(gè)主機(jī)上的活動(dòng)的軟件應(yīng)用。監(jiān)控方法包括驗(yàn)證操作系統(tǒng)與應(yīng)用調(diào)用及檢查日志文件、文件系統(tǒng)信息與網(wǎng)絡(luò)連接。混合型的:分布式IDS(主機(jī)+網(wǎng)絡(luò))兩類IDS監(jiān)測(cè)軟件網(wǎng)絡(luò)IDS偵測(cè)速度快隱蔽性好視野更寬較少的監(jiān)測(cè)器占資源少主機(jī)IDS視野集中易于用戶自定義保護(hù)更加周密對(duì)網(wǎng)絡(luò)流量不敏感響應(yīng)策略要素系統(tǒng)用戶:入侵檢測(cè)系統(tǒng)用戶可以分為網(wǎng)絡(luò)安全專家或管理員、系統(tǒng)管理員、安全調(diào)查員。這三類人員對(duì)系統(tǒng)的使用目的、方式和熟悉程度不同,必須區(qū)別對(duì)待操作運(yùn)行環(huán)境:入侵檢測(cè)系統(tǒng)提供的信息形式依賴其運(yùn)行環(huán)境系統(tǒng)目標(biāo):為用戶提供關(guān)鍵數(shù)據(jù)和業(yè)務(wù)的系統(tǒng),需要部分地提供主動(dòng)響應(yīng)機(jī)制規(guī)則或法令的需求:在某些軍事環(huán)境里,允許采取主動(dòng)防御甚至攻擊技術(shù)來對(duì)付入侵行為響應(yīng)策略彈出窗口報(bào)警E-mail通知切斷TCP連接執(zhí)行自定義程序與其他安全產(chǎn)品交互:Firewall、SNMPTrapSNMPTrap(SNMP陷阱):某種入口,到達(dá)該入口會(huì)使SNMP被管設(shè)備主動(dòng)通知SNMP管理器,而不是等待SNMP管理器的再次輪詢。入侵防護(hù)系統(tǒng)(IPS)IPS:入侵防護(hù)系統(tǒng)入侵保護(hù)系統(tǒng)(Intrusion-preventionsystem)是一部能夠監(jiān)視網(wǎng)絡(luò)或網(wǎng)絡(luò)設(shè)備的網(wǎng)絡(luò)資料傳輸行為的計(jì)算機(jī)網(wǎng)絡(luò)安全設(shè)備,能夠即時(shí)的中斷、調(diào)整或隔離一些不正?;蚴蔷哂袀π缘木W(wǎng)絡(luò)資料傳輸行為。IPS的產(chǎn)生:用戶需求超過70%攻擊在應(yīng)用層產(chǎn)生服務(wù)漏洞攻擊、SQL注入等<30%>70%L7(應(yīng)用層)L2-L4(網(wǎng)絡(luò)層)攻擊層次越來越高,超過70%的應(yīng)用層攻擊防火墻無法攔截位于旁路的IDS,雖然能有效檢測(cè)和告警入侵事件,但無法直接阻斷攻擊②檢測(cè)到攻擊①攻擊③將連接阻斷三種方式、逐漸進(jìn)步,但都未達(dá)到最優(yōu)防火墻與IDS聯(lián)動(dòng),沒有標(biāo)準(zhǔn)協(xié)議,有滯后現(xiàn)象,非最優(yōu)方案②檢測(cè)到攻擊①攻擊③阻斷策略(私有協(xié)議)IPS的基礎(chǔ)理念深層防御-需要深層分析和在線部署IPS是深層防御的最優(yōu)方案Y旁路部署深層分析IDS在線部署低層分析FWNNY入侵威脅無連接攻擊深層攻擊……在線部署深層分析IPSIPS工作原理IPS工作原理IPS實(shí)現(xiàn)實(shí)時(shí)檢查和阻止入侵的原理在于IPS擁有數(shù)目眾多的過濾器,能夠防止各種攻擊。當(dāng)新的攻擊手段被發(fā)現(xiàn)之后,IPS就會(huì)創(chuàng)建一個(gè)新的過濾器。IPS數(shù)據(jù)包處理引擎是專業(yè)化定制的集成電路,可以深層檢查數(shù)據(jù)包的內(nèi)容。如果有攻擊者利用Layer2(介質(zhì)訪問控制)至Layer7(應(yīng)用)的漏洞發(fā)起攻擊,IPS能夠從數(shù)據(jù)流中檢查出這些攻擊并加以阻止。傳統(tǒng)的防火墻只能對(duì)Layer3進(jìn)行檢查,不能檢測(cè)應(yīng)用層的內(nèi)容。防火墻的包過濾技術(shù)不會(huì)針對(duì)每一字節(jié)進(jìn)行檢查,因而也就無法發(fā)現(xiàn)攻擊活動(dòng),而IPS可以做到逐一字節(jié)地檢查數(shù)據(jù)包。防火墻防火墻傳統(tǒng)的包過濾和狀態(tài)檢測(cè)防火墻弱點(diǎn)如下:
沒有深度包檢測(cè)來發(fā)現(xiàn)惡意代碼,不進(jìn)行包重組,惡意程序可以通過信任端口建立隧道穿過去,傳統(tǒng)的部署方法僅僅是網(wǎng)絡(luò)邊緣,不能防御內(nèi)部攻擊分組IPS工作原理所有流經(jīng)IPS的數(shù)據(jù)包都被分類,分類的依據(jù)是數(shù)據(jù)包中的報(bào)頭信息,如源IP地址和目的IP地址、端口號(hào)和應(yīng)用域。每種過濾器負(fù)責(zé)分析相對(duì)應(yīng)的數(shù)據(jù)包。通過檢查的數(shù)據(jù)包可以繼續(xù)前進(jìn),包含惡意內(nèi)容的數(shù)據(jù)包就會(huì)被丟棄,被懷疑的數(shù)據(jù)包需要接受進(jìn)一步的檢查。針對(duì)不同的攻擊行為,IPS需要不同的過濾器。每種過濾器都設(shè)有相應(yīng)的過濾規(guī)則,為了確保準(zhǔn)確性,這些規(guī)則的定義非常廣泛。在對(duì)傳輸內(nèi)容進(jìn)行分類時(shí),過濾引擎還需要參照數(shù)據(jù)包的信息參數(shù),并將其解析至一個(gè)有意義的域中進(jìn)行上下文分析,以提高過濾準(zhǔn)確性。IPS工作原理過濾器引擎集合了流水和大規(guī)模并行處理硬件,能夠同時(shí)執(zhí)行數(shù)千次的數(shù)據(jù)包過濾檢查。并行過濾處理可以確保數(shù)據(jù)包能夠不間斷地快速通過系統(tǒng),不會(huì)對(duì)速度造成影響。這種硬件加速技術(shù)對(duì)于IPS具有重要意義,因?yàn)閭鹘y(tǒng)的軟件解決方案必須串行進(jìn)行過濾檢查,會(huì)導(dǎo)致系統(tǒng)性能大打折扣。IDS與IPS:技術(shù)同源入侵檢測(cè)IDS入侵防御IPS核心技術(shù)基礎(chǔ)一致名稱非常接近通常廠商均同時(shí)推出兩類產(chǎn)品很容易誤認(rèn)為是一種產(chǎn)品IPS能夠解決的安全問題阻攔已知攻擊(重點(diǎn))為已知漏洞提供虛擬補(bǔ)?。ㄖ攸c(diǎn))速率或流量控制行為管理安全域A安全域BIPSIPS可提供有效的、防火墻無法提供的應(yīng)用層安全防護(hù)功能。但為了避免誤報(bào),IPS對(duì)未知攻擊的防御能力幾乎沒有。IDS能夠解決的安全問題總體威脅趨勢(shì)分析(重點(diǎn))流量及連接分析(重點(diǎn))安全事件分析(重點(diǎn))安全域A安全域BIDSIDS從總體和趨勢(shì)上的分析能力是其他安全設(shè)備難以實(shí)現(xiàn)的,通過基于流量、統(tǒng)計(jì)等方面的分析,IDS理論上擁有在未知攻擊特別是蠕蟲類攻擊爆發(fā)時(shí)進(jìn)行預(yù)警的能力。IDS、IPS部署方式對(duì)比IPSIDS在線,流量必須通過IPS旁路,通過鏡像獲得數(shù)據(jù)實(shí)時(shí),其時(shí)延必須滿足業(yè)務(wù)要求準(zhǔn)實(shí)時(shí),可接受秒級(jí)時(shí)延立刻影響網(wǎng)絡(luò)報(bào)文對(duì)網(wǎng)絡(luò)及業(yè)務(wù)無直接影響作用范圍有限制監(jiān)控范圍廣第二單元計(jì)劃(nids庫函數(shù)使用)1、IP分片2、IP分片重組數(shù)據(jù)結(jié)構(gòu)3、TCP會(huì)話管理4、TCP流管理數(shù)據(jù)結(jié)構(gòu)5、libndis開發(fā)流程6、TCP連接程序?qū)嵺`TCP/IP協(xié)議族圖譜TCP/IP不同層次中的協(xié)議
IP協(xié)議分片回顧IP協(xié)議要點(diǎn)IP是TCP/IP協(xié)議族中最為核心的協(xié)議。所有的TCP、UDP、ICMP及IGMP數(shù)據(jù)都以IP數(shù)據(jù)報(bào)格式傳輸,IP提供不可靠、無連接的數(shù)據(jù)報(bào)傳送。1、不可靠(unreliable)的意思是它不能保證IP數(shù)據(jù)報(bào)能成功地到達(dá)目的地。IP僅提供最好的傳輸服務(wù)。如果發(fā)生某種錯(cuò)誤時(shí),如某個(gè)路由器暫時(shí)用完了緩沖區(qū),IP有一個(gè)簡(jiǎn)單的錯(cuò)誤處理算法:丟棄該數(shù)據(jù)報(bào),然后發(fā)送ICMP消息報(bào)給信源端。任何要求的可靠性必須由上層來提供(如TCP)。2、無連接(connectionless)這個(gè)術(shù)語的意思是IP并不維護(hù)任何關(guān)于后續(xù)數(shù)據(jù)報(bào)的狀態(tài)信息。每個(gè)數(shù)據(jù)報(bào)的處理是相互獨(dú)立的。這也說明,IP數(shù)據(jù)報(bào)可以不按發(fā)送順序接收。如果一信源向相同的信宿發(fā)送兩個(gè)連續(xù)的數(shù)據(jù)報(bào)(先是A,然后是B),每個(gè)數(shù)據(jù)報(bào)都是獨(dú)立地進(jìn)行路由選擇,可能選擇不同的路線,因此B可能在A到達(dá)之前先到達(dá)。
IP報(bào)文格式(20bytes)
版本4bits首部長度4bits服務(wù)類型TOS8bits總長度16bits標(biāo)識(shí)Ident16bits標(biāo)志Flag3bits片偏移13bitsTTL8bits協(xié)議號(hào)8bits首部檢驗(yàn)和16bits源IP地址32bits目的IP地址32bits選項(xiàng)(可選)1234567812345678123456780371531字段名長度(字節(jié))描述版本號(hào)1/2(4比特)標(biāo)識(shí)用來產(chǎn)生數(shù)據(jù)報(bào)的IP版本。相對(duì)于IPv4,該號(hào)為4。這個(gè)字段確??赡苓\(yùn)行不同IP版本的的設(shè)備之間的兼容性。首部長度(IHL)1/2(4比特)以32比特的字來定義IP首部的長度。服務(wù)類型(TOS)1一個(gè)用于攜帶提供服務(wù)質(zhì)量特征信息的字段,如IP數(shù)據(jù)報(bào)的優(yōu)先交付。該字段并沒有如初始定義被廣泛使用,它的含義被一個(gè)稱為區(qū)分服務(wù)的技術(shù)而重新定義使用總長度(TL)2指定了IP數(shù)據(jù)報(bào)的總長度,按字節(jié)計(jì)。由于這個(gè)字段是16比特寬,一個(gè)IP數(shù)據(jù)報(bào)的最大長度是65535字節(jié),盡管大多數(shù)都小得多標(biāo)識(shí)2以便交付過程中在路由器上必須要分片時(shí)使用。接收方使用該字段來重新組裝報(bào)文而不會(huì)意外地把來自不同報(bào)文的分片混在一起。需要該字段是因?yàn)榉制赡軄碜曰旌显谝黄鸬亩鄠€(gè)報(bào)文,因?yàn)閬碜杂谌我慌_(tái)設(shè)備的IP數(shù)據(jù)報(bào)可以被無序地接收標(biāo)志3/8(3比特)3個(gè)控制標(biāo)志,兩個(gè)用于管理分片,一個(gè)是預(yù)留的。參見表2片偏移15/8(13比特)當(dāng)一個(gè)報(bào)文出現(xiàn)分片時(shí),該字段指定了在這個(gè)分片中的數(shù)據(jù)位于報(bào)文中的偏移量,或位置,偏移值以8字節(jié)為單位(64比特)。第一個(gè)分片的偏移量是0
生存期(TTL)1該字段指定了數(shù)據(jù)報(bào)在網(wǎng)絡(luò)上允許存活的時(shí)間,以路由器跳數(shù)計(jì)。每個(gè)路由器在發(fā)送數(shù)據(jù)報(bào)前會(huì)減少這個(gè)字段的值(減1):如果TTL字段減到0,該數(shù)據(jù)報(bào)被認(rèn)為歷經(jīng)了一條太長的路由,則被丟棄協(xié)議1標(biāo)識(shí)在數(shù)據(jù)報(bào)中攜帶的較高層協(xié)議(通常是一個(gè)運(yùn)輸層協(xié)議或封裝的網(wǎng)絡(luò)層協(xié)議)。表3說明了該字段的協(xié)議值,這些值最初由IETF“地址分配”標(biāo)準(zhǔn)RFC1700定義,現(xiàn)在由因特網(wǎng)地址分配委員會(huì)(IANA)維護(hù)首部校驗(yàn)值2檢驗(yàn)和在首部上進(jìn)行計(jì)算,提供傳輸中基本的差錯(cuò)保護(hù)。它不是數(shù)據(jù)鏈路層技術(shù)如以太網(wǎng)等常用的較復(fù)雜的循環(huán)冗余檢測(cè)(CRC)碼;它只是一個(gè)16比特檢驗(yàn)和。它通過把首部字節(jié)分為兩個(gè)字(一個(gè)字是兩字節(jié))然后相加而計(jì)算得到。著有首部(不是數(shù)據(jù))被計(jì)算檢驗(yàn)和。在每一跳,設(shè)備收到數(shù)據(jù)報(bào)都要做檢查和計(jì)算,如果兩個(gè)檢驗(yàn)和不相同,它認(rèn)為數(shù)據(jù)報(bào)損壞將其丟棄源地址4它是數(shù)據(jù)報(bào)的發(fā)起者的32比特IP地址。注意即使中間設(shè)備如路由器可能處理該數(shù)據(jù)報(bào),它們通常不把它們的地址放入該字段,這個(gè)地址總是最初發(fā)送該數(shù)據(jù)報(bào)的設(shè)備的地址目的地址4它是數(shù)據(jù)報(bào)的期望接收方的32比特IP地址。同樣,即使如路由器等設(shè)備可能是數(shù)據(jù)報(bào)的中間目標(biāo),該字段總是用于定義最終目的地選項(xiàng)可變的一種或幾種類型的選項(xiàng)可能被包含在某個(gè)IP數(shù)據(jù)報(bào)標(biāo)準(zhǔn)首部的后面。填充可變的如果包含一個(gè)或多個(gè)選項(xiàng),且用于它們的比特?cái)?shù)不是32的倍數(shù),那么就需要添加足夠的0來填充首部,使它成為32比特的倍數(shù)(4字節(jié))數(shù)據(jù)可變的這時(shí)在數(shù)據(jù)報(bào)中要傳輸?shù)臄?shù)據(jù)。它是一個(gè)完整的較高層報(bào)文或報(bào)文的一個(gè)分片標(biāo)志長度(字節(jié))描述(3比特)預(yù)留1/8(1比特)未使用DF1/8(1比特)當(dāng)設(shè)為1時(shí),這說明數(shù)據(jù)報(bào)不應(yīng)該被分片。由于分片過程通常不為較高層所見,大部分的協(xié)議并不關(guān)心這個(gè)過程,也不設(shè)置該標(biāo)志。然而,它可用于測(cè)試一條鏈路的最大傳輸單元(MTU)MF1/8(1比特)當(dāng)設(shè)為0時(shí),指明是報(bào)文的最后一片;當(dāng)設(shè)為1時(shí),它指示被分片的報(bào)文中還有許多分片未到達(dá)。如果對(duì)一個(gè)報(bào)文沒有分片,只存在一個(gè)分片(整個(gè)報(bào)文),該標(biāo)志為0。如果使用分片,除了最后一個(gè)分片外該標(biāo)志都是1,因而接收方可以知道什么時(shí)候所有的分片都已發(fā)送IP分片任何IP層接收到一份要發(fā)送的IP數(shù)據(jù)報(bào)時(shí),它要判斷向本地哪個(gè)接口發(fā)送數(shù)據(jù),并查詢?cè)摻涌诘腗TU。IP把MTU與數(shù)據(jù)報(bào)的長度進(jìn)行比較,如果需要?jiǎng)t進(jìn)行分片。分片可以發(fā)生在原始發(fā)送端主機(jī)上,也可以發(fā)送在中間路由器上。IP數(shù)據(jù)報(bào)分片后,只有到達(dá)目的主機(jī)后才進(jìn)行重裝。分片數(shù)據(jù)組包把一份IP數(shù)據(jù)報(bào)分片以后,只有到達(dá)目的地才進(jìn)行重新組裝(這里的重新組裝與其他網(wǎng)絡(luò)協(xié)議不同,它們要求在下一站就進(jìn)行進(jìn)行重新組裝,而不是在最終的目的地)。重新組裝由目的端的IP層來完成,其目的是使分片和重新組裝過程對(duì)運(yùn)輸層(TCP和UDP)是透明的,除了某些可能的越級(jí)操作外。已經(jīng)分片過的數(shù)據(jù)報(bào)有可能會(huì)再次進(jìn)行分片(可能不止一次)。IP分片標(biāo)識(shí)與標(biāo)志字段IP首部中包含的數(shù)據(jù)為分片和重新組裝提供了足夠的信息。對(duì)于發(fā)送端發(fā)送的每份IP數(shù)據(jù)報(bào)來說,其標(biāo)識(shí)字段(Identification)都包含一個(gè)唯一值。該值在數(shù)據(jù)報(bào)分片時(shí)被復(fù)制到每個(gè)片中(我們現(xiàn)在已經(jīng)看到這個(gè)字段的用途)。標(biāo)志字段(Flags)用其中一個(gè)比特來表示“更多的片”。除了最后一片外,其他每個(gè)組成數(shù)據(jù)報(bào)的片都要把該比特置1。片偏移字段指的是該片偏移原始數(shù)據(jù)報(bào)開始處的位置。IP分片重組主要數(shù)據(jù)結(jié)構(gòu)
IP首部與分片有關(guān)的字段
1、對(duì)于每份IP數(shù)據(jù)報(bào)來說,都有一個(gè)標(biāo)識(shí)字段,該值在分片時(shí)被復(fù)制到每個(gè)片中2、標(biāo)志字段用其中一個(gè)bit表示“更多的片”,除最后一片外,其他每個(gè)分片都要設(shè)置為1。3、片偏移字段指的是該片偏移原始數(shù)據(jù)報(bào)開始處的位置。4、數(shù)據(jù)報(bào)被分片后,每個(gè)片的總長度要改為該片的長度值。5、標(biāo)志字段中有一個(gè)bit表示“不分片”,如果該位1,IP將不對(duì)數(shù)據(jù)報(bào)進(jìn)行分片IP報(bào)即使丟失一片數(shù)據(jù)報(bào)也要重傳整個(gè)數(shù)據(jù)報(bào)。為什么呢?因?yàn)镮P層沒有超時(shí)重傳的機(jī)制,必須由更高層負(fù)責(zé)超時(shí)重傳。IP首部與分片有關(guān)的字段一、三個(gè)字段1、標(biāo)識(shí)字段(ip_id):標(biāo)識(shí)特定數(shù)據(jù)報(bào)的分片2、標(biāo)志字段(ip_off的3個(gè)高位比特,第1位:保留,第二位:DF,第三位:MF)3、偏移字段(ip_off的13個(gè)低位比特:offset)
二、幾個(gè)區(qū)別1、普通IP包:offset、MF為02、最后一個(gè)分片包:offset>0、MF為03、其它分片包:offset≥0、MF為1Libnids分片重組流程LIbnids分片重組流程TCP有限狀態(tài)機(jī)
IP報(bào)文格式(20bytes)
版本4bits首部長度4bits服務(wù)類型TOS8bits總長度16bits標(biāo)識(shí)Ident16bits標(biāo)志Flag3bits片偏移13bitsTTL8bits協(xié)議號(hào)8bits首部檢驗(yàn)和16bits源IP地址32bits目的IP地址32bits選項(xiàng)(可選)1234567812345678123456780371531傳輸控制協(xié)議(TCP)TCP是一種面向連接(連接導(dǎo)向)的、可靠的、基于字節(jié)流的運(yùn)輸層(Transportlayer)通信協(xié)議。TCP在IP報(bào)文的協(xié)議號(hào)是6。特點(diǎn):(1)提供面向連接的服務(wù),但不提供廣播或多播服務(wù)。(2)提供可靠的服務(wù),使用確認(rèn)機(jī)制來檢查數(shù)據(jù)是否安全、完整地到達(dá)。(3)面向字節(jié)流(Stream)。(4)提供全雙工通信。傳輸控制協(xié)議(TCP)TCP提供了可靠的傳輸服務(wù),這是通過下列方式提供的:應(yīng)用數(shù)據(jù)被分割成TCP認(rèn)為最適合發(fā)送的數(shù)據(jù)塊。由TCP傳遞給IP的信息單位稱為報(bào)文段或段(segment)當(dāng)TCP發(fā)出一個(gè)段后,它啟動(dòng)一個(gè)定時(shí)器,等待目的端確認(rèn)收到這個(gè)報(bào)文段。如果不能及時(shí)收到一個(gè)確認(rèn),將重發(fā)這個(gè)報(bào)文段。當(dāng)TCP收到發(fā)自TCP連接另一端的數(shù)據(jù),它將發(fā)送一個(gè)確認(rèn)。這個(gè)確認(rèn)不是立即發(fā)送,通常將推遲幾分之一秒。TCP通常用一個(gè)ACK來確認(rèn)多個(gè)報(bào)文段IP數(shù)據(jù)報(bào)會(huì)發(fā)生重復(fù),TCP的接收端丟棄重復(fù)的數(shù)據(jù)。傳輸控制協(xié)議(TCP)TCP將保持它首部和數(shù)據(jù)的檢驗(yàn)和。這是一個(gè)端到端的檢驗(yàn)和,目的是檢測(cè)數(shù)據(jù)在傳輸過程中的任何變化。如果收到段的檢驗(yàn)和有差錯(cuò),TCP將丟棄這個(gè)報(bào)文段和不確認(rèn)收到此報(bào)文段(希望發(fā)端超時(shí)并重發(fā))。由于IP數(shù)據(jù)報(bào)的到達(dá)可能會(huì)失序,因此TCP報(bào)文段的到達(dá)也可能會(huì)失序。TCP將對(duì)收到的數(shù)據(jù)進(jìn)行重新排序,將收到的數(shù)據(jù)以正確的順序交給應(yīng)用層。TCP還能提供流量控制。TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發(fā)送接收端緩沖區(qū)所能接納的數(shù)據(jù)。這將防止較快主機(jī)致使較慢主機(jī)的緩沖區(qū)溢出。768HTCP面向流的概念發(fā)送TCP報(bào)文段發(fā)送方接收方把字節(jié)寫入發(fā)送緩存從接收緩存讀取字節(jié)應(yīng)用進(jìn)程應(yīng)用進(jìn)程1230181716151419202145131211H109H加上TCP首部構(gòu)成TCP報(bào)文段TCPTCP字節(jié)流字節(jié)流H表示TCP報(bào)文段的首部x表示序號(hào)為x的數(shù)據(jù)字節(jié)TCP連接1.字節(jié)號(hào):TCP把連接中發(fā)送的所有數(shù)據(jù)字節(jié)都編上號(hào),每一個(gè)方向的編號(hào)都是獨(dú)立的(1)接收應(yīng)用層數(shù)據(jù),存入緩存;(2)產(chǎn)生一個(gè)隨機(jī)數(shù)作為第一個(gè)字節(jié)的編號(hào);例如:隨機(jī)數(shù)為1057,數(shù)據(jù)總共有6000字節(jié),則編號(hào)從1057-7056。2.序號(hào):當(dāng)字節(jié)編上號(hào)以后,就給每一個(gè)報(bào)文段指派一個(gè)序號(hào)。序號(hào)是在這個(gè)報(bào)文字段中的第一個(gè)字節(jié)數(shù)據(jù)的編號(hào)。3.確認(rèn)號(hào):TCP通信是全雙工的,連接建立后,每一方都以不同的開始字節(jié)號(hào)對(duì)字節(jié)編號(hào),序號(hào)表示報(bào)文段攜帶的第一個(gè)字節(jié)數(shù)據(jù)的編號(hào),確認(rèn)號(hào)定義了這一方期望接收的下一個(gè)字節(jié)的編號(hào)。把正確收到的最后一個(gè)字節(jié)的編號(hào)+1作為確認(rèn)號(hào)。編號(hào)系統(tǒng)TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG填充緊急URG——當(dāng)URG1時(shí),表明緊急指針字段有效。它告訴系統(tǒng)此報(bào)文段中有緊急數(shù)據(jù),應(yīng)盡快傳送(相當(dāng)于高優(yōu)先級(jí)的數(shù)據(jù))。位08162431TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG填充確認(rèn)ACK——只有當(dāng)ACK1時(shí)確認(rèn)號(hào)字段才有效。當(dāng)ACK0時(shí),確認(rèn)號(hào)無效。位08162431TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG填充推送PSH(PuSH)——接收TCP收到PSH=1的報(bào)文段,就盡快地交付接收應(yīng)用進(jìn)程,而不再等到整個(gè)緩存都填滿了后再向上交付。位08162431TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG填充復(fù)位RST(ReSeT)——當(dāng)RST1時(shí),表明TCP連接中出現(xiàn)嚴(yán)重差錯(cuò)(如由于主機(jī)崩潰或其他原因),必須釋放連接,然后再重新建立傳輸連接。位08162431TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG填充終止FIN(FINis)——用來釋放一個(gè)連接。FIN1表明此報(bào)文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放傳輸連接。位08162431TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG填充窗口字段——占2字節(jié),用來讓對(duì)方設(shè)置發(fā)送窗口的依據(jù),單位為字節(jié)。位08162431TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG填充檢驗(yàn)和——占2字節(jié)。檢驗(yàn)和字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)這兩部分。在計(jì)算檢驗(yàn)和時(shí),要在TCP報(bào)文段的前面加上12字節(jié)的偽首部。位08162431TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG填充選項(xiàng)字段——長度可變。TCP最初只規(guī)定了一種選項(xiàng),即最大報(bào)文段長度MSS。MSS告訴對(duì)方TCP:“我的緩存所能接收的報(bào)文段的數(shù)據(jù)字段的最大長度是MSS個(gè)字節(jié)?!蔽?8162431TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG填充緊急指針字段——占16位,指出在本報(bào)文段中緊急數(shù)據(jù)共有多少個(gè)字節(jié)(緊急數(shù)據(jù)放在本報(bào)文段數(shù)據(jù)的最前面)。位08162431TCP首部20字節(jié)固定首部目的端口數(shù)據(jù)偏移檢驗(yàn)和選項(xiàng)(長度可變)源端口序號(hào)緊急指針窗口確認(rèn)號(hào)保留FINSYNRSTPSHACKURG填充填充字段——這是為了使整個(gè)首部長度是4字節(jié)的整數(shù)倍。位08162431TCP的連接管理面向連接的傳輸需要3個(gè)階段:連接建立、數(shù)據(jù)傳輸和連接終止。TCP連接的管理就是使傳輸連接的建立和釋放都能正常地進(jìn)行。TCP連接的建立三次握手過程,采用客戶/服務(wù)器方式。服務(wù)器告訴自己的TCP已經(jīng)準(zhǔn)備好接受連接,稱為被動(dòng)打開請(qǐng)求。(被動(dòng)等待連接建立)客戶程序發(fā)出請(qǐng)求叫做主動(dòng)打開。(主動(dòng)發(fā)起連接的建立)TCP三次握手(事件/動(dòng)作)發(fā)送第一個(gè)SYN的一端將執(zhí)行主動(dòng)打開(activeopen),接收這個(gè)SYN并發(fā)回下一個(gè)SYN的另一端執(zhí)行被動(dòng)打開(passiveopen)。另外,TCP的握手協(xié)議被精心設(shè)計(jì)為可以處理同時(shí)打開(simultaneousopen),對(duì)于同時(shí)打開它僅建立一條連接而不是兩條連接。因此,連接可以由任一方或雙方發(fā)起,一旦連接建立,數(shù)據(jù)就可以雙向?qū)Φ鹊亓鲃?dòng),而沒有所謂的主從關(guān)系。三次握手協(xié)議是連接兩端正確同步的充要條件。因?yàn)門CP建立在不可靠的分組傳輸服務(wù)之上,報(bào)文可能丟失、延遲、重復(fù)和亂序,因此協(xié)議必須使用超時(shí)和重傳機(jī)制。如果重傳的連接請(qǐng)求和原先的連接請(qǐng)求在連接正在建立時(shí)到達(dá),或者當(dāng)一個(gè)連接已經(jīng)建立、使用和結(jié)束之后,某個(gè)延遲的連接請(qǐng)求才到達(dá),就會(huì)出現(xiàn)問題。采用三次握手協(xié)議(加上這樣的規(guī)則:在連接建立之后TCP就不再理睬又一次的連接請(qǐng)求)就可以解決這些問題。在TCP建立連接后,就可以開始傳輸數(shù)據(jù)了。TCP工作在全雙工模式,它可以同時(shí)進(jìn)行雙向數(shù)據(jù)傳輸。服務(wù)器向客戶端發(fā)送一個(gè)數(shù)據(jù)包后,客戶端收到這個(gè)數(shù)據(jù)包后,會(huì)向服務(wù)器發(fā)送一個(gè)確認(rèn)數(shù)據(jù)包。傳輸數(shù)據(jù)的簡(jiǎn)要過程如下:1)發(fā)送數(shù)據(jù):服務(wù)器向客戶端發(fā)送一個(gè)帶有數(shù)據(jù)的數(shù)據(jù)包,該數(shù)據(jù)包中的序列號(hào)和確認(rèn)號(hào)與建立連接第三步的數(shù)據(jù)包中的序列號(hào)和確認(rèn)號(hào)相同;2)確認(rèn)收到:客戶端收到該數(shù)據(jù)包,向服務(wù)器發(fā)送一個(gè)確認(rèn)數(shù)據(jù)包,該數(shù)據(jù)包中,序列號(hào)是為對(duì)應(yīng)需確認(rèn)的數(shù)據(jù)包中的確認(rèn)號(hào)值,而確認(rèn)號(hào)為服務(wù)器發(fā)送的對(duì)應(yīng)需確認(rèn)的數(shù)據(jù)包的序列號(hào)+該數(shù)據(jù)包中所帶數(shù)據(jù)的大小。數(shù)據(jù)分段中的序列號(hào)可以保證所有傳輸?shù)臄?shù)據(jù)按照正常的次序進(jìn)行重組,而且通過確認(rèn)保證數(shù)據(jù)傳輸?shù)耐暾?。TCP數(shù)據(jù)傳送(B向A傳數(shù)據(jù))三次握手過程1)主動(dòng)關(guān)閉端發(fā)送一個(gè)FIN報(bào)文段:FIN(seq:x,ack:y,F(xiàn))。2)服務(wù)器端發(fā)送一個(gè)FIN+ACK報(bào)文段:FIN+ACK(seq:y,ack:x+1,A,F)3)發(fā)送一個(gè)ACK報(bào)文段:ACK(seq:x,ack:y+1,A)四次握手過程半關(guān)閉連接TCP的連接釋放TCP連接關(guān)閉終止一個(gè)連接要經(jīng)過4次握手。這是因?yàn)門CP的半關(guān)閉(half-close)造成的。由于一個(gè)TCP連接是全雙工(即數(shù)據(jù)在兩個(gè)方向上能同時(shí)傳遞),因此每個(gè)方向必須單獨(dú)地進(jìn)行關(guān)閉。關(guān)閉的原則就是當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個(gè)FIN來終止這個(gè)方向連接。當(dāng)一端收到一個(gè)FIN,它必須通知應(yīng)用層另一端已經(jīng)終止了那個(gè)方向的數(shù)據(jù)傳送。發(fā)送FIN通常是應(yīng)用層進(jìn)行關(guān)閉的結(jié)果。本方啟動(dòng)關(guān)閉本方啟動(dòng)關(guān)閉:收到本方應(yīng)用進(jìn)程的關(guān)閉命令(CLOSE)后,TCP在發(fā)送完尚未處理的報(bào)文段后,發(fā)FIN=1的報(bào)文段給對(duì)方,且TCP不再受理本方應(yīng)用進(jìn)程的數(shù)據(jù)發(fā)送。在FIN以前發(fā)送的數(shù)據(jù)字節(jié),包括FIN,都需要對(duì)方確認(rèn),否則要重傳。注意FIN也占一個(gè)順序號(hào)。一旦收到對(duì)方對(duì)FIN的確認(rèn)以及對(duì)方的FIN報(bào)文段,本方TCP就對(duì)該FIN進(jìn)行確認(rèn),在等待一段時(shí)間,然后關(guān)閉連接。等待是為了防止本方的確認(rèn)報(bào)文丟失,避免對(duì)方的重傳報(bào)文干擾新的連接。對(duì)方啟動(dòng)關(guān)閉當(dāng)TCP收到對(duì)方發(fā)來的FIN報(bào)文時(shí),發(fā)ACK確認(rèn)此FIN報(bào)文,并通知應(yīng)用進(jìn)程連接正在關(guān)閉。應(yīng)用進(jìn)程將以關(guān)閉命令響應(yīng)。TCP在發(fā)送完尚未處理的報(bào)文段后,發(fā)一個(gè)FIN報(bào)文給對(duì)方TCP,然后等待對(duì)方對(duì)FIN的確認(rèn),收到確認(rèn)后關(guān)閉連接。若對(duì)方的確認(rèn)未及時(shí)到達(dá),在等待一段時(shí)間后也關(guān)閉連接。
雙方同時(shí)啟動(dòng)關(guān)閉
連接雙方的應(yīng)用進(jìn)程同時(shí)發(fā)關(guān)閉命令,則雙方TCP在發(fā)送完尚未處理的報(bào)文段后,發(fā)送FIN報(bào)文。各方TCP在FIN前所發(fā)報(bào)文都得到確認(rèn)后,發(fā)ACK確認(rèn)它收到的FIN。各方在收到對(duì)方對(duì)FIN的確認(rèn)后,同樣等待一段時(shí)間再關(guān)閉連接。這稱之為同時(shí)關(guān)閉(simultaneousclose)。TCP狀態(tài)機(jī)TCP協(xié)議的操作可以使用一個(gè)具有11種狀態(tài)的有限狀態(tài)機(jī)(FiniteStateMachine)來表示,圖中的圓角矩形表示狀態(tài),箭頭表示狀態(tài)之間的轉(zhuǎn)換,圖中用粗線表示客戶端主動(dòng)和被動(dòng)的服務(wù)器端建立連接的正常過程:客戶端的狀態(tài)變遷用粗實(shí)線,服務(wù)器端的狀態(tài)變遷用粗虛線。細(xì)線用于不常見的序列,如復(fù)位、同時(shí)打開、同時(shí)關(guān)閉等。TCP狀態(tài)機(jī)TCP狀態(tài)機(jī)圖中的每條狀態(tài)變換線上均標(biāo)有事件/動(dòng)作”:事件:是指(1)用戶執(zhí)行了系統(tǒng)調(diào)用(CONNECT、LISTEN、SEND或CLOSE)、(2)收到一個(gè)報(bào)文段(SYN、FIN、ACK或RST)、(3)出現(xiàn)了超過兩倍最大的分組生命期的情況;動(dòng)作:是指(1)發(fā)送一個(gè)報(bào)文段(SYN、FIN或ACK),(2)什么也沒有(用“-”表示)。TCP
有
限
狀
態(tài)
機(jī)CLOSEDESTABLISHEDLISTENCLOSE_WAITFIN_WAIT_1SYN_RCVDFIN_WAIT_2CLOSINGTIME_WAITSYN_SENTLAST_ACK主動(dòng)打開被動(dòng)打開被動(dòng)關(guān)閉主動(dòng)關(guān)閉起點(diǎn)(1)被動(dòng)打開:LISTEN(2)主動(dòng)打開/發(fā)送SYNCONNET/SYN同時(shí)打開收到SYN/發(fā)送SYN,ACK(5)收到ACK/-數(shù)據(jù)傳送階段(9)關(guān)閉CLOSE/發(fā)送FIN(6)關(guān)閉CLOSE/發(fā)送FIN關(guān)閉發(fā)送FIN收到RST/-(3)收到SYN/發(fā)送SYN,ACK關(guān)閉或超時(shí)(11)收到ACK/-(4)收到SYN,ACK/發(fā)送ACK收到ACK/-(8)收到ACK/-(10)收到FIN/發(fā)送ACK收到FIN,ACK/發(fā)送ACK收到FIN/發(fā)送ACK同時(shí)關(guān)閉(7)收到FIN/發(fā)送ACK發(fā)送SEND/SYN定時(shí)經(jīng)過兩倍報(bào)文段壽命后關(guān)閉TCP狀態(tài)說明CLOSED:關(guān)閉狀態(tài),沒有連接活動(dòng)或正在進(jìn)行LISTEN:監(jiān)聽狀態(tài),服務(wù)器正在等待連接進(jìn)入SYNRCVD:收到一個(gè)連接請(qǐng)求,尚未確認(rèn)SYNSENT:已經(jīng)發(fā)出連接請(qǐng)求,等待確認(rèn)ESTABLISHED:連接建立,正常數(shù)據(jù)傳輸狀態(tài)FINWAIT1:(主動(dòng)關(guān)閉)已經(jīng)發(fā)送關(guān)閉請(qǐng)求,等待確認(rèn)FINWAIT2:(主動(dòng)關(guān)閉)收到對(duì)方關(guān)閉確認(rèn),等待對(duì)方關(guān)閉請(qǐng)求TIMEDWAIT:完成雙向關(guān)閉,等待所有分組死掉CLOSING:雙方同時(shí)嘗試關(guān)閉,等待對(duì)方確認(rèn)CLOSEWAIT:(被動(dòng)關(guān)閉)收到對(duì)方關(guān)閉請(qǐng)求,已經(jīng)確認(rèn)LASTACK:(被動(dòng)關(guān)閉)等待最后一個(gè)關(guān)閉確認(rèn),并等待所有分組死掉每個(gè)連接均開始于CLOSED狀態(tài)。當(dāng)一方執(zhí)行了被動(dòng)的連接原語(LISTEN)或主動(dòng)的連接原語(CONNECT)時(shí),它便會(huì)脫離CLOSED狀態(tài)。如果此時(shí)另一方執(zhí)行了相對(duì)應(yīng)的連接原語,連接便建立了,并且狀態(tài)變?yōu)镋STABLISHED。任何一方均可以首先請(qǐng)求釋放連接,當(dāng)連接被釋放后,狀態(tài)又回到了CLOSED。正常狀態(tài)轉(zhuǎn)換(握手)(1)服務(wù)器端首先執(zhí)行LISTEN原語進(jìn)入被動(dòng)打開狀態(tài)(LISTEN),等待客戶端連接;(2)當(dāng)客戶端的一個(gè)應(yīng)用程序發(fā)出CONNECT命令后,本地的TCP實(shí)體為其創(chuàng)建一個(gè)連接記錄并標(biāo)記為SYNSENT狀態(tài),然后給服務(wù)器發(fā)送一個(gè)SYN報(bào)文段;(3)服務(wù)器收到一個(gè)SYN報(bào)文段,其TCP實(shí)體給客戶端發(fā)送確認(rèn)ACK報(bào)文段同時(shí)發(fā)送一個(gè)SYN信號(hào),進(jìn)入SYNRCVD狀態(tài);(4)客戶端收到SYN+ACK報(bào)文段,其TCP實(shí)體給服務(wù)器端發(fā)送出三次握手的最后一個(gè)ACK報(bào)文段,并轉(zhuǎn)換為ESTABLISHED狀態(tài);(5)服務(wù)器端收到確認(rèn)的ACK報(bào)文段,完成了三次握手,于是也進(jìn)入ESTABLISHED狀態(tài)。正常狀態(tài)轉(zhuǎn)換(ESTABLISHED狀態(tài):數(shù)據(jù)傳輸)在此狀態(tài)下,雙方可以自由傳輸數(shù)據(jù)。當(dāng)一個(gè)應(yīng)用程序完成數(shù)據(jù)傳輸任務(wù)后,它需要關(guān)閉TCP連接。假設(shè)仍由客戶端發(fā)起主動(dòng)關(guān)閉連接。正常狀態(tài)轉(zhuǎn)換(揮手)客戶端執(zhí)行CLOSE原語,本地的TCP實(shí)體發(fā)送一個(gè)FIN報(bào)文段并等待響應(yīng)的確認(rèn)(進(jìn)入狀態(tài)FINWAIT1);服務(wù)器收到一個(gè)FIN報(bào)文段,它確認(rèn)客戶端的請(qǐng)求發(fā)回一個(gè)ACK報(bào)文段,進(jìn)入CLOSEWAIT狀態(tài);客戶端收到確認(rèn)ACK報(bào)文段,就轉(zhuǎn)移到FINWAIT2狀態(tài),此時(shí)連接在一個(gè)方向上就斷開了;服務(wù)器端應(yīng)用得到通告后,也執(zhí)行CLOSE原語關(guān)閉另一個(gè)方向的連接,其本地TCP實(shí)體向客戶端發(fā)送一個(gè)FIN報(bào)文段,并進(jìn)入LASTACK狀態(tài),等待最后一個(gè)ACK確認(rèn)報(bào)文段;客戶端收到FIN報(bào)文段并確認(rèn),進(jìn)入TIMEDWAIT狀態(tài),此時(shí)雙方連接均已經(jīng)斷開,但TCP要等待一個(gè)2倍報(bào)文段最大生存時(shí)間MSL(MaximumSegmentLifetime),確保該連接的所有分組全部消失,以防止出現(xiàn)確認(rèn)丟失的情況。當(dāng)定時(shí)器超時(shí)后,TCP刪除該連接記錄,返回到初始狀態(tài)(CLOSED)。服務(wù)器收到最后一個(gè)確認(rèn)ACK報(bào)文段,其TCP實(shí)體便釋放該連接,并刪除連接記錄,返回到初始狀態(tài)(CLOSED)。TCP_Stream狀態(tài)(NIDS)NIDS_JUST_EST:表示TCP連接建立,在此狀態(tài)下就可以決定是否對(duì)此TCP連接進(jìn)行數(shù)據(jù)分析,可以決定是否捕獲TCP客戶端接收的數(shù)據(jù)、TCP服務(wù)器端接收的數(shù)據(jù)、TCP客戶端接收的緊急數(shù)據(jù)或者TCP服務(wù)器端接收的緊急數(shù)據(jù);NIDS_CLOSE:表示TCP連接正常關(guān)閉;NIDS_RESET:表示TCP連接被重置關(guān)閉;NIDS_TIMED_OUT:表示由于超時(shí)TCP連接被關(guān)閉;NIDSEXITING:表示Libnids正在退出,在這個(gè)狀態(tài)下可以最后一次使用存儲(chǔ)在halfstream數(shù)據(jù)結(jié)構(gòu)中的緩存數(shù)據(jù);NIDS_DATA:表示接收數(shù)據(jù)的狀態(tài),在這個(gè)狀態(tài)可以判斷是否有新的數(shù)據(jù)到達(dá),如果有就可以把數(shù)據(jù)存儲(chǔ)起來,可以在這個(gè)狀態(tài)之中來分析TCP傳輸?shù)臄?shù)據(jù),此數(shù)據(jù)就存儲(chǔ)在half_stream數(shù)據(jù)結(jié)構(gòu)的緩存之中。Libnids主要數(shù)據(jù)結(jié)構(gòu)與函數(shù)tcp_streamstructtcp_stream{structtuple4addr;//tcp連接的四個(gè)重要信息charnids_state;//表示連接的邏輯狀態(tài)//狀態(tài):NIDS_JUST_EST表示一個(gè)剛剛建立的連接,NIDS_DATA表示連接接收到新的數(shù)據(jù),//NIDS_CLOSE、NIDS_RESET和NIDS_TIMEOUT,表示該連接已經(jīng)關(guān)閉了structlurker_node*listeners;//給TCP處理的回調(diào)函數(shù)使用,其中有一成員指向回調(diào)函數(shù)structhalf_streamclient;structhalf_streamserver;structtcp_stream*next_node;structtcp_stream*prev_node;inthash_index;structtcp_stream*next_time;structtcp_stream*prev_time;intread;//本次讀進(jìn)數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)的長度structtcp_stream*next_free;//指向下一個(gè)空閑tcp結(jié)構(gòu)};TCP_STREAMtcp_stream數(shù)據(jù)結(jié)構(gòu)描述了一個(gè)TCP連接的完整信息,包括的內(nèi)容非常豐富,它是Libnids開發(fā)包中最重要一個(gè)數(shù)據(jù)結(jié)構(gòu)。其中開發(fā)者需要注意的成員有以下幾種:●成員addr是一個(gè)tuple4類型的成員,它表示了一個(gè)TCP連接的四個(gè)重要信息:源IP地址、源端口號(hào)、目的IP地址和目的端口號(hào)?!癯蓡Tnids_state表示連接的邏輯狀態(tài),共有六種狀態(tài)●成員client表示客戶端信息,成員server表示服務(wù)器端信息,它們都是half_stream類型的。這樣tcp_stream數(shù)據(jù)結(jié)構(gòu)就描述了一個(gè)完整的TCP連接的所有信息。tuple4Structtuple4{u_shortsource;u_shortdest;u_intsaddr;u_intdaddr;};tuple4數(shù)據(jù)結(jié)構(gòu)描述的是一個(gè)地址端口對(duì),它表示發(fā)送方IP和端口以及接收方IP和端口,當(dāng)它用于TCP連接時(shí),其具體意義描述如下;●成員saddr表示一個(gè)TCP連接的一端IP地址,稱為源IP地址;●成員daddr表示一個(gè)TCP連接的另一端IP地址,稱為目的IP地址,注意此時(shí)的源和目的只是相對(duì)的;●成員source表示源IP地址的端口號(hào);●成員dest表示目的IP地址的目的端口號(hào)。tuple4數(shù)據(jù)結(jié)構(gòu)包括描述TCP連接的四個(gè)重要參數(shù)信息:源IP地址、目的IP地址,源端口和目的端口。當(dāng)然,此數(shù)據(jù)不僅能用在TCP協(xié)議分析中,也可以用在UDP協(xié)議分析之中,此時(shí)它表示UDP發(fā)送方的IP地址和端口,以及UDP接收方的IP地址和端口。TCP_Stream狀態(tài)NIDS_JUST_EST:表示TCP連接建立,在此狀態(tài)下就可以決定是否對(duì)此TCP連接進(jìn)行數(shù)據(jù)分析,可以決定是否捕獲TCP客戶端接收的數(shù)據(jù)、TCP服務(wù)器端接收的數(shù)據(jù)、TCP客戶端接收的緊急數(shù)據(jù)或者TCP服務(wù)器端接收的緊急數(shù)據(jù);NIDS_CLOSE:表示TCP連接正常關(guān)閉;NIDS_RESET:表示TCP連接被重置關(guān)閉;NIDS_TIMED_OUT:表示由于超時(shí)TCP連接被關(guān)閉;NIDSEXITING:表示Libnids正在退出,在這個(gè)狀態(tài)下可以最后一次使用存儲(chǔ)在halfstream數(shù)據(jù)結(jié)構(gòu)中的緩存數(shù)據(jù);NIDS_DATA:表示接收數(shù)據(jù)的狀態(tài),在這個(gè)狀態(tài)可以判斷是否有新的數(shù)據(jù)到達(dá),如果有就可以把數(shù)據(jù)存儲(chǔ)起來,可以在這個(gè)狀態(tài)之中來分析TCP傳輸?shù)臄?shù)據(jù),此數(shù)據(jù)就存儲(chǔ)在half_stream數(shù)據(jù)結(jié)構(gòu)的緩存之中。TCP連接的邏輯狀態(tài)
/*Libnids
狀態(tài)描述的是連接的邏輯狀態(tài)
,
真正的
TCP
連接狀態(tài)有
11
種
.
*TCP_ESTABLISHED
TCP
連接建立
,
開始傳輸數(shù)據(jù)
*TCP_SYN_SEND
主動(dòng)打開
*TCP_SYN_RECV
接受
SYN
*TCP_FIN_WAIT1
*TCP_FIN_WAIT2
*TCP_TIME_WAIT
*TCP_CLOSE
*TCP_CLOSE_WAIT
*TCP_LAST_ACK
*TCP_LISTEN
*TCP_CLOSING
*/half_streamstructhalf_stream
/*
描述在
TCP
連接中一端的所有信息
,
可以是客戶端
,
也可以是服務(wù)端
*/{
charstate;
/*
表示套接字的狀態(tài)
,
也就是
TCP
的狀態(tài)
*/
charcollect;
/*
可以表示有數(shù)據(jù)到達(dá)
,
此數(shù)據(jù)存放在
data
成員中
,
也可以表示不存儲(chǔ)此數(shù)據(jù)到
data
中
,
此數(shù)據(jù)忽略
.
如果大于
0
就存儲(chǔ)
,
否則就忽略
*/
charcollect_urg;
/*
可以表示有緊急數(shù)據(jù)到達(dá)
,
此數(shù)據(jù)就存放在
urgdata
中
,
也可以表示不存儲(chǔ)此數(shù)據(jù)到
urgdata
中
,
此速數(shù)據(jù)忽略
.
如果大于
0
就存儲(chǔ)
,
否則就忽略
*/
char*data;
/*
用戶存儲(chǔ)正常接受到的數(shù)據(jù)
*/
intoffset;
/*
表示存儲(chǔ)在
data
中數(shù)據(jù)的第一個(gè)字節(jié)的偏移量
*/
intcount;
/*
表示從
TCP
連接開始已經(jīng)存儲(chǔ)到
data
中的數(shù)據(jù)的字節(jié)數(shù)
*/
intcount_new;
/*
有多少新的數(shù)據(jù)存儲(chǔ)到
data
中
,
如果為
0,
則表示沒有新的數(shù)據(jù)到達(dá)
*/
intbufsize;
intrmem_alloc;
inturg_count;
/*
用來存儲(chǔ)緊急數(shù)據(jù)
*/half_stream
u_intacked;
u_intseq;
u_intack_seq;
u_intfirst_data_seq;
u_charurgdata;
u_charcount_new_urg;
/*
表示有新的緊急數(shù)據(jù)到達(dá)
,
如果為
0
表示沒有新的緊急數(shù)據(jù)
*/
u_charurg_seen;
u_inturg_ptr;
u_shortwindow;
u_charts_on;
u_charwscale_on;
u_intcurr_ts;
u_intwscale;
structskbuff*list;
structskbuff*listtail;};
halfstream雖然數(shù)據(jù)結(jié)構(gòu)halfstream的成員非常多,但需要開發(fā)者特別注意的就那么幾個(gè)。其中成員state非常重要,它表示了當(dāng)前的TCP連接狀態(tài),只有知道了TCP連接狀態(tài)之后,才能進(jìn)行下一步的動(dòng)作。成員data用來存儲(chǔ)接收到的正常的網(wǎng)絡(luò)數(shù)據(jù)信息,而urgdata用來存儲(chǔ)接收到的緊急數(shù)據(jù)。判斷是否有新的正常數(shù)據(jù)到達(dá),是利用成員count_new來進(jìn)行判斷的:判斷是否有新的緊急數(shù)據(jù)到達(dá),是用成員count_new_urg來進(jìn)行判斷的。如果count_new大于0,就表示有新的正常數(shù)據(jù)到達(dá);如果count_new_urg大于O,就表示有新的緊急數(shù)據(jù)達(dá)到。然后就可以輸出新到達(dá)的數(shù)據(jù)內(nèi)容,正常數(shù)據(jù)存儲(chǔ)存data中,緊急數(shù)據(jù)存儲(chǔ)在urgdata中。Libnids
全局參數(shù)structnids_prm{intn_tcp_streams;intn_hosts;char*device;char*filename;intsk_buff_size;intdev_addon;void(*syslog)();intsyslog_level;intscan_num_hosts;intscan_delay;intscan_num_ports;
Libnids
全局參數(shù)void(*no_mem)(char*);int(*ip_filter)();char*pcap_filter;intpromisc;intone_loop_less;intpcap_timeout;intmultiproc;intqueue_limit;inttcp_workarounds;pcap_t*pcap_desc;};Libnids
全局參數(shù)此數(shù)據(jù)結(jié)構(gòu)描述的是Libnids的全局參數(shù),利用它可以對(duì)Libnids的一些環(huán)境參數(shù)進(jìn)行設(shè)置,設(shè)置之后對(duì)整個(gè)Libnids都有效。●成員n_tcp_streams表示哈西表大小,此哈西表用來存放tcp_stream數(shù)據(jù)結(jié)構(gòu),默認(rèn)值為1040。在同一時(shí)刻Libnids捕獲的TCP數(shù)據(jù)包的最大個(gè)數(shù)必須是此參數(shù)值的3/4。●成員n_hosts也是表示哈西表的大小,此哈西表是用來存儲(chǔ)IP碎片信息的,默認(rèn)值為256?!癯蓡Tfilename表示用來存儲(chǔ)網(wǎng)絡(luò)數(shù)據(jù)的捕獲文件。此文件的類型必須與Libpcap類型一致。如果設(shè)置了文件,與此同時(shí)就應(yīng)該設(shè)置成員device為NULL,默認(rèn)值為NULL。●成員device表示網(wǎng)絡(luò)接口,Libnids將在此網(wǎng)絡(luò)接口上捕獲數(shù)據(jù),默認(rèn)值為NULL。這樣Libnids將使用pcap_lookupdev來查找可用的網(wǎng)絡(luò)接口。如果其值為all,表示捕獲所有網(wǎng)絡(luò)接口的數(shù)據(jù)。Libnids
全局參數(shù)●成員sk_buff_size表示的是數(shù)據(jù)結(jié)構(gòu)sk_buff的人小。數(shù)據(jù)結(jié)構(gòu)sk_buff是Linux內(nèi)核中一個(gè)重要的數(shù)據(jù)結(jié)構(gòu),是用來進(jìn)行數(shù)據(jù)包排隊(duì)操作的,默認(rèn)值為168?!癯蓡Tdev_addon表示在數(shù)據(jù)結(jié)構(gòu)sk_buff中用于網(wǎng)絡(luò)接口上信息的字節(jié)數(shù)。如果是-1(默認(rèn)值),那么Libnids會(huì)根據(jù)不同的網(wǎng)絡(luò)接口進(jìn)行修正?!癯蓡Tsyslog是一個(gè)函數(shù)指針,默認(rèn)值為nids_syslog()函數(shù)。在syslog函數(shù)中可以檢測(cè)入侵攻擊,如網(wǎng)絡(luò)掃描攻擊,也可以檢測(cè)一些異常情況,如無效TCP標(biāo)記?!癯蓡Tsyslog_level表示日志等級(jí),默認(rèn)值為LOG_ALERT?!癯蓡Tscannum_hosts表示一個(gè)哈西表的大小,(此哈西表用來存儲(chǔ)端口掃描信息)表示Libnids將要檢測(cè)的同時(shí)掃描的端口數(shù)據(jù)。如果其值為O,Libnids將不提供端口掃描功能。默認(rèn)值為256?!癯蓡Tscan_num_ports表示相同源地址必須掃描的TCP端口數(shù)目,默認(rèn)值為10。●成員scan_delay表示在掃描檢測(cè)中,兩端口掃描的間隔時(shí)間,以毫秒來計(jì)算,缺省值為3000。Libnids
全局參數(shù)成員no_mem是一個(gè)函數(shù)指針,當(dāng)Libnids發(fā)生內(nèi)存溢出時(shí)被調(diào)用?!癯蓡Tip_filter是一個(gè)函數(shù)指針,此函數(shù)可以用來分析IP數(shù)據(jù)包,當(dāng)有IP數(shù)據(jù)包到達(dá)時(shí),此函數(shù)就被調(diào)用。如果此函數(shù)返回非零值,此數(shù)據(jù)包就被處理;如果返回零,此IP數(shù)據(jù)包就被丟棄。默認(rèn)值為nids_ip_filter函數(shù),總是返回1?!癯蓡Tpcap_filter表示過濾規(guī)則,即Libpcap的過濾規(guī)則,默認(rèn)值為NULL,表示捕獲所有數(shù)據(jù)包。可以在此設(shè)置過濾規(guī)則,只捕獲感興趣的開發(fā)包。●成員promisc表示網(wǎng)卡模式,如果是非零,就把此網(wǎng)卡設(shè)為混雜模式:否則,設(shè)為非混雜模式。默認(rèn)值為1?!癯蓡Tone_loop_less初始值為O?!癯蓡Tpcap_timeout表示捕獲數(shù)據(jù)返回的時(shí)間,以毫秒計(jì)算。實(shí)際上它表示的就是Libpcap函數(shù)中的pcap_open_live函數(shù)的timeout參數(shù),默認(rèn)值為1024。在Libnids中用nids_prm數(shù)據(jù)結(jié)構(gòu)定義了一個(gè)全部變量nids_params。在使用Libnids開發(fā)程序時(shí),可以首先對(duì)nids_params全局變量的值進(jìn)行修改,這樣對(duì)整個(gè)Libnids就全部有效。Libnids
全局參數(shù)初始值(書面)structnids_prmnids_params={1040, /*n_tcp_streams*/256, /*n_hosts*/NULL, /*device*/NULL, /*filename*/168, /*sk_buff_size*/-1, /*dev_addon*/nids_syslog, /*syslog()*/LOG_ALERT, /*syslog_level*/256, /*scan_num_hosts*/3000, /*scan_delay*/10, /*scan_num_ports*/
Libnids
全局參數(shù)初始值(書面)nids_no_mem, /*no_mem()*/nids_ip_filter, /*ip_filter()*/NULL, /*pcap_filter*/1, /*promisc*/0, /*one_loop_less*/1024 /*pcap_timeout*/};nids_ip_filter函數(shù)的定義如下:staticintnids_ip_filter(structip*x,intlen){(void)x;(void)len;return1;}Libnids
全局參數(shù)初始值(機(jī)打)n_tcp_stream:1040n_hosts:256device:(null)filename:(null)sk_buff_size:168dev_addon:-1void(*syslog()):0x4027a0syslog_level:1scan_num_hosts:256scan_delay:3000scan_num_ports:10Libnids
全局參數(shù)初始值(機(jī)打)void(*no_men)(char*):0x405930(*ip_filter)():0x402790*pcap_filter:(null)promisc:1one_loop_less:0pcap_timeout:1024multproc:0queue_limit:20000tcp_workarounds:0利用Libnids開發(fā)的流程1、用函數(shù)nids_init()進(jìn)行初始化2、注冊(cè)相應(yīng)的回調(diào)函數(shù),不同的回調(diào)函數(shù)實(shí)現(xiàn)不同的功能3、利用函數(shù)nids_run()進(jìn)入循環(huán)捕獲數(shù)據(jù)包的狀態(tài)libnids函數(shù)1.基本函數(shù)2.IP碎片函數(shù)3.TCP數(shù)據(jù)流重組函數(shù)4.UDP注冊(cè)函數(shù)基本函數(shù)(1)intnids_init(void);//對(duì)libnids進(jìn)行初始化(2)voidnids_run(void);//運(yùn)行Libnids,進(jìn)入循環(huán)捕獲數(shù)據(jù)包狀態(tài).(3)intnids_getfd(void);//獲得文
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 野生艾草收購合同范本
- 《李華解讀與營銷策略》課件
- 《當(dāng)代包裝》課件
- 籃球運(yùn)動(dòng)全解析
- 科學(xué)的日常探秘
- 《紫外光譜和熒光光》課件
- 教育心理學(xué)在管理中的應(yīng)用
- 健康之道 未來之光
- 加工機(jī)械設(shè)備合同范本
- 品牌合作店鋪合同范本
- 紅外線測(cè)溫技術(shù)方案
- 人教版八年級(jí)下冊(cè)英語全冊(cè)教案完整版教學(xué)設(shè)計(jì)含教學(xué)反思
- 銀行案件風(fēng)險(xiǎn)排查方案
- 2020年中國高爾夫球運(yùn)動(dòng)行業(yè)發(fā)展現(xiàn)狀及趨勢(shì)分析:消費(fèi)大眾化、年輕化圖
- 《中華人民共和國職業(yè)分類大典》電子版
- HD7簡(jiǎn)明實(shí)用操作手冊(cè)
- 最終版冷卻塔安裝施工方案
- 徠卡說明書tps1200系列全站儀tps
- 干式變壓器和低壓配電柜日常巡檢書
- 研究性學(xué)習(xí)成果一覽表
- 生產(chǎn)一致性控制計(jì)劃
評(píng)論
0/150
提交評(píng)論