在linux中使用tcpdump命令 – 監聽網絡流量

tcpdump命令 – 監聽網絡流量

tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器;它可以打印出所有經過網絡接口的數據包的頭信息。

tcpdump命令工作時先要把網卡的工作模式切換到混雜模式。所以tcpdump命令需要以root身份運行。tcpdump命令是linux下使用最廣泛的網絡協議分析工具。使用tcpdump命令時,必須精通TCP/IP協議工作原理。

語法格式: tcpdump [參數]

常用參數:

-a 嘗試將網絡和廣播地址轉換成名稱
-c <數據包數目> 收到指定的數據包數目後,就停止進行傾倒操作
-d 把編譯過的數據包編碼轉換成可閱讀的格式,並傾倒到標準輸出
-dd 把編譯過的數據包編碼轉換成C語言的格式,並傾倒到標準輸出
-ddd 把編譯過的數據包編碼轉換成十進制數字的格式,並傾倒到標準輸出
-e 在每列傾倒資料上顯示連接層級的文件頭
-f 用數字顯示網際網絡地址
-F<表達文件> 指定內含表達方式的文件
-i<網絡界面> 使用指定的網絡截面送出數據包
-l 使用標準輸出列的緩衝區
-n 不把主機的網絡地址轉換成名字
-N 不列出域名
-O 不將數據包編碼最佳化
-p 不讓網絡界面進入混雜模式
-q 快速輸出,僅列出少數的傳輸協議信息
-r<數據包文件> 從指定的文件讀取數據包數據
-s<數據包大小> 設置每個數據包的大小
-S 用絕對而非相對數值列出TCP關聯數
-t 在每列傾倒資料上不顯示時間戳記
-tt 在每列傾倒資料上顯示未經格式化的時間戳記
-T<數據包類型> 強制將表達方式所指定的數據包轉譯成設置的數據包類型
-v 詳細顯示指令執行過程
-vv 更詳細顯示指令執行過程
-x 用十六進制字碼列出數據包資料
-w<數據包文件> 把數據包數據寫入指定的文件

【常用關鍵字】

tcpdump命令中幾種關鍵字:
第一種:類型關鍵字,包括:host,net,port
第二種:傳輸方向關鍵字,包括:src,dst
第三種:協議關鍵字,包括: ip,arp,tcp,udp等類型
第四種:其他關鍵字,包括:gateway,broadcast,less,greater,not,!,and,&&,or,||

【備註說明】

  1. 抓取回環網口的包: $ tcpdump -i lo
  2. 防止包截斷的方法: $ tcpdump -s 0
  3. 以數字顯示主機及端口: $ tcpdump -n

參考實例
查看版本
tcpdump --version
在這裏插入圖片描述
顯示TCP包信息

tcpdump

監視指定網絡接口的數據包:
tcpdump -i eno16777736
在這裏插入圖片描述
抓取80端口的HTTP報文,以文本形式展示:

tcpdump -i any port 80 -A在這裏插入圖片描述在這裏插入圖片描述
抓取所有經過eno16777736的網絡數據包,當前eno16777736的IP爲192.168.23.134

在192.168.23.142主機執行
因爲執行的爲檢測命令,如果當時沒有輸出,可以使用其他機器使用ssh或其他方式觸發命令後續的輸出內容
tcpdump -i eno16777736 host 192.168.23.134
在這裏插入圖片描述
截取兩臺主機之間的數據
tcpdump -n -i eno16777736 host 192.168.23.136 and 192.168.23.142
在這裏插入圖片描述
截取進入 兩臺主機 的數據
tcpdump -n -i eno16777736 dst 192.168.23.136 or 192.168.23.142
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
【命令淺解】

tcpdump tcp -i eno16777736 -t -s0 -c 100 and dst port ! 22 and src net 192.168.23.0/24 -w ./target.cap

1)tcp: # ip,icmp,arp,rarp,udp這些選項要放第一個參數,用來過濾數據報的類型
2)-i eno16777736 # 只抓經過網口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文件,方便用wireshark工具進行分析
在這裏插入圖片描述 通過IP找流量
tcpdump host 192.168.23.142 -i eno16777736
在這裏插入圖片描述

通過源地址和/或目的地址進行過濾
如果你只想一個方向上的流量,可以使用 src 或 dst 指定。

tcpdump src 192.168.23.142 -i eno16777736
tcpdump dst 192.168.23.142 -i eno16777736

