抓包工具tcpdump用法說明

来源:http://www.cnblogs.com/f-ck-need-u/archive/2017/06/22/7064286.html
-Advertisement-
Play Games

本文目錄: 1.1 tcpdump選項 1.2 tcpdump表達式 1.3 tcpdump示例 tcpdump採用命令行方式對介面的數據包進行篩選抓取,其豐富特性表現在靈活的表達式上。 不帶任何選項的tcpdump,預設會抓取第一個網路介面,且只有將tcpdump進程終止才會停止抓包。 例如: s ...



本文目錄:

1.1 tcpdump選項

1.2 tcpdump表達式

1.3 tcpdump示例


tcpdump採用命令行方式對介面的數據包進行篩選抓取,其豐富特性表現在靈活的表達式上。

不帶任何選項的tcpdump,預設會抓取第一個網路介面,且只有將tcpdump進程終止才會停止抓包。

例如:

shell> tcpdump -nn -i eth0 icmp

下麵是詳細的tcpdump用法。

1.1 tcpdump選項

它的命令格式為:

tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ]
        [ -s snaplen ] [ -w file ] [ expression ]

抓包選項:
-c:指定要抓取的包數量。註意,是最終要獲取這麼多個包。例如,指定"-c 10"將獲取10個包,但可能已經處理了100個包,只不過只有10個包是滿足條件的包。
-i interface:指定tcpdump需要監聽的介面。若未指定該選項,將從系統介面列表中搜尋編號最小的已配置好的介面(不包括loopback介面,要抓取loopback介面使用tcpdump -i lo),
:一旦找到第一個符合條件的介面,搜尋馬上結束。可以使用'any'關鍵字表示所有網路介面。 -n:對地址以數字方式顯式,否則顯式為主機名,也就是說-n選項不做主機名解析。 -nn:除了-n的作用外,還把埠顯示為數值,否則顯示埠服務名。 -N:不列印出host的功能變數名稱部分。例如tcpdump將會列印'nic'而不是'nic.ddn.mil'-P:指定要抓取的包是流入還是流出的包。可以給定的值為"in""out""inout",預設為"inout"-s len:設置tcpdump的數據包抓取長度為len,如果不設置預設將會是65535位元組。對於要抓取的數據包較大時,長度設置不夠可能會產生包截斷,若出現包截斷,
:輸出行中會出現"[|proto]"的標誌(proto實際會顯示為協議名)。但是抓取len越長,包的處理時間越長,並且會減少tcpdump可緩存的數據包的數量,
:從而會導致數據包的丟失,所以在能抓取我們想要的包的前提下,抓取長度越小越好。 輸出選項:
-e:輸出的每行中都將包括數據鏈路層頭部信息,例如源MAC和目標MAC。 -q:快速列印輸出。即列印很少的協議相關信息,從而輸出行都比較簡短。 -X:輸出包的頭部數據,會以16進位和ASCII兩種方式同時輸出。 -XX:輸出包的頭部數據,會以16進位和ASCII兩種方式同時輸出,更詳細。 -v:當分析和列印的時候,產生詳細的輸出。 -vv:產生比-v更詳細的輸出。 -vvv:產生比-vv更詳細的輸出。 其他功能性選項: -D:列出可用於抓包的介面。將會列出介面的數值編號和介面名,它們都可以用於"-i"後。 -F:從文件中讀取抓包的表達式。若使用該選項,則命令行中給定的其他表達式都將失效。 -w:將抓包數據輸出到文件中而不是標準輸出。可以同時配合"-G time"選項使得輸出文件每time秒就自動切換到另一個文件。可通過"-r"選項載入這些文件以進行分析和列印。 -r:從給定的數據包文件中讀取數據。使用"-"表示從標準輸入中讀取。

所以常用的選項也就這幾個:

  • tcpdump -D
  • tcpdump -c num -i int -nn -XX -vvv

1.2 tcpdump表達式

表達式用於篩選輸出哪些類型的數據包,如果沒有給定表達式,所有的數據包都將輸出,否則只輸出表達式為true的包。在表達式中出現的shell元字元建議使用單引號包圍。

tcpdump的表達式由一個或多個"單元"組成,每個單元一般包含ID的修飾符和一個ID(數字或名稱)。有三種修飾符:

(1).type:指定ID的類型。

可以給定的值有host/net/port/portrange。例如"host foo","net 128.3","port 20","portrange 6000-6008"。預設的type為host。

(2).dir:指定ID的方向。

可以給定的值包括src/dst/src or dst/src and dst,預設為src or dst。例如,"src foo"表示源主機為foo的數據包,"dst net 128.3"表示目標網路為128.3的數據包,"src or dst port 22"表示源或目的埠為22的數據包。

