天天看點

網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

概述

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

tcpdump可以将網絡中傳送的資料包的“頭”完全截獲下來提供分析。它支援針對網絡層、協定、主機、網絡或端口的過濾,并提供and、or、not等邏輯語句來幫助你去掉無用的資訊。

tcpdump基于底層libpcap庫開發,運作需要root權限。

一、tcpdump安裝

  1. 環境

    虛拟機:vmware 15.5.2

    os: ubuntu 12.04

  2. 安裝tcpdump
sudo apt-get install tcpdump
           
網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

3. 版本檢視

tcpdump --h
           
網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

tcpdump version 4.0。

libpcap version 1.1.1 表示libpcap的版本。

二、tcpdump參數

常用參數選項說明:

參數 含義
-a 将網絡位址和廣播位址轉變成名字
-c 在收到指定的包的數目後,tcpdump就會停止;
-d 将比對資訊包的代碼以人們能夠了解的彙編格式給出;以可閱讀的格式輸出。
-dd 将比對資訊包的代碼以c語言程式段的格式給出;
-ddd 将比對資訊包的代碼以十進制的形式給出;
-e 在輸出行列印出資料鍊路層的頭部資訊;
-f 将外部的Internet位址以數字的形式列印出來;
-l 使标準輸出變為緩沖行形式;
-n 直接顯示IP位址,不現實名稱;
-nn 端口名稱顯示為數字形式,不現實名稱;
-t 在輸出的每一行不列印時間戳;
-v 輸出一個稍微詳細的資訊,例如在ip包中可以包括ttl和服務類型的資訊;
-vv 輸出詳細的封包資訊;
-F 從指定的檔案中讀取表達式,忽略其它的表達式;
-i 指定監聽的網絡接口;
-r 從指定的檔案中讀取包(這些包一般通過-w選項産生);
-w 直接将包寫入檔案中,并不分析和列印出來;
-T 将監聽到的包直接解釋為指定的類型的封包,常見的類型有rpc (遠端過程調用)和snmp(簡單 網絡管理協定;)

高階參數使用說明:

-A  以ASCII碼方式顯示每一個資料包(不會顯示資料包中鍊路層頭部資訊). 在抓取包含網頁資料的資料包時, 可友善檢視資料(nt: 即Handy for capturing web pages).

-c  count
    tcpdump将在接受到count個資料包後退出.

-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)

-d  以容易閱讀的形式,在标準輸出上列印出編排過的包比對碼, 随後tcpdump停止.(nt | rt: human readable, 容易閱讀的,通常是指以ascii碼來列印一些資訊. compiled, 編排過的. packet-matching code, 包比對碼,含義未知, 需補充)

-dd 以C語言的形式列印出包比對碼.

-ddd 以十進制數的形式列印出包比對碼(會在包比對碼之前有一個附加的'count'字首).

-D  列印系統中所有tcpdump可以在其上進行抓包的網絡接口. 每一個接口會列印出數字編号, 相應的接口名字, 以及可能的一個網絡接口描述. 其中網絡接口名字和數字編号可以用在tcpdump 的-i flag 選項(nt: 把名字或數字代替flag), 來指定要在其上抓包的網絡接口.

    此選項在不支援接口清單指令的系統上很有用(nt: 比如, Windows 系統, 或缺乏 ifconfig -a 的UNIX系統); 接口的數字編号在windows 2000 或其後的系統中很有用, 因為這些系統上的接口名字比較複雜, 而不易使用.

    如果tcpdump編譯時所依賴的libpcap庫太老,-D 選項不會被支援, 因為其中缺乏 pcap_findalldevs()函數.

-e  每行的列印輸出中将包括資料包的資料鍊路層頭部資訊