在這裏插入圖片描述
在這裏插入圖片描述
通過網段過濾流量
使用 net 選項查看進出一個網段或子網的進出流量。

tcpdump net 192.168.23.0/24

使用十六進制輸出流量包的內容
當要對一些包進行仔細審查其內容的時候,使用十六進制輸出的方式來查看包就很有用了。
-c 1 是指定只抓取一個包。

tcpdump -c 1 -X icmp -i eno16777736
tcpdump -c 1 -X tcp port 80 -i eno16777736
在這裏插入圖片描述在這裏插入圖片描述
查看指定端口上的流量
通過 port 選項,可以找到指定端口上的進出流量。

tcpdump port 80 -i eno16777736

tcpdump src port 80 -i eno16777736
在這裏插入圖片描述在這裏插入圖片描述

只查看 IPv6 流量

tcpdump src fe80::20c:29ff:fe7b:cf78 -i eno16777736
tcpdump -nn dst fe80::20c:29ff:fe7b:cf78 -i eno16777736 -c 2

使用 ipv6 地址ping使用的是 ping6 命令
命令格式爲
ping6 ipv6地址%網卡名 #要通過 “%” 指定網卡名
ping -6 ipv6地址%網卡名 #要通過 “%” 指定網卡名, ping -6 在ubuntu上無效,需要使用ping6

通過端口範圍過濾
tcpdump portrange 21-233

查看指定大小的數據包
可以查看指定大小的數據包,指定數據包的大小的時候還可以使用比較運算符。

tcpdump less 32
tcpdump greater 64
tcpdump <= 128

從文件中讀取抓包信息
使用 -r 選項從文件中讀取,在讀取文件的時候,我們可以像正常抓包時一樣使用tcpdump.需要注意的是,文件中不存在的數據是抓取不到和解析的。

tcpdump -r capture_file
示例

tcpdump -r capture_file dst 192.168.23.134
tcpdump -r capture_file src 192.168.23.134

tcpdump -r capture_file -i ens33 icmp6
在這裏插入圖片描述

下面是 tcpdump 的一些其他進階選項,抓包時候進行進一步調整。

-A : Print each packet (minus its link level header) in ASCII. Handy for capturing web pages.
-X : 十六進制的ASCII編碼方式輸出顯示包內容
-XX : 同 -X , 但是同時顯示一臺幀頭部信息。
-D : 顯示可用的接口列表。
-l : 顯示行號輸出。
-q : 靜默輸出(顯示最少的信息)。
-t : 輸出的時間戳爲人類可讀格式(經實驗無時間戳輸出)。
-tttt : 輸出最詳細的時間戳爲人類可讀格式。
-i eth0 : 監聽 eth0 網卡抓包。
-vv : 比 -v 有更詳細的輸出。
-c : 指定的抓包的數量,之後停止。
-s : 指定每個抓取的數據包的字節長度,默認是262144字節. 使用 -s0 獲取整個數據包的內容。
-S : 輸出絕對數據包的絕對序列號。
-e : 同時獲取以太幀頭信息。
-E : 通過給定的密鑰解密 IPSEC 數據流。

裸視圖輸出
下面的組合輸出的是:沒有主機名和端口解析、使用絕對序號、人類可讀時間戳的詳細輸出。
tcpdump -ttnnvvS -i eno16777736 -c 1
在這裏插入圖片描述
指定源IP和目的端口的流量
tcpdump -nnvvS src 192.168.23.142 -i eno16777736 and dst port 80
在這裏插入圖片描述

網段到網段的流量
下面阿組合輸出爲:從源爲192.168.0.0/16目的爲10.0.0.0/8或172.16.0.0/16、不解析主機名、十六進制格式、詳細級別爲-v級別的抓包信息。

tcpdump -nvX src net 192.168.23.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16

到指定地址的非ICMP的流量
tcpdump dst 192.168.23.142 -i eno16777736 and not icmp

在這裏插入圖片描述
關於分組的小結
我們可以看到,通過合理的組合,我們就可以得到任何想要的結果,關鍵是要搞清楚想要的信心,並且構建合適的查詢語法。

在構建複雜查詢時,可能必須使用單引號對選項進行分組,在下例中是在“()”括號下面。單引號用於告訴tcpdump忽略某些特殊字符。同樣的技術也可以用於使用其他表達式(如host、port、net等)進行分組。

tcpdump ‘src 10.0.2.4 and (dst port 3389 or 22)’

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章