Linux Tcpdump抓包入門

Linux Tcpdump抓包入門
一、Tcpdump簡介

tcpdump 是一個在Linux系統上用于網絡分析和抓包的強大工具。它能夠捕獲網絡數據包并提供詳細的分析信息,有助于網絡管理員和開發人員診斷網絡問題和監控網絡流量。

  1. 安裝部署

    # 在Debian/Ubuntu上安裝
    sudo apt-get install tcpdump# 在CentOS/RHEL上安裝
    sudo yum install tcpdump
    
  2. 底層原理

    在這里插入圖片描述

    1、tcpdump由C語言開發,主要功能通過libpcap庫實現,而libpcap是linux平臺下的一個網絡數據包捕獲功能包, 通過內核BPF技術實現數據過濾功能。tcpdump使用BPF虛擬機的指令集定義過濾器表達式,然后傳遞給內核,并由解釋器執行,這使得包過濾可以在內核中進行,避免了向用戶態進程復制全部數據包,從而提升數據包的過濾性能。tcpdump將包過濾指令注入到內核,返回按條件過濾的數據包,提供多種輸出功能將抓取的報文格式化處理能力。
    2、tcpdump的包過濾指令由BPF代碼實現,通過對libpcap庫的調用可以把一個輸入輸出的邏輯表達式變為BPF代碼,實現在用戶輸入的命令行和BPF代碼之間的轉換。tcpdump 程序支持使用 -d參數來 dump 出過濾規則轉化后的BPF指令字節碼。
    3、應用在接收報文的時候,硬件的硬中斷首先觸發內核的軟中斷,通過內核驅動程序進入網絡設備層進行數據包的處理,然后數據包進入協議棧的網絡層和傳輸層,最后被用戶進程接收。而應用在發送報文時,首先經過內核的協議層,由鄰居子系統實現L3層ip地址轉化為L2層mac地址,然后進入網絡設備層,數據包處理完成后,經驅動程序流轉,最后由硬件將報文發出。tcpdump為了能抓取數據包,首先需要創建socket套接字,用于在應用系統接收和發送報文時獲取抓取的數據包,然后將過濾條件也就是對應的BPF程序注入到內核網絡設備層,獲取過濾后的數據包后再進行格式化處理。
    

    在這里插入圖片描述

  3. 其他

