一、要求
作業題目
Linux下的多進程/線程網絡通信
作業目標
要求學生熟練掌握《Linux編程》課程中的知識點,包括Linux常用命令、bash腳本、編譯和調試環境、讀寫文件、進程間通信和網絡編程等。基於以上知識點,分組編程完成本作業的具體要求。
問題描述
圖1 Linux編程大作業示意圖
網絡數據的抓取和分析已經成為通信大數據分析的重要內容之一。本作業要求在Linux下使用C語言實現一個抓取並分析網絡數據的軟件系統。該系統采用客戶端和服務器端開發模式。
在客戶端,設計兩個進程P1和P2同時讀取網卡上的數據,P1讀取數據后,負責將TCP報文中的頭部數據寫入到Packet文件中,P2讀取數據后,負責將UDP報文的頭部同樣寫入到Packet文件中。另外,還需要將數據發送到服務器端存儲。
服務器端軟件需要一個進程接收客戶端發送的文件,並將接收到的數據保存成一份文件。
程序運行之后,用戶可以隨時終止程序的運行(比如按下CTRL+C),要求兩個進程P1和P2在結束前將各自讀取的報文數量(N_rev_P1、N_rev_P2)和各自寫入Packet文件中報文的數量(N_wrt_P1、N_wrt_P2)分別寫入Report文件中,並計算讀取與寫入的百分比(N_wrt_P1/N_rev_P1、N_wrt_P2/N_rev_P2)寫入到Report文件。
設計要求
(1) Packet文件要求按照圖1所示格式,“序號 [TCP/UDP]:TCP報文段或者UDP報文段首部”,如“1 [TCP]:.... ”(下一次寫入需要換行)。Report文件要求按照圖1所示格式,如“N_rev_P1:10”(換行);
(2) 實現軟件要求可演示,通過應用或者通過測試代碼發送測試TCP/UDP報文;
(3) 采用Socket通信機制完成客戶端/服務器端數據傳輸;
(4) 采用C語言在Linux環境下實現,可以采用兩個虛擬機分別模擬客戶端和服務器端;
(5) 實驗報告書寫認真,重點突出(建議頁數6-8頁),每人提交一份,明確自己所做工作,針對自己負責的軟件模塊不要貼代碼,可以有流程圖,並給出測試和運行結果;
(6) 代碼結構清晰、源文件結構合理,使用本課程所講的Makefile文件進行編譯和維護軟件視為加分項。
時間和其它要求
(1) 本次作業要求分組完成,每組人數至多5人,每組提交一份源代碼;
(2) 完成的小組,可以在第18周實驗課的時候交給老師檢查,包括報告(打印版)和程序演示,電子版交班長(班長未選課,選課排最前的學生)匯總之后發給老師,未完成的小組,最遲於第19周交給老師檢查;
(3) 注:獨立完成,如果存在抄襲等現象,一旦發現視為不及格。
二、完成代碼
加QQ:330052999
三、說明
程序中要修改的地方為:文件路徑
關於評論中的“段錯誤:核心已轉儲”:文件要創建后再運行程序
四、其他
em,其實可以不用libpcab函數庫,可以直接使用原始套接字到網卡上抓包,並且只抓IP包即可。
我有時間實現一下。
