我知道你一定聽過wireshark,wireshark真的很好用,可是有個更輕量的Linux命令:tcpdump。它能很容易的抓到包的,最關(guān)鍵的是命令可以直接結(jié)合linux的管道,威力無窮。
比如,最簡單的
sudo tcpdump host jianshu.com
它會抓取于jianshu.com這個host相通信的所有包,當(dāng)然,你可再細(xì)一點指定過濾條件:
指定協(xié)議
sudo tcpdump ip host jianshu.com
sudo tcpdump tcp port 80
注意:sudo tcpdump tcp port 80 host jianshu.com
這樣寫,會報
tcpdump: 'tcp' modifier applied to host的錯
這時有兩種方法:
1.使用and 關(guān)鍵字
sudo tcpdump tcp port 80 and host jianshu.com
2.使用管道來查看
ping jianshu.com
得到j(luò)ianshu.com的ip 120.132.92.21
sudo tcpdump tcp port 80 | grep 120.132.92.21
指定源和目標(biāo)
這很簡單,用src代表源;用dist代表目標(biāo)
sudo tcpdump src host 120.132.92.21
使用與或非過濾
非是 'not ' '! ',與運算是'and','&&';或運算 是'or','││';
我還是推薦用not and or 這樣的詞,當(dāng)然符號也行,但這樣更好理解。
比如我們上面用到了and
還可以用not或者or來篩選主機(jī)
sudo tcpdump host \(210.27.48.2 or 210.27.48.3 \)
這里用到了括號,用以簡化形式,**一定注意,使用命令行時,括號要帶上這兩個斜杠,并且不能和括號直接有空格! **
查看抓到的數(shù)據(jù)
如果你不帶-X參數(shù),那么抓到的只是這樣的概述:
16:08:18.731680 IP 120.132.92.21.http > 192.168.16.163.45134: Flags [.], ack 43441, win 461, options [nop,nop,TS val 766985341 ecr 5849335], length 0
大體是 系統(tǒng)時間 來源主機(jī).端口 > 目標(biāo)主機(jī).端口 數(shù)據(jù)包參數(shù)
如果要查看詳細(xì)的使用 -w 參數(shù)指定輸出文件,或者帶上-X參數(shù)。
我的建議是把數(shù)據(jù)輸出到文件。輸出的文件是16進(jìn)制的,你可以用一些處理十六進(jìn)制的命令讀出來,例如使用xxd輸出抓到的包的文件 zhuabao.txt
cat zhuabao.txt | xxd
00000000: d4c3 b2a1 0200 0400 0000 0000 0000 0000 ................
00000010: 0000 0400 0100 0000 d9a6 fc57 9311 0300 ...........W....
00000020: 4a00 0000 4a00 0000 c83a 3560 0630 8c89 J...J....:5`.0..
00000030: a5c3 787f 0800 4500 003c f8f6 4000 4006 ..x...E..<..@.@.
00000040: 8440 c0a8 10a3 b7fc 343d c530 0050 d40d .@......4=.0.P..
00000050: 0ae4 0000 0000 a002 7210 8184 0000 0204 ........r.......