Tcpdump網絡抓包工具詳解!

一、簡介

tcpdump就是:dump the traffic on a network,根據使用者的定義對網絡上的數據包進行截獲的包分析工具。

tcpdump是一個用于截取網絡分組,并輸出分組內容的工具。憑借強大的功能和靈活的截取策略,使其成為類UNIX系統下用于網絡分析和問題排查的首選工具

tcpdump 支持針對網絡層、協議、主機、網絡或端口的過濾,并提供and、or、not等邏輯語句來幫助你去掉無用的信息

tcpdump需要有root權限。

tcpdump使用了獨立于系統的libpcap的接口。libpcap是linux平臺下的網絡數據包捕獲函數包

tcpdump調用libpcap的接口在linux系統鏈路層抓包。而linux本身指定的許多訪問控制規則都是基于三層或三層以上的過濾規則,所以tcpdump可以抓取過濾規則之前的數據包

tcpdump可以使用帶-w參數的tcpdump 截獲數據并保存到文件中,然后再使用Wireshark進行解碼分析

tcpdump工作在網卡的混雜模式

二、使用

1、命令格式

tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ][ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ][ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ][ -Q in|out|inout ][ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ][ --immediate-mode ] [ -T type ] [ --version ] [ -V file ][ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ][ -Z user ] [ expression ]

2、命令選項

①抓包選項

-A: 以ASCII碼方式顯示每一個數據包(不會顯示數據包中鏈路層頭部信息). 在抓取包含網頁數據的數據包時, 可方便查看數據(nt: 即Handy for capturing web pages).

-C file-size: (nt: 此選項用于配合-w file 選項使用) 該選項使得tcpdump 在把原始數據包直接保存到文件中之前, 檢查此文件大小是否超過file-size. 如果超過了, 將關閉此文件,另創一個文件繼續用于原始數據包的記錄. 新創建的文件名與-w 選項指定的文件名一致, 但文件名后多了一個數字.該數字會從1開始隨著新創建文件的增多而增加. file-size的單位是百萬字節(nt: 這里指1,000,000個字節,并非1,048,576個字節, 后者是以1024字節為1k, 1024k字節為1M計算所得, 即1M=1024 * 1024 = 1,048,576)

-c:指定要抓取的包數量。

-d?: 以容易閱讀的形式,在標準輸出上打印出編排過的包匹配碼, 隨后tcpdump停止.(nt | rt: human readable, 容易閱讀的,通常是指以ascii碼來打印一些信息. compiled, 編排過的. packet-matching code, 包匹配碼,含義未知, 需補充)

-dd: 以C語言的形式打印出包匹配碼.

-ddd: 以十進制數的形式打印出包匹配碼(會在包匹配碼之前有一個附加的'count'前綴).

-i interface:指定tcpdump需要監聽的接口。默認會抓取第一個網絡接口

-N: 不列出域名

-n:對地址以數字方式顯式,否則顯式為主機名,也就是說-n選項不做主機名解析。

-nn:除了-n的作用外,還把端口顯示為數值,否則顯示端口服務名。

-P:指定要抓取的包是流入還是流出的包。可以給定的值為in、out和inout,默認為"inout"。

-p: 不讓網絡界面進入混雜模式

-O: 不將數據包編碼最佳化

-s len:設置tcpdump的數據包抓取長度為len。

? 如果不設置默認將會是65535字節。對于要抓取的數據包較大時,長度設置不夠可能會產生包截斷,若出現包截斷,輸出行中會出現"[|proto]"的標志(proto實際會顯示為協議名)。但是抓取len越長,包的處理時間越長,并且會減少tcpdump可緩存的數據包的數量,從而會導致數據包的丟失,所以在能抓取我們想要的包的前提下,抓取長度越小越好。

-S: 打印TCP 數據包的順序號時, 使用絕對的順序號, 而不是相對的順序號.

? 相對順序號可理解為, 相對第一個TCP 包順序號的差距,比如, 接受方收到第一個數據包的絕對順序號為232323, 對于后來接收到的第2個,第3個數據包, tcpdump會打印其序列號為1, 2分別表示與第一個數據包的差距為1 和 2. 而如果此時-S 選項被設置, 對于后來接收到的第2個, 第3個數據包會打印出其絕對順序號:232324, 232325

-y datalinktype:設置tcpdump 只捕獲數據鏈路層協議類型是datalinktype的數據包

②輸出選項

-e:輸出的每行中都將包括數據鏈路層頭部信息,例如源MAC和目標MAC。

-q:快速打印輸出。即打印很少的協議相關信息,從而輸出行都比較簡短。

-t:在每行輸出中不打印時間戳

-tt:不對每行輸出的時間進行格式處理(nt: 這種格式一眼可能看不出其含義, 如時間戳打印成1261798315)

-ttt:tcpdump 輸出時, 每兩行打印之間會延遲一個段時間(以毫秒為單位)

