Linux 網絡抓包分析工具

一、tcpdump

1、作用

tcpdump 指令可列出經過指定網絡界面的數據包文件頭,可以將網絡中傳送的數據包的 “頭” 完全截獲下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾,並提供 and、or、not 等邏輯語句來幫助你摘取有用信息。

由於它需要將網絡接口設置爲混雜模式,普通用戶不能正常執行,但具備 root 權限的用戶可以直接執行它來獲取網絡上的信息

其他抓包工具

2、命令選項

tcpdump [選項] [協議] [數據流方向] [範圍]

3、tcpdump 表達式

關於數據類型的關鍵字

包括 host、port、net:

host 192.168.100.1 表示一臺主機,net 192.168.100.0 表示一個網絡網段,port 80 指明端口號爲 80,在這裏如果沒有指明數據類型,那麼默認就是 host

數據傳輸方向的關鍵字

包括 src、dst、dst or src、dst and src,這些關鍵字指明瞭傳輸的方向,比如 src 192.168.100.1 說明數據包源地址是 192.168.100.1。dst net 192.168.100.0 指明目的網絡地址是 192.168.100.0,默認是監控主機對主機的 src 和 dst,即默認監聽本機和目標主機的所有數據協議關鍵字

包括 ip、arp、rarp、udp

其他關鍵字

4、tcpdump 捕獲方式

tcpdump [協議類型] [源或目標] [主機名稱或 IP] [or/and/not/! 條件組合] [源或目標] [主機名或 IP] [or/and/not/! 條件組合] [端口] [端口號] …… [or/and/not/! 條件組合] [條件]

> tcpdump  ip dst 192.168.10.1 and src 192.168.10.10 and port 80 and host  !www.baidu.com

tcpdump

默認監聽在第一塊網卡,監聽所有經過此網卡的數據包

> tcpdump  -i  ens33

監聽指定網卡 ens33 的所有傳輸數據包

> tcpdump -i ens33 host 192.168.100.10

捕獲主機 192.168.100.10 經過網卡 ens33 的所有數據包(也可以是主機名,但要求可以解析出 IP 地址)

第一列:報文的時間

第二列:網絡協議 IP

第三列:發送方的 ip 地址、端口號、域名,上圖顯示的是本機的域名,可通過 / etc/hosts 查看本機域名

第四列:箭頭 >, 表示數據流向

第五列:接收方的 ip 地址、端口號、域名

第六列:冒號

第七列:數據包內容,報文頭的摘要信息,有 ttl、報文類型、標識值、序列、包的大小等信息

> tcpdump host 192.168.130.151 and  192.168.130.152or192.168.130.153192.168.130.152or192.168.130.153

捕獲主機 192.168.56.209 和主機 192.168.56.210 或 192.168.56.211 的所有通信數據包

> tcpdump ip host node9 and not www.baidu.com

捕獲主機 node9 與其他主機之間(不包括 www.baidu.com)通信的 ip 數據包

> tcpdump ip host node9 and ! www.baidu.com

捕獲 node9 與其他所有主機的通信數據包(不包括 www.baidu.com)

> tcpdump -i ens33 src node10

捕獲源主機 node10 發送的所有的經過 ens33 網卡的所有數據包

> tcpdump -i ens33 dst host www.baidu.com

捕獲所有發送到主機 www.baidu.com 的數據包

監聽主機 192.168.56.1 和 192.168.56.210 之間 ip 協議的 80 端口的且排除 www.baidu.com 通信的所有數據包:

> tcpdump ip dst 192.168.56.1 and src 192.168.56.210 and port 80 and host ! baidu.com

也可以寫成 tcpdump ip dst 192.168.56.1 and src 192.168.56.210 and port 80 and host not www.baidu.com,即 not 和!都是相同的取反的意思

> tcpdump arp

監控指定主機的通信數據包與 1.9.1 方式相同

> tcpdump tcp port 22 and host 192.168.56.210

捕獲主機 192.168.56.210 接收和發出的 tcp 協議的 ssh 的數據包

tcpdump udp port 53

監聽本機 udp 的 53 端口的數據包,udp 是 dns 協議的端口,這也是一個 dns 域名解析的完整過程

5、常用的過濾條件

tcpdump 可以支持邏輯運算符

and: 與運算,所有的條件都需要滿足,可用 “and” 和 “&&” 表示
or:或運行,只要有一個條件滿足就可以,可用 “or” 和 “|” 表示
not:取反,即取反條件,可以用 “not” 和 “!” 表示

> tcpdump icmp and src 192.168.100.10 -i ens33 -n

過濾 icmp 報文並且源 IP 是 192.168.100.10

多條件格式

