編程隨記 ---- 拼包程序(一)

編程隨記 ---- 拼包程序(一)
    六月中旬的某一天,老大的一封郵件把我招進了實驗室,開始研究和項目爲主的
實驗室生活。
    剛進去,彼此互不熟悉。老大就讓我編寫一個拼包程序,以此來瞧瞧我的編程能
力。給我講了功能之後,還給了我一個工程框架。讓我以此作爲基礎和環境來coding。
    爲了給我一些壓力,老大還給了一個性能要求,每秒處理50MB數據包。而且不能
用winpcap,只能自己分析包,處理包,然後拼接成一個TCP數據流。還給了一個該程
序運行的環境:主幹網。哎,現在想來,主幹網成爲了後面不可逾越的鴻溝。而當時
的想當然卻把這個極其重要的條件給忽略掉了。從而使自己走了很多彎路。可惜,等
我發現時,已經在很晚很晚的後來了。。。
    時間給了我兩個星期。於是抽出一天的時間來研究用windump捕獲下來的包格式。
安裝了winpcap後,打開網頁,隨便瀏覽了幾分鐘。用windump來捕獲這段時間的數據
包。誰知不可思議的事情發生了,居然捕獲的數據包爲0個。怎麼可能呢?很顯然那個
地方出現了問題。關了防火牆,再重試了一遍,還是爲0個數據包。問題出現在哪呢?
自己捉摸了很久,也沒研究出個所以然來。實在不行,於是在其他機子上試了下,居
然也沒法正常捕獲數據包。難道是windump的問題?這個問題一直在腦中盤踞了很久。
知道後來的某一天,使用了Ethereal後才找到了原因。
    在網上用google搜了搜,結果也沒找到什麼原因來。實在沒辦法,只好從MIT網
上和師兄那邊分別找來了已經捕獲下來的wpcap格式的文件。先研究一下該格式再說,
windump的問題以後有時間再去研究。
    繼續利用google,在網上逛了一圈,終於找到心儀的資料,找到了wpcap格式的
具體介紹。用UE打開wpcap格式的文件一比較,果然如此。
    打來VC6.0,開始編程解析wpcap格式的數據包。很輕鬆的就搞定了。
    今天的任務搞定了,下次研究IP和TCP頭。

wpcap文件格式:
    每個wpcap格式的文件頭都有24自己的特殊頭文件:pcap_file_header。並且頭四
個字節必須爲:0xA1 0xB2 0xC3 0xD4或者爲0xD4 0xC3 0xB2 0xA1。前者表示爲大端
字節序,後者表示的是intelPC機的小端字節序。
    每個以太網包又封裝了一個pcap包頭。該包頭有16個字節。前8個字節表示時間,
後8個字節中前4個字節爲後面的鏈路層數據包在文件裏面的長度,後4個字節爲該鏈路
層數據包的實際長度。兩者可能不同是因爲可能存在截斷的情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章