• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 協議恢復實現

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    由于網友的要求和關注,本人計劃以實現IDS內容恢復和內容檢測為目標,寫一下 協議 恢復的編程實現, 開發 環境 linux 。由于本人技術能力和時間有限,其內容在以后逐步編寫發布,內容有錯誤等,請大家指正。 大家對此有什么要求和看法,均可提出。 目錄 1、

    由于網友的要求和關注,本人計劃以實現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等都有此類似功能。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>