-E  [email protected] algo:secret,...

    可通過[email protected] algo:secret 來解密IPsec ESP包(nt | rt:IPsec Encapsulating Security Payload,IPsec 封裝安全負載, IPsec可了解為, 一整套對ip資料包的加密協定, ESP 為整個IP 資料包或其中上層協定部分被加密後的資料,前者的工作模式稱為隧道模式; 後者的工作模式稱為傳輸模式 . 工作原理, 另需補充).

    需要注意的是, 在終端啟動tcpdump 時, 可以為IPv4 ESP packets 設定密鑰(secret).

    可用于加密的算法包括des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc, 或者沒有(none).預設的是des-cbc(nt: des, Data Encryption Standard, 資料加密标準, 加密算法未知, 另需補充).secret 為用于ESP 的密鑰, 使用ASCII 字元串方式表達. 如果以 0x 開頭, 該密鑰将以16進制方式讀入.

    該選項中ESP 的定義遵循RFC2406, 而不是 RFC1827. 并且, 此選項隻是用來調試的, 不推薦以真實密鑰(secret)來使用該選項, 因為這樣不安全: 在指令行中輸入的secret 可以被其他人通過ps 等指令檢視到.

    除了以上的文法格式(nt: 指[email protected] algo:secret), 還可以在後面添加一個文法輸入檔案名字供tcpdump 使用(nt:即把[email protected] algo:secret,... 中...換成一個文法檔案名). 此檔案在接受到第一個ESP 包時會打開此檔案, 是以最好此時把賦予tcpdump 的一些特權取消(nt: 可了解為, 這樣防範之後, 當該檔案為惡意編寫時,不至于造成過大損害).

-f  顯示外部的IPv4 位址時(nt: foreign IPv4 addresses, 可了解為, 非本機ip位址), 采用數字方式而不是名字.(此選項是用來對付Sun公司的NIS伺服器的缺陷(nt: NIS, 網絡資訊服務, tcpdump 顯示外部位址的名字時會用到她提供的名稱服務): 此NIS伺服器在查詢非本地位址名字時,常常會陷入無盡的查詢循環).

    由于對外部(foreign)IPv4位址的測試需要用到本地網絡接口(nt: tcpdump 抓包時用到的接口)及其IPv4 位址和網絡掩碼. 如果此位址或網絡掩碼不可用, 或者此接口根本就沒有設定相應網絡位址和網絡掩碼(nt: linux 下的 'any' 網絡接口就不需要設定位址和掩碼, 不過此'any'接口可以收到系統中所有接口的資料包), 該選項不能正常工作.

-F  file
    使用file 檔案作為過濾條件表達式的輸入, 此時指令行上的輸入将被忽略.

-i  interface

    指定tcpdump 需要監聽的接口.  如果沒有指定, tcpdump 會從系統接口清單中搜尋編号最小的已配置好的接口(不包括 loopback 接口).一但找到第一個符合條件的接口, 搜尋馬上結束.

    在采用2.2版本或之後版本核心的Linux 作業系統上, 'any' 這個虛拟網絡接口可被用來接收所有網絡接口上的資料包(nt: 這會包括目的是該網絡接口的, 也包括目的不是該網絡接口的). 需要注意的是如果真實網絡接口不能工作在'混雜'模式(promiscuous)下,則無法在'any'這個虛拟的網絡接口上抓取其資料包.

    如果 -D 标志被指定, tcpdump會列印系統中的接口編号,而該編号就可用于此處的interface 參數.

-l  對标準輸出進行行緩沖(nt: 使标準輸出裝置遇到一個換行符就馬上把這行的内容列印出來).在需要同時觀察抓包列印以及儲存抓包記錄的時候很有用. 比如, 可通過以下指令組合來達到此目的:
    ``tcpdump  -l  |  tee dat'' 或者 ``tcpdump  -l   > dat  &  tail  -f  dat''.(nt: 前者使用tee來把tcpdump 的輸出同時放到檔案dat和标準輸出中, 而後者通過重定向操作'>', 把tcpdump的輸出放到dat 檔案中, 同時通過tail把dat檔案中的内容放到标準輸出中)

-L  列出指定網絡接口所支援的資料鍊路層的類型後退出.(nt: 指定接口通過-i 來指定)