-tttt:在每行打印的時間戳之前添加日期的打印

-X:輸出包的頭部數據,會以16進制和ASCII兩種方式同時輸出。

-XX:輸出包的頭部數據,會以16進制和ASCII兩種方式同時輸出,更詳細。

-v:當分析和打印的時候,產生詳細的輸出。

-vv:產生比-v更詳細的輸出。

-vvv:產生比-vv更詳細的輸出。

③其他功能性選項

-D:列出可用于抓包的接口。將會列出接口的數值編號和接口名,它們都可以用于"-i"后。

-F:從文件中讀取抓包的表達式。若使用該選項,則命令行中給定的其他表達式都將失效。

-w:將抓包數據輸出到文件中而不是標準輸出。可以同時配合”-G time"選項使得輸出文件每time秒就自動切換到另一個文件。可通過"-r"選項載入這些文件以進行分析和打印。

-r:從給定的數據包文件中讀取數據。使用"-"表示從標準輸入中讀取

3、條件表達式定義過濾規則

表達式用于決定哪些數據包將被過濾打印. 如果不給定條件表達式, 網絡上所有被捕獲的包都會被打印,否則, 只有滿足條件表達式的數據包被打印

表達式格式:

tcpdump 命令選項 proto dir type

  • proto(protocol協議類型的過濾器):根據協議進行過濾

    • tcp:
    • udp:
    • icmp:
    • ether:
    • fddi:
    • tr:
    • wlan:
    • ip:
    • ip6:
    • arp:
    • rarp:
    • decnet:
    • 若未給定協議類型,則匹配所有可能的類型
  • dir(direction數據流向類型的過濾器):根據數據流向進行過濾

    • src:
    • dst:
    • src or dst:
    • src and dst:
  • type(關鍵詞類型的過濾器)

    • host:
  • net

    • port:
    • portrange:
    • ether:
    • gateway:

    例如:host 192.168.201.128 , net 128.3, port 20, portrange 6000-6008’

4、過濾規則的組合

表達式單元之間可以使用操作符" and / && / or / || / not / ! "進行連接,從而組成復雜的條件表達式。

  • and:所有的條件都需要滿足,也可以表示為?&&
  • or:只要有一個條件滿足就可以,也可以表示為?||
  • not:取反,也可以使用?!

而在單個過濾器里,常常會判斷一條件是否成立,這時候,就要使用下面兩個符號

  • =:判斷二者相等
  • ==:判斷二者相等
  • !=:判斷二者不相等

使用括號"()"可以改變表達式的優先級,但需要注意的是括號會被shell解釋,所以應該使用反斜線""轉義為"()",在需要的時候,還需要包圍在引號中。

當你使用這兩個符號時,tcpdump 還提供了一些關鍵字的接口來方便我們進行判斷,比如

  • if:表示網卡接口名
  • proc:表示進程名
  • pid:表示進程id
  • svc:表示 service class
  • dir:表示方向,in 和 out
  • eproc:表示 effective process name
  • epid:表示 effective process ID

三、抓包解讀

輸出格式

$ tcpdump -S -e -nn -i eth0 dst 192.168.1.7 and port 500006:24:16.887580 dc:a6:32:c4:88:d2 > 00:11:32:11:22:33, ethertype IPv4 (0x0800), length 338: 192.168.1.18.54832 > 192.168.1.7.5000: Flags [P.], seq 2391754816:2391755088, ack 1379501343, win 2051, options [nop,nop,TS val 238444658 ecr 19745762], length 272
  • 第一列:時分秒毫秒 21:26:49.013621

  • 第二列:源MAC地址

  • 第三列:目標MAC地址

  • 第四列:網絡協議及其長度

  • 第五列:源IP地址.端口號

  • 第六列:目標IP地址.端口號

  • 第七列:數據包內容,包括Flags 標識符,seq 號,ack 號,win 窗口,數據長度 length,其中 [P.] 表示 PUSH 標志位為 1,

Flags 標識符

  • [S]?: SYN(發起連接標志)
  • [P]?: PSH(傳送數據標志)
  • [F]?: FIN (關閉連接標志)
  • [R]?: RST(重置連接)
  • [.]?: 沒有 Flag,由于除了 SYN 包外所有的數據包都有ACK,所以一般這個標志也可表示 ACK

組合表示

  • [S.]: SYN同步標識,以及確認S的ACK
  • [P.]: 推送數據, 和 ACK
  • [R.]: RST, 連接重置
  • [F.]: FIN 結束連接
  • [DF]: Don't Fragment(不要碎裂),當DF=0時,表示允許分片,一般-v時才有這個標識
  • [FP.]: 標記FIN、PUSH、ACK組合,這樣做是為了提升網絡效率,減少數據來回確認等

四、示例

