原本想安裝wiresharkhtml
yum install wireshark 命令行下使用,包含抓包的基本功能linux
yum install wireshark-gnome 提供wireshark(UI)工具,依賴wireshark RPM服務器
root@localhost: wireshark
wireshark: symbol lookup error: wireshark: undefined symbol: gtk_combo_box_text_new_with_entry
不能啓動圖形界面,因此採用linux下流量監控及抓包工具tcpdump網絡
安裝:yum install tcpdumptcp
截獲某IP的主機的網絡數據包:工具
tcpdump host 192.168.0.120
TCP協議要創建鏈接要通過3次「握手」,截取的數據包也是從3次握手開始,能夠看到前三個包的狀態(Flags)分別是:學習
[S]、[S.]、[.]測試
首先是客戶端向服務端發送一個10位的序號給服務端;服務端收到後把它+1再返回回去;客戶端檢查返回來的序號是對的,就返回給服務端一個1。根據上面的描述,知道這三個包知足:第一個包的seq+1=第二個包的ack;第三個包的ack=1編碼
注意:開始發送時,發送方是按三次握手完成時定下的序列號和ack來進行通訊的,客戶端一直在發,客戶端的seq不斷的按發送字節數在累加,而服務器是應答端,seq始終不變。同理若客戶端做爲應答端的話,它的seq也是不變的spa
TCP協議要斷開鏈接要通過4次「揮手」,上面數據包的最後3條就是揮手的過程。細心的朋友會發現前面說的4次揮手,卻只有3個包,這不是筆誤。
最後三個包的狀態分別是:
[F.]、[F.]、[.]
ACK延遲發送機制,若是系統禁用了延遲發送,就會看到4個包了
cron能夠定時執行抓包的時間
抓包命令:
tcpdump -c 100000 -w /home/kang/Desktop/test.txt -n
註釋:抓10萬個包,存在test.txt文件裏,-n的意思是不對原地址和目的地址進行DNS查詢
讀文件命令:
tcpdump -r /home/kang/Desktop/test.txt -X -vv
註釋:-r是讀文件,-X是以ASCII碼顯示內容。-VV是以詳細的報文信息顯示
-x是以十六進制打印,-X是以十六進制和ASCII同時打印,都不包含數據鏈路頭部,-xx -XX 包含數據鏈路層的頭部,其他的同樣。
總共打印的數據大小不會超過整個數據包的大小與snaplen中的最小值,若是高層協議數據沒有snaplen那麼長,則Ethernet層的填充數據也會被打
詳細參數參考這裏
查看txt編碼::set fileencodin
轉編碼:iconv -f GBK -t UTF-8 file1 -o file2
iconv -f gbk -t utf8 file1 .txt > file2.txt
打印結果:部分是解析的結果,部分是十六進制,顯示的比較亂,轉換格式也沒有用
緣由:tcpdump對截獲的數據並無進行完全解碼,數據包內的大部份內容是使用十六進制的形式直接打印輸出的,因此一般的解決辦法是顯示用帶-w的tcpdump保存到i文件中,再使用wireshark進行解碼分析,而且定義過濾規則,以免捕獲的數據包鋪滿整個硬盤。
tcpdump爲了方便wireshark工具認識,保存的文件名最好是xx.pcap後綴。例如:
tcpdump -nn -s 0 host 192.168.0.120 and port -80 -w wireshark.pcap
-s 設置捕獲數據包的長度,抓取數據包時原來默認長度是68字節,加上-S 0後能夠抓到完整的數據包
使用tcpdump只抓取http包:
tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
0x4745爲「GET」前兩個字母「GE」,0x4854爲「HTTP」前兩個字母「HT」
101.227.172.51.80
115.25.210.10.80
61.135.132.59.80
222.23.55.208.80
61.135.132.59
220.181.11.98
ip/dns解析:http://dns.aizhan.com/,查詢到DNS解析的URL和地址
tcpdump抓取具體某個網頁的數據包:
tcpdump -s 0 tcp port 80 -w sohu1.cap
在打開firefox以後,輸入www.sohu.com。先別運行,先運行以上命令,再刷新頁面(以前作過測試,firefox沒有輸入任何命令時,抓取的數據包爲0)
再用wireshark——open打開,並用statistic來統計,參考一站式學習wireshark:http的統計
若是單獨是tcpdump,默認狀況下,tcpdump會選擇第一塊網卡,也就是eth0,進行抓包
tcpdump是基於Unix系統的命令行式的數據包嗅探工具。若是要使用tcpdump抓取其餘主機MAC地址的數據包,必須開啓網卡混雜模式,所謂混雜模式,用最簡單的語言就是讓網卡抓取任何通過它的數據包,通常而言,Unix不會讓普通用戶設置混雜模式,由於這樣能夠看到別人的信息,好比telnet的用戶名和密碼,開啓混雜模式的命令是:ifconfig eth0 promisc, eth0是你要打開混雜模式的網卡
過濾器(BPF語言)的使用
tcpdump tcp -i eth0 -t -s 0 and port 8080 -w ./bb.cap
tcpdump host 192.168.0.148 and tcp port 22
tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) 截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通訊
tcpdump ip host 210.27.48.1 and ! 210.27.48.2 獲取主機210.27.48.1除了和主機210.27.48.2以外全部主機通訊的ip包
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
詳情可參考tcpdump詳細參數