linux開發之網絡log的抓取

linux網絡log的抓取可使用命令tcpdump來抓取,命令詳細信息以下:linux

tcpdump網絡

options:socket

-a:嘗試將網絡和廣播地址轉換成名稱;tcp

-c<數據包數目>:收到指定的數據包數目後,就中止進行傾倒操做;函數

-d:把編譯過的數據包編碼轉換成可閱讀的格式,並傾倒到標準輸出;編碼

-dd:把編譯過的數據包編碼轉換成C語言的格式,並傾倒到標準輸出;spa

-ddd:把編譯過的數據包編碼轉換成十進制數字的格式,並傾倒到標準輸出;.net

-e:在每列傾倒資料上顯示鏈接層級的文件頭;接口

-f:用數字顯示網際網絡地址;內存

-F<表達文件>:指定內含表達方式的文件;

-i<網絡界面>:使用指定的網絡截面送出數據包;

-l:使用標準輸出列的緩衝區;

-n:不把主機的網絡地址轉換成名字;

-N:不列出域名;

-O:不將數據包編碼最佳化;

-p:不讓網絡界面進入混雜模式;

-q :快速輸出,僅列出少數的傳輸協議信息;

-r<數據包文件>:從指定的文件讀取數據包數據;

-s<數據包大小>:設置每一個數據包的大小;

-S:用絕對而非相對數值列出TCP關聯數;

-t:在每列傾倒資料上不顯示時間戳記;

-tt: 在每列傾倒資料上顯示未經格式化的時間戳記;

-T<數據包類型>:強制將表達方式所指定的數據包轉譯成設置的數據包類型;

-v:詳細顯示指令執行過程;

-vv:更詳細顯示指令執行過程;

-x:用十六進制字碼列出數據包資料;

-w<數據包文件>:把數據包數據寫入指定的文件。

 

tcpdump能夠在命令中輸入獲取,那若是後臺獲取網絡log並保存成文件呢,這裏有兩種方式。

第一種,也是利用tcpdump,將應用程序攜程deamon的形式,並使用system函數執行tcpdump -i eth0 -w filename。這種方式比較簡單,而且平臺兼容性比較強,由於咱們只是調用的平臺提供的接口而已。

第二種,直接抓取鏈路層的網絡數據,linux提供了原始套接字RAW_SOCKET,能夠獲取鏈路層的報文。這裏也有兩種方式獲取數據,第一種是經過socket的方式,打開指定的網卡,而後經過recv函數獲取數據。另一種是使用packet_mmp共享內存的方式獲取數據。讀取出來的數據保存成pcap的文件格式。這種方式平臺的兼容性較差。保存成pcap文件時linktype很重要,若是linktype錯誤,會致使報錯誤甚至打不開的狀況。有的時候就算linktype正確也會由於平臺的差別而致使讀取的數據但是不符而打開失敗。

相關文章
相關標籤/搜索