-m  module
    通過module 指定的file 裝載SMI MIB 子產品(nt: SMI,Structure of Management Information, 管理資訊結構MIB, Management Information Base, 管理資訊庫. 可了解為, 這兩者用于SNMP(Simple Network Management Protoco)協定資料包的抓取. 具體SNMP 的工作原理未知, 另需補充).

    此選項可多次使用, 進而為tcpdump 裝載不同的MIB 子產品.

-M  secret  如果TCP 資料包(TCP segments)有TCP-MD5選項(在RFC 2385有相關描述), 則為其摘要的驗證指定一個公共的密鑰secret.

-n  不對位址(比如, 主機位址, 端口号)進行數字表示到名字表示的轉換.

-N  不列印出host 的域名部分. 比如, 如果設定了此選現, tcpdump 将會列印'nic' 而不是 'nic.ddn.mil'.

-O  不啟用進行包比對時所用的優化代碼. 當懷疑某些bug是由優化代碼引起的, 此選項将很有用.

-p  一般情況下, 把網絡接口設定為非'混雜'模式. 但必須注意 , 在特殊情況下此網絡接口還是會以'混雜'模式來工作; 進而, '-p' 的設與不設, 不能當做以下選現的代名詞:'ether host {local-hw-add}' 或  'ether broadcast'(nt: 前者表示隻比對以太網位址為host 的包, 後者表示比對以太網位址為廣播位址的資料包).

-q  快速(也許用'安靜'更好?)列印輸出. 即列印很少的協定相關資訊, 進而輸出行都比較簡短.

-R  設定tcpdump 對 ESP/AH 資料包的解析按照 RFC1825而不是RFC1829(nt: AH, 認證頭, ESP, 安全負載封裝, 這兩者會用在IP包的安全傳輸機制中). 如果此選項被設定, tcpdump 将不會列印出'禁止中繼'域(nt: relay prevention field). 另外,由于ESP/AH規範中沒有規定ESP/AH資料包必須擁有協定版本号域,是以tcpdump不能從收到的ESP/AH資料包中推導出協定版本号.

-r  file
    從檔案file 中讀取包資料. 如果file 字段為 '-' 符号, 則tcpdump 會從标準輸入中讀取包資料.

-S  列印TCP 資料包的順序号時, 使用絕對的順序号, 而不是相對的順序号.(nt: 相對順序号可了解為, 相對第一個TCP 包順序号的差距,比如, 接受方收到第一個資料包的絕對順序号為232323, 對于後來接收到的第2個,第3個資料包, tcpdump會列印其序列号為1, 2分别表示與第一個資料包的差距為1 和 2. 而如果此時-S 選項被設定, 對于後來接收到的第2個, 第3個資料包會列印出其絕對順序号:232324, 232325).

-s  snaplen
    設定tcpdump的資料包抓取長度為snaplen, 如果不設定預設将會是68位元組(而支援網絡接口分接頭(nt: NIT, 上文已有描述,可搜尋'網絡接口分接頭'關鍵字找到那裡)的SunOS系列作業系統中預設的也是最小值是96).68位元組對于IP, ICMP(nt: Internet Control Message Protocol,網際網路控制封包協定), TCP 以及 UDP 協定的封包已足夠, 但對于名稱服務(nt: 可了解為dns, nis等服務), NFS服務相關的資料包會産生包截短. 如果産生包截短這種情況, tcpdump的相應列印輸出行中會出現''[|proto]''的标志(proto 實際會顯示為被截短的資料包的相關協定層次). 需要注意的是, 采用長的抓取長度(nt: snaplen比較大), 會增加包的處理時間, 并且會減少tcpdump 可緩存的資料包的數量, 進而會導緻資料包的丢失. 是以, 在能抓取我們想要的包的前提下, 抓取長度越小越好.把snaplen 設定為0 意味着讓tcpdump自動選擇合适的長度來抓取資料包.

