1.tcpdump工具的使用:用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據使用者的定義對網絡上的數據包進行截獲的
包分析工具。 tcpdump可以將網絡中傳送的數據包的“頭”完全截獲下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾,並提
供and、or、not等邏輯語句來幫助你去掉無用的信息。
語法:
tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F file ]
[ -i interface ] [ -m module ] [ -M secret ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ expression ]
c 設定抓多少個包後自動停止 s 指定抓每個包的前多少字節(默認56字節)
w 保存到某個文件 r 讀文件
v 顯示更詳細 n 不顯示主機名,顯示IP
nn 也把端口顯示爲數值,否則顯示端口服務名 i 指定哪塊網卡
host 指定某個主機 port 指定某個端口
net 指定某個網絡 tcp 指定抓tcp包
udp 指定抓udp包 ip 指定抓ip包
icmp 指定抓icmp包 src host 指定源主機
dst host 指定目的主機 dst port 指定目的端口
2.使用舉例
抓164訪問本地22端口的包 ,單向的
[root@stu24 ~]# tcpdump -i eth0 -n src host 192.168.0.164 and dst port 22
抓164ping本地的包
[root@stu24 ~]# tcpdump -i eth0 -n icmp and src host 192.168.0.164
當網卡工作於混雜模式裏時
[root@stu24 ~]# tcpdump -i eth0 -n dst port 22 or dst port 80
兩種條件一起抓
[root@stu24 ~]# tcpdump -i eth0 -n 'src host 192.168.0.164 and dst port 22' or 'src host 192.168.0.4 and dst port 80'二者等價
[root@stu24 ~]# tcpdump -i eth0 -n \(src host 192.168.0.164 and dst port 22\) or \(src host 192.168.0.4 and dst port 80\)
tcpdump -i eth0
tcpdump -i eth0 -v -n
-v 顯示包含有TTL,TOS值等等更詳細的信息 -n不要做IP解析爲主機名 -nn不做名字解析和端口解析
更有針對性的抓包:針對IP,網段,端口,協議
[root@ ftp]# tcpdump -i eth0 -vnn host 192.168.0.154
[root@ ftp]# tcpdump -i eth0 -vnn net 192.168.0.0/24
[root@ ftp]# tcpdump -i eth0 -vnn port 22
[root@ ftp]# tcpdump -i eth0 -vnn udp
[root@ ftp]# tcpdump -i eth0 -vnn icmp
[root@ ftp]# tcpdump -i eth0 -vnn arp
[root@ ftp]# tcpdump -i eth0 -vnn ip
[root@ ftp]# tcpdump -i eth0 -vnn src host 192.168.0.154
[root@ ftp]# tcpdump -i eth0 -vnn dst host 192.168.0.154
[root@ ftp]# tcpdump -i eth0 -vnn src port 22
[root@ ftp]# tcpdump -i eth0 -vnn src host 202.106.0.254 and dst port 22
[root@ ftp]# tcpdump -i eth0 -vnn src host 192.168.0.154 or port 22
[root@ ftp]# tcpdump -i eth0 -vnn src host 192.168.0.154 and not port 22
[root@ ftp]# tcpdump -i eth0 -vnn \( src host 192.168.0.2 and dst port 22 \) or \( src host 192.168.0.65 and dst port 80 \)
[root@ ~]# tcpdump -i eth0 -vnn -r /tmp/fil1 tcp
[root@ ~]# tcpdump -i eth0 -vnn -r /tmp/fil1 host 202.106.0.258
[root@ ~]# tcpdump -i eth0 -vnn -r /tmp/fil1 tcp
[root@ ~]# tcpdump -i eth0 -vnn -w /tmp/fil1 -c 100
3.包文分析
16:50:11.916308 IP 10.37.63.3.52346 > 61.135.169.121.http: Flags [P.], seq 1888894293:1888894434, ack 2526934942, win 8192,
length 141: HTTP: GET / HTTP/1.1
第一列是時間戳:時、分、秒、微秒
第二列是網際網路協議的名稱
第三列是報文發送方的十進制的網際網路協議地址,以及緊跟其後的端口號(偶爾會是某個協議名如 http ,如果在此處仍然顯示端口號加上 -n 選項)
第四列是大於號
第五列是報文接收方的十進制的網際網路協議地址,以及緊跟其後的端口號(偶爾會是某個協議名如 http ,如果在此處仍然顯示端口號加上 -n 選項)
第六列是冒號
第七列是 Flags 標識,可能的取值是 [S.] [.] [P.] [F.]
第八、九、十……列 是tcp協議報文頭的一些變量值:
seq 是 請求同步的 序列號
ack 是 已經同步的 序列號
win 是 當前可用窗口大小
length 是 tcp協議報文體的長度
如果加入了-S選項,會看到的 seq, ack 是 兩個冒號分割的值,分別表示變更前、後的值。
每一行中間都有這個包所攜帶的標誌:
S=SYN,發起連接標誌。 P=PUSH,傳送數據標誌。 F=FIN,關閉連接標誌。ack,表示確認包。RST=RESET,異常關閉連接。
.,表示沒有任何標誌。
4.linux(tcpdump抓包)和windows(wireshark分析)配合抓包分析。
tcpdump 與wireshark
Wireshark(以前是ethereal)是Windows下非常簡單易用的抓包工具。但在Linux下很難找到一個好用的圖形化抓包工具。
還好有Tcpdump。我們可以用Tcpdump + Wireshark 的完美組合實現:在 Linux 裏抓包,然後在Windows 裏分析包。
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾數據報的類型
(2)-i eth1 : 只抓經過接口eth1的包
(3)-t : 不顯示時間戳
(4)-s 0 : 抓取數據包時默認抓取長度爲68字節。加上-S 0 後可以抓到完整的數據包
(5)-c 100 : 只抓取100個數據包
(6)dst port ! 22 : 不抓取目標端口是22的數據包
(7)src net 192.168.1.0/24 : 數據包的源網絡地址爲192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析
步驟:
1)啓動8080端口,tcpdump抓包命令如下:
tcpdump -i lo0 -s 0 -n -S host 10.37.63.3 and port 8080 -w ./Desktop/tcpdump_10.37.63.3_8080_20160525.cap
# 然後再執行curl
curl http://10.37.63.3:8080/atbg/doc
2)使用Wireshark打開tcpdump_10.37.63.3_8080_20160525.cap文件
wireshark請參考:https://www.cnblogs.com/shenpengyan/p/5912567.html