二、Tcpdump命令參數
  • 基本參數

    • 設置不解析域名提升速度

      -n:不把ip轉化成域名,直接顯示 ip,避免執行 DNS lookups 的過程,速度會快很多
      -nn:不把協議和端口號轉化成名字,速度也會快很多。
      -N:不打印出host 的域名部分.。比如,,如果設置了此選現,tcpdump 將會打印’nic’ 而不是 ‘nic.ddn.mil’. 將抓取到的數據包保存為文件,可以借助wireshark進行分析
      
    • 從文件中讀取包數據

      tcpdump icmp -r all.pcap
      
    • 輸出控制參數-顯示內容

      -v:產生詳細的輸出. 比如包的TTL,id標識,數據包長度,以及IP包的一些選項。同時它還會打開一些附加的包完整性檢測,比如對IP或ICMP包頭部的校驗和。
      -vv:產生比-v更詳細的輸出. 比如NFS回應包中的附加域將會被打印, SMB數據包也會被完全解碼。
      -vvv:產生比-vv更詳細的輸出。比如 telent 時所使用的SB, SE 選項將會被打印, 如果telnet同時使用的是圖形界面,其相應的圖形選項將會以16進制的方式打印出來
    • 輸出控制參數-顯示時間

      -t:在每行的輸出中不輸出時間
      -tt:在每行的輸出中會輸出時間戳
      -ttt:輸出每兩行打印的時間間隔(以毫秒為單位)
      -tttt:在每行打印的時間戳之前添加日期的打印(此種選項,輸出的時間最直觀)
      
    • 輸出控制參數-顯示數據包頭部

      -x:以16進制的形式打印每個包的頭部數據(但不包括數據鏈路層的頭部)
      -xx:以16進制的形式打印每個包的頭部數據(包括數據鏈路層的頭部)
      -X:以16進制和 ASCII碼形式打印出每個包的數據(但不包括連接層的頭部),這在分析一些新協議的數據包很方便。
      -XX:以16進制和 ASCII碼形式打印出每個包的數據(包括連接層的頭部),這在分析一些新協議的數據包很方便。
      
    • 其他顯示控制參數

      -i:指定要過濾的網卡接口,如果要查看所有網卡,可以 -i any
      -Q:選擇是入方向還是出方向的數據包,可選項有:in, out, inout,也可以使用 --direction=[direction] 這種寫法
      -q : 簡潔地打印輸出。即打印很少的協議相關信息, 從而輸出行都比較簡短
      -c : 捕獲 count 個包 tcpdump 就退出
      -s : tcpdump 默認只會截取前 96 字節的內容,要想截取所有的報文內容,可以使用 -s number, number 就是你要截取的報文字節數,如果是 0 的話,表示截取報文全部內容。
      -S : 使用絕對序列號,而不是相對序列號
      -A : 顯示格式為ASCII
      -C:file-size,tcpdump 在把原始數據包直接保存到文件中之前, 檢查此文件大小是否超過file-size. 如果超過了, 將關閉此文件,另創一個文件繼續用于原始數據包的記錄. 新創建的文件名與-w 選項指定的文件名一致, 但文件名后多了一個數字.該數字會從1開始隨著新創建文件的增多而增加. file-size的單位是百萬字節(nt: 這里指1,000,000個字節,并非1,048,576個字節, 后者是以1024字節為1k, 1024k字節為1M計算所得, 即1M=102410241,048,576)
      -F:使用file 文件作為過濾條件表達式的輸入, 此時命令行上的輸入將被忽略.
      
  • 過濾參數

    • 指定ip地址過濾-host

      tcpdump host 192.168.10.100# 根據源ip進行過濾
      tcpdump -i eth2 src 192.168.10.100
      # 根據目標ip進行過濾
      tcpdump -i eth2 dst 192.168.10.200
    • 基于網段進行過濾:net

      tcpdump net 192.168.10.0/24# 根據源網段進行過濾
      tcpdump src net 192.168
      # 根據目標網段進行過濾
      tcpdump dst net 192.168
      
    • 基于端口進行過濾:port

      tcpdump port 8088
      # 根據源端口進行過濾
      tcpdump src port 8088# 根據目標端口進行過濾
      tcpdump dst port 8088#同時指定兩個端口
      tcpdump port 80 or port 8088 #指定端口的范圍
      tcpdump portrange 8000-8080
      tcpdump src portrange 8000-8080
      tcpdump dst portrange 8000-8080
      
    • 基于協議進行過濾:proto

      proto 后面跟的 的關鍵詞是固定的,只能是 ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso, stp, ipx, or netbeui 這里面的其中一個。

      tcpdump icmp#過濾IPV4數據包(友情提示:數字 6 表示的是 tcp 在ip報文中的編號。)
      tcpdump ip proto 6
      tcpdump ip protochain 6
      
    • 過濾條件基本語法

      • and:所有的條件都需要滿足,也可以表示為 &&

      • or:只要有一個條件滿足就可以,也可以表示為 ||

      • not:取反,也可以使用 !

      • =:判斷二者相等

      • ==:判斷二者相等

      • !=:判斷二者不相等 tcpdump 還提供了一些關鍵字的接口來方便我們進行判斷

      • if:表示網卡接口名、

      • proc:表示進程名

      • pid:表示進程 id

      • svc:表示 service class

      • dir:表示方向,in 和 out

      • eproc:表示 effective process name

      • epid:表示 effective process ID

        #過濾出源地址是1.1.1.1發往任意主機的3389端口的數據包
        tcpdump src 1.1.1.1 and dst port 3389#過濾出源地址是1.1.1.1發往任意主機的3389端口或者22端口的數據包
        tcpdump 'src 1.1.1.1 and (dst port 3389 or 22)'#過濾來自進程名為 nc 發出的流經 en0 網卡的數據包,或者不流經 en0 的入方向數據包tcpdump "( if=en0 and proc =nc ) || (if != en0 and dir=in)"
        
    • 特殊過濾

      • 根據 tcpflags 進行過濾

        tcpdump -i eth0 "tcp[tcpflags] & tcp-syn != 0"
        
      • 基于包大小進行過濾

        tcpdump less 32 
        tcpdump greater 64 
        tcpdump <= 128
        
      • 根據 mac 地址進行過濾

        tcpdump ether host [ehost]
        tcpdump ether dst	[ehost]
        tcpdump ether src	[ehost]
        
      • 過濾廣播/多播數據包

        tcpdump ether broadcast
        tcpdump ether multicasttcpdump ip broadcast
        tcpdump ip multicasttcpdump ip6 multicast
        
三、使用示例
  • 查看網卡ens33,端口9093,協議udp的流量信息,要求顯示流量詳情

    tcpdump udp -i ens33 port 9093 -XX -vvv -nn 
    
  • HTTP 請求頭中提取 HTTP 的 User-Agent

    tcpdump -nn -A -s1500 -l | grep "User-Agent:"
    
  • 抓取 HTTP GET 請求包

    tcpdump -vvAls0 | grep 'GET'
    
  • 提取 HTTP 請求的主機名和路徑

    tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"
    
  • 將抓包信息保存到文件

     tcpdump -i eth0 -s 0 -n -w capture.pcap
    
  • 分別抓取所有tcp、udp、icmp流量

    sudo tcpdump -i eth0 -s 0 -n 'tcp'
    sudo tcpdump -i eth0 -s 0 -n 'udp
    sudo tcpdump -i eth0 -s 0 -n 'icmp'
    
  • 僅顯示HTTP請求和響應的頭信息:

    sudo tcpdump -i eth0 -A -s 0 'tcp port 80 and (tcp[13] & 8!=0)'
    
  • 抓取指定主機(例如192.168.1.100)的HTTP流量,并保存到文件:

    tcpdump -i eth0 -s 0 -w http_traffic.pcap 'tcp and host 192.168.1.100 and (port 80 or port 443)'
    
四、參考資料
  • https://mp.weixin.qq.com/s/JouI946715kngfve0rzztw

  • https://mp.weixin.qq.com/s/KYkJjPkKvOvt8jXQFwtkXg

  • tcp flags通信標識

    Flags 標識符
    [S] : SYN(開始連接)
    [P] : PSH(推送數據)
    [F] : FIN (結束連接)
    [R] : RST(重置連接)
    [.] : 沒有 Flag (意思是除上面四種類型外的其他情況,有可能是 ACK 也有可能是 URG)
    
  • 官方連接

    • https://www.tcpdump.org/manpages/tcpdump.1.html

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

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

相關文章

Java網絡編程:UDP通信篇

目錄 UDP協議 Java中的UDP通信 DatagramSocket DatagramPacket UDP客戶端-服務端代碼實現 UDP協議 對于UDP協議,這里簡單做一下介紹: 在TCP/IP協議簇中,用戶數據報協議(UDP)是傳輸層的一個主要協議之一&#xf…

3.Spring Cloud LoadBalancer 入門與使用

3.Spring Cloud LoadBalancer 入門與使用 1.什么是 LoadBalancer?1.1負載均衡分類1.2 常見負載均衡策略 2.為什么要學 LoadBalancer?3.如何使用?4.默認負載均衡策略5.隨機負載均策略5.1 創建隨機負載均衡器5.2 設置隨機負載均衡器 (局部設置)5.3 設置全局負載均衡器 6.Nacos…

基礎—SQL—DML(數據操作語言)修改和刪除

一、引言 接著上次博客,這次講解DML語句中的修改數據和刪除數據操作。 二、DML—修改數據 UPDATE 表名 SET 字段名1值1 ,字段名2值2 , ...[ WHERE 條件]; 注意:修改語句的條件可以有,也可以沒有。如果沒有條件,則會修改整張表的…

TypeScript 泛型

泛型基礎 泛型允許我們在定義函數、類或接口時使用參數化類型&#xff0c;從而實現代碼的通用性。例如&#xff1a; function identity<T>(arg: T): T {return arg; }let output identity<string>("hello"); console.log(output); // 輸出&#xff1a…

為什么就是不顯示呢?

為了練習JavaScript中函數的使用方法&#xff0c;寫了下面的關于Date&#xff08;&#xff09;函數的使用&#xff0c;奇怪的是&#xff0c;網頁中就是不顯示相關內容&#xff0c;為什么呢&#xff1f;&#xff1f;&#xff1f; <!DOCTYPE html> <html lang"en&…

【更新】一次“問題反饋”,下定決心做了多約束多目標智能算法的“模板”

目錄 1 主要內容 2 部分代碼 3 程序結果 4 下載鏈接 1 主要內容 關注該代碼的同學應該清楚&#xff0c;這個代碼已經免費更新了兩版了&#xff0c;修復和增加了一些約束內容&#xff0c;本次增加蓄電池初始時刻和終止時刻容量一致約束&#xff0c;可別小瞧這么簡單的增加約…

工控一體機10.1寸顯示器電容觸摸屏(YA05WK)產品規格說明書

如果您對工控一體機有任何疑問或需求&#xff0c;或者對如何集成工控一體機到您的業務感興趣&#xff0c;可移步控芯捷科技。 一、硬件功能介紹 YA05WK是我公司推出的一款新型安卓屏&#xff0c;4核Cortex-A7 架構&#xff0c;主頻1.2GHz的CPU。采用12V供電&#xff0c;標配5寸…

2024.05.13 校招 實習 內推 面經

綠*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;內推/實習/校招匯總表格 1、實習 | 寧德新能源2025實習生招聘全面啟動 實習 | 寧德新能源2025實習生招聘全面啟動 2、實習 | 中國工業和信息化部電子第五研究所- 2025屆薪火計劃OFFER快捷通道正式開啟 實習 | 中…

深入理解深度學習中的激活層:Sigmoid和Softmax作為非終結層的應用

深入理解深度學習中的激活層&#xff1a;Sigmoid和Softmax作為非終結層的應用Sigmoid 和 Softmax 激活函數簡介Sigmoid函數Softmax函數 Sigmoid 和 Softmax 作為非終結層多任務學習特征變換增加網絡的非線性實際案例 注意事項結論 深入理解深度學習中的激活層&#xff1a;Sigmo…

云聯網驅動的全球智能網絡

在當今這個全球一體化加速的時代&#xff0c;企業網絡的邊界正被無限擴展&#xff0c;跨國運營、多云環境和遠程工作模式已經成為常態。中國聯通依托其強大的全球網絡資源&#xff0c;推出了以云聯網為核心技術的全球化智能組網方案&#xff0c;旨在為全球企業提供前所未有的靈…

什么是DELINS交貨指示?

DELINS 是指 Delivery Instruction&#xff08;交貨指示&#xff09;報文&#xff0c;用于在供應鏈管理中傳遞交貨指令和相關信息。該報文用于在供應鏈中的不同合作伙伴之間交換關于交貨的詳細信息。 DELINS 報文的主要功能 交貨指示&#xff1a;傳達具體的交貨指令&#xff…

如何評價GPT-4o

對比分析&#xff1a;GPT-4o與GPT-4 在人工智能領域的浪潮中&#xff0c;OpenAI的GPT系列模型一直是備受矚目的焦點。GPT-4o作為GPT系列的最新成員&#xff0c;相較于其前代GPT-4&#xff0c;無疑帶來了許多值得關注的改進和變化。 首先&#xff0c;從版本更迭的角度來看&#…

【Python】 深入理解 Python 包管理器:pip vs conda

基本原理 在Python編程世界中&#xff0c;包管理器是一個不可或缺的工具。它幫助開發者安裝、更新和管理Python庫。目前&#xff0c;最流行的兩個包管理器是pip和conda。了解它們之間的區別&#xff0c;對于Python開發者來說至關重要。 pip pip是Python的官方包管理器&#…

智慧農田視頻監控技術應用:智能監管引領農業新時代

據新聞報道&#xff0c;5月24日合肥市公安局接到群眾報警&#xff0c;反映自己辛苦種植的小麥有幾十畝地被人偷偷用收割機盜割。公安機關迅速出警并立案偵查&#xff0c;通過查看監控視頻得知&#xff0c;用戶所在的公司租用了幾千畝土地進行農業種植&#xff0c;因公司與村民之…

Day26

Day26 注解 什么是注解 java.annotation包Annotation是從JDK1.5開始引入的新技術&#xff0c;注解即可以對程序員解釋又可以對程序解釋 注解與注釋的區別 注釋&#xff1a;對程序員解釋代碼信息注解&#xff1a;對程序和程序員解釋代碼信息 注解的所用 不是程序本身&#xff0…

【C語言】9.C語言函數棧幀的創建和銷毀

C語言函數棧幀的創建和銷毀 看完本文你能了解什么? 局部變量是怎么創建的&#xff1f;為什么局部變量的值是隨機值&#xff1f;函數是怎么傳參的&#xff1f;傳參的順序是怎么樣的&#xff1f;實參和形參是什么關系&#xff1f;函數調用是怎么做的&#xff1f;函數調用結束后怎…

LeetCode hot100-57-G

17. 電話號碼的字母組合 給定一個僅包含數字 2-9 的字符串&#xff0c;返回所有它能表示的字母組合。答案可以按 任意順序 返回。給出數字到字母的映射如下&#xff08;與電話按鍵相同&#xff09;。注意 1 不對應任何字母。不會&#xff0c;放IDEA里執行了一下大概理解了流程 …

『大模型筆記』KV緩存:Transformer中的內存使用!

『大模型筆記』KV緩存:Transformer中的內存使用! 文章目錄 一. KV緩存:Transformer中的內存使用!1.1. 介紹1.2. 自注意力機制回顧1.3. KV 緩存的工作原理1.4. 內存使用和示例1.4.1. 存儲鍵值緩存需要多少內存1.4.2. Example: OPT-30B(300億參數)四. 參考文獻進一步閱讀:…

深圳比創達電子|EMC與EMI濾波器:電子設備的“電磁防護罩”

在電子科技日新月異的今天&#xff0c;電磁兼容性&#xff08;EMC&#xff09;問題越來越受到工程師和技術人員的關注。其中&#xff0c;電磁干擾&#xff08;EMI&#xff09;和電磁干擾抑制&#xff08;即EMI濾波器&#xff09;是實現良好EMC性能的關鍵技術之一。 一、EMC與E…

KineFX —— 簡介

KineFX是綁定和動畫的框架和工具集&#xff0c;可在SOP級別創建和編輯角色&#xff1b;可從頭創建自己的KineFX角色&#xff0c;或使用特定的KineFX SOP和常規的SOP去編輯導入的角色和動畫&#xff1b; 程序化綁定 KineFX構建與程序化綁定的原則上&#xff0c;可快速非破壞性迭…