在使用多個過濾條件進行組合時,有可能需要用到括號,而括號在 shell 中是特殊符號,又需要使用引號將其包含。用括號的主要作用是邏輯運算符之間存在優先級,!>and > or, 爲例條件能夠精確所以需要對一些必要的組合括號括起來,而括號的意思相當於加減運算一樣,括起來的內容作爲一個整體進行邏輯運算。

過濾源地址是 192.168.100.1 並且目的地址是 192.168.20.20 的數據包或者 ARP 協議的包

> tcpdump **src** host 192.168.10.10 -i ens33 -n -c 5

過濾源 IP 地址是 192.168.10.10 的包

> tcpdump **dst** host 192.168.10.10 -i ens33 -n -c 5

過濾目的 IP 地址是 192.168.10.10 的包

基於端口進行過濾

> tcpdump port 22 -i ens33 -n -c 5  
> 過濾端口號爲 22 即 ssh 協議的

>  tcpdump portrange 22-433 -i ens33 -n -c 8

過濾端口號 22-433 內的數據包

二、wireshark

1、什麼是 wireshark

Wireshark 是一個網絡封包分析軟件。網絡封包分析軟件的功能是捕獲網絡數據包,並儘可能顯示出最爲詳細的網絡封包資料。Wireshark 使用 WinPCAP 作爲接口,直接與網卡進行數據報文交換

2、安裝 wireshark

Linux 中有兩個版本的 wireshark,一個是 wireshark,這個版本是無圖形化界面,基本命令是”tshark“。

一個是 wireshark-gnome(界面版本),這個版本只能安裝在支持 GUI 功能的 Linux 的版本中。

> yum -y install wireshark // 安裝無圖形化版本  
> yum -y install wireshark-gnome // 安裝圖形化版本

注: 這裏的通過 yum 進行安裝,需要提前做好 epel 源(即紅帽操作系統額外拓展包),裝上了 EPEL 之後,就相當於添加了一個第三方源。官方的 rpm repository 提供的 rpm 包也不夠豐富,很多時候需要自己編譯那太辛苦了,而 EPEL 可以解決官方 yum 源數據包不夠豐富的情況。

安裝 epel 源

>  yum -y install epel-release

3、tshark 命令

tshark 是 wireshark 的命令行工具  
     tshark 選項 參數  
    -i:指定捕獲的網卡接口,不設置默認第一個非環回口接口  
    -D:顯示所有可用的網絡接口列表  
    -f:指定條件表達式,與 tcpdump 相同  
    -s:設置每個抓包的大小,默認 65535,多於這個大小的數據將不會不會被截取。  
    -c:捕獲指定數量的數據包後退出  
    -w:後接文件名,將抓包的結果輸出到. pcap 文件中,可以藉助其他網絡分析工具進行分析,也可以使用重定向 > 把解碼後的輸出結果以 txt 的格式輸出。  
    -p:設置網絡接口以非混合模式工作,即只關心和本機有關的流量  
    -r:後接文件路徑,用於分析保持好的網絡包文件,比如 tcpdump 的輸出文件  
    -n:禁止所有地址名字解析,即禁止域名解析, 默認是允許所有  
   -N:指定對某一層的地址名字解析,如果 - n 和 - N 同時存在,則 - n 將被忽略,如果兩者都不寫,則會默認打開所有地址名字解析  
         m:代表數據鏈路層  
         n:代表網絡層  
         t:代表傳輸層  
    -V:設置將解碼結果的細節輸出,否則解碼結果僅顯示一個 packet 一行的 summary  
    -t:設置結果的時間格式  
         ad:表示帶日期的絕對時間  
         a:表示不帶日期的絕對時間  
         r:表示從第一個包到現在的相對時間  
         d:表示兩個相鄰包之間的增量時間

tshark -f "icmp" -i ens33 -V -c 1

過濾 icmp 報文,並展開詳細信息

tshark -f "arp" -i ens33

過濾 arp 報文

4、圖形化界面

三、Tcpdump 和 wireshark 合用

Tcpdump 解析報文信息沒有 wireshark 詳細,所以可以通過 Tcpdump 捕獲數據並輸出,再通過 wireshark 進行解析,輸出文件格式爲. pcap  或者其他

在虛擬機上通過 wireshark 讀取

使用 ip.addr == [ip 地址號] 可以過濾掉無關 ip

圖形讀取

用 wireshark 直接打開查看

總結

tcpdump 和 wireshark 兩種單以抓包的功能來看,是相似的,兩者的命令行的選項也是有相同,但是 tcpdump 對數據包分析的能力不是很好,同時目前很多 Linux 內置安裝了 tcpdump 這個工具,所以我們可以通過 tcpdump 把數據包抓出並存放到我們自定義的文件 (.pcap) 中,再通過把文件取出用 wireshark 進行分析排障

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/qxBGSdDkpOiasZdoDCsFmw