(3).proto:通過給定協議限定匹配的數據包類型。

常用的協議有tcp/udp/arp/ip/ether/icmp等,若未給定協議類型,則匹配所有可能的類型。例如"tcp port 21","udp portrange 7000-7009"。

所以,一個基本的表達式單元格式為"proto dir type ID"

除了使用修飾符和ID組成的表達式單元,還有關鍵字表達式單元:gateway,broadcast,less,greater以及算術表達式。

表達式單元之間可以使用操作符" and / && / or / || / not / ! "進行連接,從而組成複雜的條件表達式。如"host foo and not port ftp and not port ftp-data",這表示篩選的數據包要滿足"主機為foo且埠不是ftp(埠21)和ftp-data(埠20)的包",常用埠和名字的對應關係可在linux系統中的/etc/service文件中找到。

另外,同樣的修飾符可省略,如"tcp dst port ftp or ftp-data or domain"與"tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain"意義相同,都表示包的協議為tcp且目的埠為ftp或ftp-data或domain(埠53)。

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

1.3 tcpdump示例

(1).預設啟動

tcpdump

預設情況下,直接啟動tcpdump將監視第一個網路介面(非lo口)上所有流通的數據包。這樣抓取的結果會非常多,滾動非常快。

(2).監視指定網路介面的數據包

tcpdump -i eth1

如果不指定網卡,預設tcpdump只會監視第一個網路介面,如eth0。

(3).監視指定主機的數據包,例如所有進入或離開longshuai的數據包

tcpdump host longshuai

(4).列印helios<-->hot或helios<-->ace之間通信的數據包

tcpdump host helios and \( hot or ace \)

(5).列印ace與任何其他主機之間通信的IP數據包,但不包括與helios之間的數據包

tcpdump ip host ace and not helios

(6).截獲主機hostname發送的所有數據

tcpdump src host hostname

(7).監視所有發送到主機hostname的數據包

tcpdump dst host hostname

(8).監視指定主機和埠的數據包

tcpdump tcp port 22 and host hostname

(9).對本機的udp 123埠進行監視(123為ntp的服務埠)

tcpdump udp port 123

(10).監視指定網路的數據包,如本機與192.168網段通信的數據包,"-c 10"表示只抓取10個包

tcpdump -c 10 net 192.168

(11).列印所有通過網關snup的ftp數據包(註意,表達式被單引號括起來了,這可以防止shell對其中的括弧進行錯誤解析)

shell> tcpdump 'gateway snup and (port ftp or ftp-data)'

(12).抓取ping包

[root@server2 ~]# tcpdump -c 5 -nn -i eth0 icmp 

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:11:23.273638 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16422, seq 10, length 64
12:11:23.273666 IP 192.168.100.62 > 192.168.100.70: ICMP echo reply, id 16422, seq 10, length 64
12:11:24.356915 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16422, seq 11, length 64
12:11:24.356936 IP 192.168.100.62 > 192.168.100.70: ICMP echo reply, id 16422, seq 11, length 64
12:11:25.440887 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16422, seq 12, length 64
5 packets captured
6 packets received by filter
0 packets dropped by kernel

如果明確要抓取主機為192.168.100.70對本機的ping,則使用and操作符。

[root@server2 ~]# tcpdump -c 5 -nn -i eth0 icmp and src 192.168.100.62

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:09:29.957132 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 1, length 64
12:09:31.041035 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 2, length 64
12:09:32.124562 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 3, length 64
12:09:33.208514 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 4, length 64
12:09:34.292222 IP 192.168.100.70 > 192.168.100.62: ICMP echo request, id 16166, seq 5, length 64
5 packets captured
5 packets received by filter
0 packets dropped by kernel

註意不能直接寫icmp src 192.168.100.70,因為icmp協議不支持直接應用host這個type。

(13).抓取到本機22埠包

[root@server2 ~]# tcpdump -c 10 -nn -i eth0 tcp dst port 22  

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:06:57.574293 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 535528834, win 2053, length 0
12:06:57.629125 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 193, win 2052, length 0
12:06:57.684688 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 385, win 2051, length 0
12:06:57.738977 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 577, win 2050, length 0
12:06:57.794305 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 769, win 2050, length 0
12:06:57.848720 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 961, win 2049, length 0
12:06:57.904057 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 1153, win 2048, length 0
12:06:57.958477 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 1345, win 2047, length 0
12:06:58.014338 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 1537, win 2053, length 0
12:06:58.069361 IP 192.168.100.1.5788 > 192.168.100.62.22: Flags [.], ack 1729, win 2052, length 0
10 packets captured
10 packets received by filter
0 packets dropped by kernel

