Ubuntu 16.04 安裝 Wireshark分析tcpdump的pcap包——sudo apt install wireshark-qt


tcpdump 的抓包保存到文件的命令參數是-w xxx.cap
 
抓eth1的包 
tcpdump -i eth1 -w /tmp/xxx.cap 
 
抓 192.168.1.123的包 
tcpdump -i eth1 host 192.168.1.123 -w /tmp/xxx.cap 
 
抓192.168.1.123的80端口的包 
tcpdump -i eth1 host 192.168.1.123 and port 80 -w /tmp/xxx.cap 
 
抓192.168.1.123的icmp的包 
tcpdump -i eth1 host 192.168.1.123 and icmp -w /tmp/xxx.cap 
 
抓192.168.1.123的80端口和110和25以外的其他端口的包 
tcpdump -i eth1 host 192.168.1.123 and ! port 80 and ! port 25 and ! port 110 -w /tmp/xxx.cap 
 
抓vlan 1的包 
tcpdump -i eth1 port 80 and vlan 1 -w /tmp/xxx.cap 
 
抓pppoe的密碼 
tcpdump -i eth1 pppoes -w /tmp/xxx.cap 
 
 
以100m大小分割保存文件, 超過100m另開一個文件 -C 100m 
 
抓10000個包后退出 -c 10000 
 
后台抓包, 控制台退出也不會影響: 
nohup tcpdump -i eth1 port 110 -w /tmp/xxx.cap & 
 
抓下來的文件可以直接用ethereal 或者wireshark打開。
 

Ubuntu 16.04 安裝 Wireshark

添加Wireshark源:

安裝 wireshark:

是否允許普通用戶抓包:

Ubuntu 16.04 安裝 Wireshark

Ubuntu 16.04 安裝 Wireshark

 

過濾器

機器上的網絡報文數量異常的多,很多時候我們只關系和具體問題有關的數據報(比如訪問某個網站的數據,或者 icmp 超時的報文等等),而這些數據只占到很小的一部分。把所有的數據截取下來,從里面找到想要的信息無疑是一件很費時費力的工作。而 tcpdump 提供了靈活的語法可以精確地截取關心的數據報,簡化分析的工作量。這些選擇數據包的語句就是過濾器(filter)!

過濾器也可以簡單地分為三類:type, dirproto

Type 讓你區分報文的類型,主要由 host(主機), net(網絡) 和 port(端口) 組成。srcdst 也可以用來過濾報文的源地址和目的地址。

host: 過濾某個主機的數據報文

tcpdump host 1.2.3.4 

src, dst: 過濾源地址和目的地址

tcpdump src 2.3.4.5 tcpdump dst 3.4.5.6 

net: 過濾某個網段的數據,CIDR 模式

tcpdump net 1.2.3.0/24 

proto: 過濾某個協議的數據,支持 tcp, udp 和 icmp。使用的時候可以省略 proto 關鍵字。

tcpdump icmp 

port: 過濾通過某個端口的數據報

tcpdump port 3389 

src/dst, port, protocol: 結合三者

tcpdump src port 1025 and tcp tcpdump udp and src port 53 

此外還有指定端口和數據報文范圍的過濾器:

port 范圍

tcpdump portrange 21-23 

數據報大小,單位是字節

tcpdump less 32 tcpdump greater 128 tcpdump > 32 tcpdump <= 128 

過於過濾器的更多詳細信息,請訪問 tcpdump 官方 map page 的 PCAP-FILTER 部分

輸出到文件

使用 tcpdump 截取數據報文的時候,默認會打印到屏幕的默認輸出,你會看到按照順序和格式,很多的數據一行行快速閃過,根本來不及看清楚所有的內容。不過,tcpdump 提供了把截取的數據保存到文件的功能,以便后面使用其他圖形工具(比如 wireshark,Snort)來分析。

-w 選項用來把數據報文輸出到文件,比如下面的命令就是把所有 80 端口的數據導入到文件

# sudo tcpdump -w capture_file.pcap port 80 

-r 可以讀取文件里的數據報文,顯示到屏幕上。

# tcpdump -nXr capture_file.pcap host web30 

NOTE:保存到文件的數據不是屏幕上看到的文件信息,而是包含了額外信息的固定格式 pcap,需要特殊的軟件來查看,使用 vim 或者 cat 命令會出現亂碼。

強大的過濾器

過濾的真正強大之處在於你可以隨意組合它們,而連接它們的邏輯就是常用的 與/AND/&&或/OR/||非/not/!

源地址是 10.5.2.3,目的端口是 3389 的數據報

tcpdump -nnvS src 10.5.2.3 and dst port 3389 

從 192.168 網段到 10 或者 172.16 網段的數據報

tcpdump -nvX src net 192.168.0.0/16 and dat net 10.0.0.0/8 or 172.16.0.0/16 

從 Mars 或者 Pluto 發出的數據報,並且目的端口不是 22

tcpdump -vv src mars or pluto and not dat port 22 

從上面的例子就可以看出,你可以隨意地組合之前的過濾器來截取自己期望的數據報,最重要的就是知道自己要精確匹配的數據室怎樣的!

對於比較復雜的過濾器表達式,為了邏輯的清晰,可以使用括號。不過默認情況下,tcpdump 把 () 當做特殊的字符,所以必須使用單引號 ' 來消除歧義:

tcpdump -nvv -c 20 'src 10.0.2.4 and (dat port 3389 or 22)' 

理解 tcpdump 的輸出

截取數據只是第一步,第二步就是理解這些數據,下面就解釋一下 tcpdump 命令輸出各部分的意義。

21:27:06.995846 IP (tos 0x0, ttl 64, id 45646, offset 0, flags [DF], proto TCP (6), length 64) 192.168.1.106.56166 > 124.192.132.54.80: Flags [S], cksum 0xa730 (correct), seq 992042666, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 663433143 ecr 0,sackOK,eol], length 0 21:27:07.030487 IP (tos 0x0, ttl 51, id 0, offset 0, flags [DF], proto TCP (6), length 44) 124.192.132.54.80 > 192.168.1.106.56166: Flags [S.], cksum 0xedc0 (correct), seq 2147006684, ack 992042667, win 14600, options [mss 1440], length 0 21:27:07.030527 IP (tos 0x0, ttl 64, id 59119, offset 0, flags [DF], proto TCP (6), length 40) 192.168.1.106.56166 > 124.192.132.54.80: Flags [.], cksum 0x3e72 (correct), ack 2147006685, win 65535, length 0 

最基本也是最重要的信息就是數據報的源地址/端口和目的地址/端口,上面的例子第一條數據報中,源地址 ip 是 192.168.1.106,源端口是 56166,目的地址是 124.192.132.54,目的端口是 80> 符號代表數據的方向。

此外,上面的三條數據還是 tcp 協議的三次握手過程,第一條就是 SYN 報文,這個可以通過 Flags [S] 看出。下面是常見的 TCP 報文的 Flags:

  • [S]: SYN(開始連接)
  • [.]: 沒有 Flag
  • [P]: PSH(推送數據)
  • [F]: FIN (結束連接)
  • [R]: RST(重置連接)

而第二條數據的 [S.] 表示 SYN-ACK,就是 SYN 報文的應答報文。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM