国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 網絡通信 > 正文

協議恢復實現

2019-11-04 11:46:08
字體:
來源:轉載
供稿:網友

由于網友的要求和關注,本人計劃以實現IDS內容恢復和內容檢測為目標,寫一下協議恢復的編程實現,開發環境 linux。由于本人技術能力和時間有限,其內容在以后逐步編寫發布,內容有錯誤等,請大家指正。

大家對此有什么要求和看法,均可提出。

目錄
1、協議恢復接收數據部分
2、如何處理接收到的數據
3、處理保存的數據
4、內容檢測
5、需要的知識

1、協議恢復接收數據部分

軟件環境:linux+MySQL
硬件環境:網卡

設置網卡為混雜模式,這樣網卡就可以監聽網絡上的數據。
本文對于接收網絡數據是通過接收mmap io輸入的原始數據包,經過一系列的處理,產生用于內容恢復、連接審計、實時監控的輸出。本文只介紹內容恢復(包括內容檢測),其他部分雷同。

如下圖所示:
協議恢復實現

第一步:打開原始socket,為了接收數據。
    if ((fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0) {
          perror("socket()");
          return 1;
    }
第二步:設置MMAP BUF大小等。
    req.tp_block_size = BLOCK_SIZE;
    req.tp_block_nr = BLOCK_NR;
    req.tp_frame_size = FRAME_SIZE;
    req.tp_frame_nr = FRAME_NR;
    setsockopt(fd, SOL_PACKET, PACKET_RX_RING, (char *)&req, sizeof(req))
關于packet mmap的使用見http://pusa.uv.es/~ulisses/packet_mmap/packet_mmap.txt
所說的:
From the system calls stand point, the use of PACKET_MMAP involves
the following PRocess:

[setup]   socket() -------> creation of the capture socket
        setsockopt() ---> allocation of the circular buffer (ring)
        mmap() ---------> maping of the allocated buffer to the
                    user process

[capture]   poll() ---------> to wait for incoming packets

[shutdown] close() --------> destrUCtion of the capture socket and
                    deallocation of all associated
                    resources.
http://pusa.uv.es/~ulisses/packet_mmap/tmp/RFCDocumentation%20PACKET_MMAP%20memory%20allocation_new.txt

3、處理保存的數據    我們保存的數據可以是以ip,PORT,時間等要害字來保存,對于TCP協議來說,一個文件就是一個完整的TCP連接了,那么現在就可以讀取文件來恢復數據了。    一般我們可以按照PORT來劃分協議,比如21端口是FTP,23端口是TELNET,80端口是HTTP等,但有寫協議可能以其他端口出現,例如HTTP,可以是8000,8080等等,可以根據數據內容來判定協議。    假如是HTTP協議,HTTP:根據客戶端“GET、HEAD、POST”和服務端“200 OK”來判定是否是一個完整的請求,同時獲取URL;
根據“Host:”來獲取域名;
根據“Content-Type:”來判定文件類型;
根據“Content-Encoding: gzip”來判定GZIP;
根據“Transfer-Encoding: chunked”來判定是否以chunked方式編碼傳輸。
   例如SMTP協議,先根據“EHLO”或“HELO”獲取用戶名,假如有認證,就根據“AUTH PLAIN”或“AUTH LOGIN”信息來獲取用戶名,它們都是以BASE64編碼(AUTH Foobar、AUTH CRA-md5、AUTH DIGEST-MD5等);
根據“MAIL FROM:”,“SEND FROM:”,“SOML FROM:”來獲取發件人;
根據“RCPT TO:”來獲取收件人,這里收件人會是多個;
郵件的主體在“DATA”后面,郵件的主題從郵件里獲取“Subject:”;
根據“Content-type: multipart/mixed;”來判定是否有附件,注重有的附件是以“begin”開始,“end”結束的。
根據服務端返回“250”來判定郵件結束,后面假如還有DATA,那就繼續分析一個新的郵件。

這里對協議分析,我就簡單介紹一下,其他協議也一樣。根據自己的情況來增加所需要的協議。


4、內容檢測    內容檢測是在內容恢復的基礎上進行的,我們上面已經對數據進行協議恢復,那么就可以根據我們設置的要害字進行檢測了,對于一些數據是進行編碼的,那么我們就需要解碼后進行檢測,例如SMTP,POP3等很多是mime編碼后的數據,例如HTTP數據有的是GZIP編碼,有的加了CHUNKED等等。    我這里只是提一下,大家可以根據自己的想法,發揮想象能力,做出更好的內容來。

5、需要的知識
A、基礎知識,包括C,linux操作,socket等。
B、packet mmap io知識
C、算法 ,如AVL,hash,qsort,bm等,好的算法,提高處理效率。
D、編碼知識,如BASE64,QP,GZIP,HZ,BIG5等。
E、協議知識,大量RFC等協議實現。
F、其他經典程序,如snort,tcpdump等都有此類似功能。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 郧西县| 榆林市| 元江| 阿克苏市| 阳江市| 青阳县| 监利县| 石渠县| 法库县| 大化| 寻乌县| 聂荣县| 台北市| 新巴尔虎左旗| 蓬安县| 佳木斯市| 修文县| 镇坪县| 乃东县| 雷州市| 汕头市| 上林县| 甘肃省| 金湖县| 军事| 马山县| 喀喇沁旗| 静海县| 深水埗区| 泌阳县| 元阳县| 同心县| 望江县| 麻江县| 廊坊市| 罗甸县| 汝南县| 龙岩市| 彭阳县| 同德县| 梧州市|