(14).解析包數據

[root@server2 ~]# tcpdump -c 2 -q -XX -vvv -nn -i eth0 tcp dst port 22
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:15:54.788812 IP (tos 0x0, ttl 64, id 19303, offset 0, flags [DF], proto TCP (6), length 40)
    192.168.100.1.5788 > 192.168.100.62.22: tcp 0
        0x0000:  000c 2908 9234 0050 56c0 0008 0800 4500  ..)..4.PV.....E.
        0x0010:  0028 4b67 4000 4006 a5d8 c0a8 6401 c0a8  .(Kg@[email protected]...
        0x0020:  643e 169c 0016 2426 5fd6 1fec 2b62 5010  d>....$&_...+bP.
        0x0030:  0803 7844 0000 0000 0000 0000            ..xD........
12:15:54.842641 IP (tos 0x0, ttl 64, id 19304, offset 0, flags [DF], proto TCP (6), length 40)
    192.168.100.1.5788 > 192.168.100.62.22: tcp 0
        0x0000:  000c 2908 9234 0050 56c0 0008 0800 4500  ..)..4.PV.....E.
        0x0010:  0028 4b68 4000 4006 a5d7 c0a8 6401 c0a8  .(Kh@[email protected]...
        0x0020:  643e 169c 0016 2426 5fd6 1fec 2d62 5010  d>....$&_...-bP.
        0x0030:  0801 7646 0000 0000 0000 0000            ..vF........
2 packets captured
2 packets received by filter
0 packets dropped by kernel

總的來說,tcpdump對基本的數據包抓取方法還是較簡單的。只要掌握有限的幾個選項(-nn -XX -vvv -i -c -q),再組合表達式即可。

 

姊妹篇:網路掃描工具nmap

 

回到系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/7064286.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • pt-query-digest可以通過logs, processlist, 和tcpdump來分析MySQL的查詢相關信息,基本語法如下: pt-query-digest [OPTIONS] [FILES] [DSN] pt-query-digest是一種用於分析MySQL查詢的簡單易用的工具,沒有 ...
  • 首先獲取scsi設備的信息。 [root@server2 ~]# lsscsi [2:0:0:0] disk VMware, VMware Virtual S 1.0 /dev/sda [4:0:0:0] cd/dvd NECVMWar VMware SATA CD01 1.00 /dev/sr0 ...
  • 原文發表於:2010-09-16 轉載至cu於:2012-07-21 一.原理簡介 PXE(preboot execute environment)工作於Client/Server的網路模式,支持工作站通過網路從遠端伺服器下載鏡像,並由此支持來自網路的操作系統的啟動。啟動過程中,終端由DHCP伺服器 ...
  • 當添加一個新賬號後,我們可能會發現新賬號sudo 時會報告不在sudoers中,使用su -s時輸入密碼後也會認證失敗 上網搜索大部分都要求修改/etc/sudoers中的內容,但修改這個文件必須需要許可權,這就陷入了死迴圈,故而我們需要更改策略來迂迴更改文件: 1、使用另一個可以使用root許可權的賬 ...
  • composer Install 官網 https://getcomposer.org Composer 是 PHP 用來管理依賴(dependency)關係的工具。你可以在自己的項目中聲明所依賴的外部工具庫(libraries),Composer 會幫你安裝這些依賴的庫文件。 下麵使用比較簡單使用 ...
  • 串口初始化後第一次發送數據丟失第一個字元的問題,現象是在上電或者複位後調試串口的列印信息總是會丟掉第一個字母。 解決: 一直是在原有項目基礎上進行工作,一直沒有處理這個問題,今天有時間看了看,發現是因為fputc函數中用的是GetFlagStatus函數,嘗試改為while((USART3->SR& ...
  • 第一種:查看實時變化的日誌(比較吃記憶體) 最常用的: tail -f filename (預設最後10行,相當於增加參數 -n 10) Ctrl+c 是退出tail命令 其他情況: tail -n 20 filename (顯示filename最後20行) tail -n +5 filename ( ...
  • 本文目錄: 1.1 選項說明 1.2 嘗試一次掃描 1.3 掃描目標說明 1.4 埠狀態說明 1.5 時間參數優化 1.6 掃描操作系統類型 1.7 快速掃描存活的主機 1.8 快速掃描埠 nmap一般就用來掃描主機是否線上(特別是掃描區域網記憶體活的機器)、開放了哪些埠。其他的功能用的比較少, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...