-T  type
    強制tcpdump按type指定的協定所描述的包結構來分析收到的資料包.  目前已知的type 可取的協定為:
    aodv (Ad-hoc On-demand Distance Vector protocol, 按需距離向量路由協定, 在Ad hoc(點對點模式)網絡中使用),
    cnfp (Cisco  NetFlow  protocol),  rpc(Remote Procedure Call), rtp (Real-Time Applications protocol),
    rtcp (Real-Time Applications con-trol protocol), snmp (Simple Network Management Protocol),
    tftp (Trivial File Transfer Protocol, 碎檔案協定), vat (Visual Audio Tool, 可用于在internet 上進行電
    視電話會議的應用層協定), 以及wb (distributed White Board, 可用于網絡會議的應用層協定).

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

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

-ttt   tcpdump 輸出時, 每兩行列印之間會延遲一個段時間(以毫秒為機關)

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

-u     列印出未加密的NFS 句柄(nt: handle可了解為NFS 中使用的檔案句柄, 這将包括檔案夾和檔案夾中的檔案)

-U    使得當tcpdump在使用-w 選項時, 其檔案寫入與包的儲存同步.(nt: 即, 當每個資料包被儲存時, 它将及時被寫入檔案中,而不是等檔案的輸出緩沖已滿時才真正寫入此檔案)

      -U 标志在老版本的libcap庫(nt: tcpdump 所依賴的封包捕獲庫)上不起作用, 因為其中缺乏pcap_cump_flush()函數.

-v    當分析和列印的時候, 産生詳細的輸出. 比如, 包的生存時間, 辨別, 總長度以及IP包的一些選項. 這也會打開一些附加的包完整性檢測, 比如對IP或ICMP標頭部的校驗和.

-vv   産生比-v更詳細的輸出. 比如, NFS回應包中的附加域将會被列印, SMB資料包也會被完全解碼.

-vvv  産生比-vv更詳細的輸出. 比如, telent 時所使用的SB, SE 選項将會被列印, 如果telnet同時使用的是圖形界面,
      其相應的圖形選項将會以16進制的方式列印出來(nt: telnet 的SB,SE選項含義未知, 另需補充).

-w    把包資料直接寫入檔案而不進行分析和列印輸出. 這些包資料可在随後通過-r 選項來重新讀入并進行分析和列印.

-W    filecount
      此選項與-C 選項配合使用, 這将限制可打開的檔案數目, 并且當檔案資料超過這裡設定的限制時, 依次循環替代之前的檔案, 這相當于一個擁有filecount 個檔案的檔案緩沖池. 同時, 該選項會使得每個檔案名的開頭會出現足夠多并用來占位的0, 這可以友善這些檔案被正确的排序.

-x    當分析和列印時, tcpdump 會列印每個包的頭部資料, 同時會以16進制列印出每個包的資料(但不包括連接配接層的頭部).總共列印的資料大小不會超過整個資料包的大小與snaplen 中的最小值. 必須要注意的是, 如果高層協定資料沒有snaplen 這麼長,并且資料鍊路層(比如, Ethernet層)有填充資料, 則這些填充資料也會被列印.(nt: so for link  layers  that pad, 未能銜接了解和翻譯, 需補充 )

-xx   tcpdump 會列印每個包的頭部資料, 同時會以16進制列印出每個包的資料, 其中包括資料鍊路層的頭部.

-X    當分析和列印時, tcpdump 會列印每個包的頭部資料, 同時會以16進制和ASCII碼形式列印出每個包的資料(但不包括連接配接層的頭部).這對于分析一些新協定的資料包很友善.

-XX   當分析和列印時, tcpdump 會列印每個包的頭部資料, 同時會以16進制和ASCII碼形式列印出每個包的資料, 其中包括資料鍊路層的頭部.這對于分析一些新協定的資料包很友善.

-y    datalinktype
      設定tcpdump 隻捕獲資料鍊路層協定類型是datalinktype的資料包