1、監聽多個端口、多個網卡

# 監聽多個端口
tcpdump port 22 or port 23 or port 24 # 監聽所有網卡
tcpdump -i any port 22 or port 23

2、找出一段時間內發包數最多的 IP

$ tcpdump -nnn -t -c 200 | cut -f 1,2,3,4 -d '.' | sort | uniq -c | sort -nr | head -n 20200 packets captured
244 packets received by filter
0 packets dropped by kernel103 IP 192.168.1.1872 IP 220.64.11.9225 IP 192.168.1.7

3、抓取 HTTP GET 請求

$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'$ tcpdump -vv -A -l -i6 | grep 'GET'

4、抓取 HTTP POST請求

$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'$ tcpdump -vv -A -l -i6 | grep 'POST'

5、抓取 HTTP請求中的 User-Agent和Host

$ tcpdump -nn -A -i6 -l | egrep -i 'User-Agent:|Host:'

6、抓取 HTTP請求中的主機名和路徑

$ tcpdump -i6 -v -n -l | egrep -i "POST /|GET /|Host:".Ke..B]'POST /webapi/entry.cgi HTTP/1.1
Host: 192.168.1.7:5000

7、抓取 HTTP 有效數據包

抓取 80 端口的 HTTP 有效數據包,排除 TCP 連接建立過程的數據包(SYN / FIN / ACK)

$ tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87569.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87569.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87569.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot的Security安全控制——應用SpringSecurity!

應用Spring Security 前面介紹了在項目開發時為什么選擇Spring Security&#xff0c;還介紹了它的原理。本節開始動手實踐Spring Security的相關技術。 實戰&#xff1a;Spring Security入門 現在開始搭建一個新項目&#xff0c;實踐一個Spring Security的入門程序。 &…

FPGA基礎 -- Verilog行為級建模之alawys語句

Verilog 中的 always 語句塊&#xff0c;這是行為級建模的核心結構之一&#xff0c;在 RTL 級設計中廣泛用于時序邏輯和組合邏輯的建模。 一、什么是 always 語句&#xff1f; ? 定義&#xff1a; always 語句用于描述可綜合的硬件行為邏輯&#xff0c;表示一個**“事件驅動…

【力扣 簡單 C】704. 二分查找

目錄 題目 解法一&#xff1a;二分查找 題目 解法一&#xff1a;二分查找 int find(const int* nums, int size, int target) {int left 0, right size - 1;while (left < right){int mid (left right) / 2;if (nums[mid] < target)left left 1;else if (nums[m…

Java并發編程實戰 Day 30:并發編程未來展望與最佳實踐總結

【Java并發編程實戰 Day 30】并發編程未來展望與最佳實踐總結 文章簡述 經過30天的系統學習&#xff0c;我們從Java并發編程的基礎知識逐步深入到高并發系統的架構設計與性能優化。本文作為“Java并發編程實戰”系列的收官之作&#xff0c;將全面回顧整個系列的核心內容&#…

量化面試綠皮書:23. 醉酒乘客

文中內容僅限技術學習與代碼實踐參考&#xff0c;市場存在不確定性&#xff0c;技術分析需謹慎驗證&#xff0c;不構成任何投資建議。 23. 醉酒乘客 100名乘客排隊登機&#xff0c;每人持有一張對應座位的機票&#xff08;第n位乘客的座位號為n&#xff09;。 第一位乘客喝醉后…

AntV G6入門教程

以下教程聚焦于 AntV?G6 的 數據操作 API,詳細介紹各個方法的用途、參數以及完整的使用示例,幫助你在圖實例上精細地讀取、修改和管理節點/邊/組合等數據。文中示例代碼均基于 G6 v5.0.47 官方文檔 ([g6.antv.antgroup.com][1])。 一、獲取完整圖數據 1.1 graph.getData() …

67、數據訪問-crud實驗-分頁數據展示

67、數據訪問-crud實驗-分頁數據展示 分頁數據展示是數據訪問中常見的功能&#xff0c;用于將大量數據分割成多個頁面顯示&#xff0c;提升用戶體驗和系統性能。以下是分頁數據展示的相關介紹&#xff1a; #### 基本原理 1. **確定每頁顯示數量**&#xff1a;設定每頁顯示的數…

常見 Web 服務器

Web 服務器有很多種&#xff0c;功能和用途略有不同&#xff0c;下面我會分類介紹主流的 Web 服務器&#xff08;包含靜態/動態/反向代理支持&#xff09;并重點說明類似 Tomcat 的 Java 支持型。 常見 Web 服務器分類 類型名稱描述與特點&#x1f310; 靜態資源服務器Nginx高…

【MacOS】M3 Pro芯片MacBook極速搭建Kubernetes