-Z    user
      使tcpdump 放棄自己的超級權限(如果以root使用者啟動tcpdump, tcpdump将會有超級使用者權限), 并把目前tcpdump的使用者ID設定為user, 組ID設定為user首要所屬組的ID(nt: tcpdump 此處可了解為tcpdump 運作之後對應的程序)

      此選項也可在編譯的時候被設定為預設打開.(nt: 此時user 的取值未知, 需補充)
           

三、指令選項使用舉例

1. 截獲主機收到和發出的所有資料包。

指令:

tcpdump
           

說明:

tcpdump截取包預設顯示資料包的頭部。

普通情況下,直接啟動tcpdump将監視第一個網絡接口上所有流過的資料包。

基礎格式:時間 資料包類型 源IP 端口/協定 > 目标IP 端口/協定 協定詳細資訊

網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

按下Ctrl+C會終止tcpdump指令。且會在結尾處生成統計資訊。

網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

2. 指定抓包數量 -c

指定抓取2個資料包。

指令:

說明:

最後會自動生成統計資訊。

網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

【注意,已經切換到管理者了,虛拟機中要産生資料包,可以另外開一個視窗ping baidu.com後面不再提示】

網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

3. 将抓包資訊寫入檔案 -w

使用-w選項指定記錄檔案。

指令:

tcpdump -c 10 -w tcpdump_test.log
           

說明:

儲存的檔案不是文本格式,不能直接檢視。tcpdump儲存的檔案的格式是幾乎所有主流的抓包工具軟體都可以讀取。是以可以使用更易讀的圖形界面工具來檢視記錄檔案。

網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

4. 讀取記錄檔案 -r

使用-r選項讀取檔案。

指令:

tcpdump -r tcpdump_test.log
           

![讀取記錄檔案

網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

5. 列印出所有可工作的接口 -D

指令:

tcpdump -D
           
網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

其中網卡為eth0。

6. 指定監控的網卡 -i

指令:

tcpdump -i eth0
           

如果不指定網卡,預設tcpdump隻會監視第一個網絡接口,一般是eth0。

7. 顯示更詳細的資料包資訊 -v -vv

選項-v,-vv可以顯示更詳細的抓包資訊。

網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark
網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

8. 不使用域名反解 -n

使用-n後,tcpdump會直接顯示IP位址,不會顯示域名(與netstat指令相似)。

9. 增加抓包時間戳 -tttt選項

tcpdump的所有輸出列印行中都會預設包含時間戳資訊;

時間戳資訊的顯示格式如下

此時間戳的精度與核心時間精度一緻, 反映的是核心第一次看到對應資料包的時間;

而資料包從實體線路傳遞到核心的時間, 以及核心花費在此包上的中斷處理時間都沒有算進來;

使用-tttt選項,抓包結果中将包含抓包日期:

指令:

tcpdump -tttt
           
網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

四、條件過濾

1. 過濾:指定需要抓取的協定

tcpdump可以隻抓某種協定的包,支援指定以下協定:ip,ip6,arp,tcp,udp,wlan等。

指令:

tcpdump udp

tcpdump icmp

tcpdump tcp

tcpdump arp
           

2. 過濾:指定協定的端口号

使用port參數,用于指定端口号。

指令:tcpdump tcp port 80

使用portrange參數,用于指定端口範圍。

指令:tcpdump tcp portrange 1-1024

3. 過濾:指定源與目标

src 表示源。

dst 表示目标。

指令:

tcpdump src port 8080

tcpdump dst port 80

4. 過濾:指定特定主機的消息包

使用host指定需要監聽的主機。

指令:

注意:若使用了host參數使用了計算機名或域名。例tcpdump host shi-pc ,則無法再使用-n選項。

5. 過濾:指定資料包大小

使用greater(大于)與less(小于)可以指定資料包大小的範圍。

例:隻抓取大于1000位元組的資料包。

指令:

例:隻抓取小于10位元組的資料包。

指令:

五、 邏輯表達式

使用基本邏輯組合拼裝出更精細的過濾條件。

1. 邏輯與

邏輯與關系,使用and。

指令:

tcpdump tcp and host 192.168.1.112

tcpdump tcp and src 192.168.1.112 and port 8080
           

2. 邏輯或

邏輯或關系,使用or。

指令:

3. 邏輯非

邏輯非關系,使用not,也可以使用 ! 。

若使用 ! 必須與其後面的字元隔開一個空格。

例:當通過ssh協定遠端使用tcpdump時,為了避免ssh的資料包的輸出,是以一般需要禁止ssh資料包的輸出。

指令:

tcpdump not tcp port 22

tcpdump ! tcp port 22
           

4. 括号

括号需要使用在引号内,或轉意使用。否則會報錯。

例:抓取非22端口,且主機為192.168.1.112 和 192.168.1.113的TCP資料包。

指令:

tcpdump not tcp port 22 and host 192.168.1.112or192.168.1.113

tcpdump "not tcp port 22 and host (192.168.1.112 or 192.168.1.113)"

tcpdump not tcp port 22 and host "(192.168.1.112 or 192.168.1.113)"
           

六、其他執行個體

1. 列印所有進入或離開sundown的資料包.

tcpdump host sundown
           

2. 截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通信

3. 如果想要擷取主機210.27.48.1除了和主機210.27.48.2之外所有主機通信的ip包,使用指令:

4. 監視所有送到主機hostname的資料包

tcpdump -i eth0 dst host hostname
           

5. 擷取主機210.27.48.1接收或發出的telnet包

23為telnet的端口

6. 監視本機的udp 123 端口

123 為ntp的服務端口

7. 使用tcpdump抓取HTTP包

  • 0x4745 為"GET"前兩個字母"GE",
  • 0x4854 為"HTTP"前兩個字母"HT"。

tcpdump 對截獲的資料并沒有進行徹底解碼,資料包内的大部分内容是使用十六進制的形式直接列印輸出的。

顯然這不利于分析網絡故障,通常的解決辦法是先使用帶**-w參數的tcpdump 截獲資料并儲存到檔案中**,然後再使用其他程式(如Wireshark)進行解碼分析。當然也應該定義過濾規則,以避免捕獲的資料包填滿整個硬碟。

六、檢視資料包完整内容

tcpdump預設不顯示資料包的詳細内容。

方法一:

使用-A參數能以ASCII碼顯示資料包。

例:隻抓取1個資料包,并顯示其内容。

指令:

tcpdump -c 1 -A
           
網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

方法二:

使用-X參數能16進制數與ASCII碼共同顯示資料包。

例:隻抓取1個資料包,并顯示其内容。

指令:

tcpdump -c 1 -X
           
網絡/指令行抓包工具tcpdump詳解概述一、tcpdump安裝二、tcpdump參數三、指令選項使用舉例四、條件過濾五、 邏輯表達式六、其他執行個體六、檢視資料包完整内容七、tcpdump 與wireshark

七、tcpdump 與wireshark

Wireshark(以前是ethereal)是Windows下非常簡單易用的抓包工具,現在也有Linux版本。

通過Tcpdump抓取的資料包分析比較麻煩,要想很友善的分析資料包, 我們可以用Tcpdump + Wireshark 的完美組合實作:在 Linux 裡抓包,然後在Windows 裡分析包。

儲存資料包為wireshark能識别的檔案:

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
           
參數 含義
tcp ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾資料報的類型
-i eth1 隻抓經過接口eth1的包
-t 不顯示時間戳
-s 0 抓取資料包時預設抓取長度為68位元組。加上-S 0 後可以抓到完整的資料包
-c 100 隻抓取100個資料包
dst port ! 22 不抓取目标端口是22的資料包
src net 192.168.1.0/24 資料包的源網絡位址為192.168.1.0/24
-w ./target.cap 儲存成cap檔案,友善用ethereal(即wireshark)分析

繼續閱讀