M3 Pro 芯片 MacBook 2023上使用 Colima 安裝 Kubernetes。 Colima 輕量、高效&#xff0c;并且在 Apple Silicon 架構上表現出色。 下面是詳細的、一步一步的安裝和配置指南。 核心思路 我們將通過以下步驟完成整個過程&#xff1a; 準備工作: 安裝必要的工具&#xff0c;…

import { Add, Dongdong, UserAdd } from ‘@nutui/icons-react‘ 使用圖標導入庫報錯

import { Add } from "nutui/icons-react-taro"; 官網的導入的庫名字不全&#xff0c;后面要加-taro&#xff0c;就行了

猿人學js逆向比賽第一屆第七題

分析響應 看到響應體里面的data是個字體加密&#xff0c;于是這里可以看到woff文件也給返回了&#xff0c;這里現分析這個文件。 打開可以看到這里a351對應的是3和頁面中的3是對應的&#xff0c;于是用ddddocr動態識別字體文件中的字體&#xff0c;然后對應對應的字體替換是不…

股票心理學習篇:交易的人性弱點 - 頻繁交易

以下內容為學習時的筆記整理&#xff0c;視頻作者來自B站&#xff1a;老貓與指標 視頻鏈接&#xff1a;頻繁交易必死&#xff1f;底層邏輯深度剖析&#xff0c;老貓的的破局心法與實戰策略分享 交易的人性弱點 - 頻繁交易 主講人&#xff1a; 老貓 1. 引言&#xff1a;問題的…

WPF入門 #1 WPF布局基礎、WPF樣式基礎、WPF數據模板、WPF綁定

WPF當中有許多的布局容器控件&#xff0c;例如<Grid>、<StackPanel>、<WrapPanel>、<DockPanel>、<UniformGrid>。接下來分別介紹一下各個布局容器控件。 布局基礎 Grid <Grid><Grid.RowDefinitions><RowDefinition Height&qu…

開源大型語言模型的文本記憶新突破!

在現代科技的推動下&#xff0c;人工智能領域正在不斷地突破人類認知的極限。今年&#xff0c;由斯坦福大學、康奈爾大學和西弗吉尼亞大學的計算機科學家們&#xff0c;與法律學者共同展開了一項引人入勝的研究&#xff0c;聚焦于開源大型語言模型的文本記憶表現。這項研究不僅…

LeetCode 3090.每個字符最多出現兩次的最長子字符串

題目鏈接 https://leetcode.cn/problems/maximum-length-substring-with-two-occurrences/ 題目描述 給定一個字符串 s&#xff0c;找出滿足每個字符最多出現兩次的最長子字符串&#xff0c;并返回其長度。 示例 輸入&#xff1a;s "aabba" 輸出&#xff1a;5解…

使用開源NVIDIA cuOpt加速決策優化

使用開源NVIDIA cuOpt加速決策優化 文章目錄 使用開源NVIDIA cuOpt加速決策優化決策優化的現實挑戰供應鏈優化的復雜性實時決策的挑戰計算復雜性的挑戰 NVIDIA cuOpt&#xff1a;GPU加速的決策優化解決方案cuOpt的核心技術架構支持的優化問題類型性能優勢分析 實際應用案例&…

【JVM 09-垃圾回收】

垃圾回收 筆記記錄 1. 如何判斷對象可以回收1.1 引用計數法1.1.1 缺點 1.2 可達性分析算法1.2.1 可達分析、根對象1.2.2 優缺點 1.3 四種引用(強軟弱虛)1.3.1 軟引用的實際使用案例1.3.2 軟引用-引用隊列1.3.3 弱引用的實際使用案例 2. 垃圾回收算法2.1 標記清除算法2.2 標記整…

《二叉搜索樹》

引言&#xff1a; 上次我們結束了類和對象的收尾&#xff0c;之后我們就要學習一些高級的數據結構&#xff0c;今天我們先來看一個數據結構-- 二叉搜索樹。 一&#xff1a; 二叉搜索樹的概念(性質) 二叉搜索樹又稱二叉排序樹&#xff0c;它或者是一棵空樹&#xff0c;或者是…

【Redis】Sentinel哨兵

&#x1f6e1;? 深入理解 Redis Sentinel&#xff1a;高可用架構的守護者 在實際開發中&#xff0c;我們常用 Redis 構建緩存系統或數據中間件。然而&#xff0c;主從復制雖然能實現數據同步&#xff0c;但無法自動故障轉移&#xff08;failover&#xff09;&#xff0c;這就…

Shell腳本應用及實戰演練

文章目錄 一、Shell腳本語言的基本結構1、Shell腳本的用途&#xff1a;2、 Shell腳本基本結構&#xff1a;3、 創建Shell腳本過程4、 腳本注釋規范 二、Shell腳本語言的變量用法詳解位置與預定義變量 三、 Shell字符串詳解1、Shell字符串拼接2、Shell字符串截取3、 Shell的格式…