Linux 基礎教程 29-tcpdump命令-1

来源:https://www.cnblogs.com/surpassme/archive/2018/07/27/9380087.html
-Advertisement-
Play Games

什麼是tcpdump     在Linux中輸入命令man tcpdump給出的定義如下所示: 是不是感覺很懵?我們用通俗、形象、學術的表達方式來全方位描述tcpdump: 通俗的來說,tcpdump是一個抓包工具,用於抓取網路中傳輸的數據包 形象的來說,tcpdump如同國家海 ...


什麼是tcpdump

    在Linux中輸入命令man tcpdump給出的定義如下所示:

tcpdump - 轉儲網路上的數據流

是不是感覺很懵?我們用通俗、形象、學術的表達方式來全方位描述tcpdump:

  • 通俗的來說,tcpdump是一個抓包工具,用於抓取網路中傳輸的數據包
  • 形象的來說,tcpdump如同國家海關,凡是入境和出境的貨物,海關都要抽樣檢查,看看裡面具體是什麼貨物
  • 學術的來說,tcpdump是一種Sniffer(嗅探器),利用乙太網的特性,通過將網路設備置於混雜模式來獲取傳輸在網路中的信息包
在使用tcpdump需要瞭解以下的知識點:
1、瞭解和使用過Linux系統
2、學習OSI七層協議和作用
3、熟悉網路協議,特別是IP/TCP/UDP
4、瞭解交換機、路由器所對應的協議層且知道兩者的差異

基本語法

tcpdump [選項] [網路介面]

常用選項如下所示:

選項 說明
-A 只顯示ASCII形式的數據包內容
-c 就是Count的含義,指在接收到指定數量的分組包後退出,簡單來說就是允許抓幾個包
-d 將匹配信息包的編碼以人們能夠理解的格式進行顯示並退出
-dd 將匹配信息包的編碼以C語言程式段的格式顯示
-ddd 將匹配信息包的編碼以十進位的形式顯示
-D 列出所有可以選擇的抓包對象
-e 添加數據鏈路層的頭部信息
-F 指定過濾表達式所在的文件
-i 即interface,指定監聽的網路介面
-l 將輸出變為行緩衝模式
-n 不將主機地址轉換為名字
-nn 不轉換協議和埠號,當tcpdump遇到協議號或埠號,不需要將這些數字轉換為對應的協議名稱或埠名稱,如22埠SSH埠,我們希望顯示22,而非SSH
-p 將網路介面設置為非混雜模式
-q 快速輸出,僅輸出較少的協議信息
-r 從文件中讀取原始數據包,而這個文件通過由選項 -w 所產生
-t 在每一行中不輸出時間戳
-tt 在每一行中輸出非格式化的時間戳
-ttt 在每一行中輸出本行與前一行的時間差,單位為ms
-tttt 在每一行中輸出由date處理的預設格式的時間戳
-ttttt 在每一行中輸出本行與第一行的時間差,單位為ms
-v 顯示更詳細的信息
-w 將原始數據包信息保存到文件中
-X 將協議頭和包內容原原本本的顯示出來

示例

如果要使用tcpdump抓包,一定要切換到root賬戶中。

1、第一個抓包示例

[root@localhost ~]# tcpdump -i ens5f1 -nn -X 'port 22' -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
22:34:11.334916 IP 192.168.8.8.22 > 112.64.61.186.37035: Flags [P.], seq 3341229570:3341229782, ack 1999159071, win 31152, length 212
    0x0000:  4510 00fc 7e99 4000 4006 44a8 c0a8 0808  E...~.@[email protected].....
    0x0010:  7040 3dba 0016 90ab c727 1e02 7728 bf1f  p@=......'..w(..
    0x0020:  5018 79b0 7799 0000 0000 00b0 823d 4cf1  P.y.w........=L.
    0x0030:  1108 58fc 3686 2bd2 5220 fe37 85ab 74cc  ..X.6.+.R..7..t.
    0x0040:  bfb1 8831 7d1c 3b57 52ae aa91 28a2 67d8  ...1}.;WR...(.g.
    0x0050:  08fb a257 7fc8 7186 39dc d266 3d32 cce8  ...W..q.9..f=2..
    0x0060:  3eb7 130b a7d3 833b 59c9 bdf8 2141 6863  >......;Y...!Ahc
    0x0070:  7cae 25ff 459e c94a a635 7098 6925 db48  |.%.E..J.5p.i%.H
    0x0080:  a9b0 32ab 5393 737f cf8c f2ed b47a 7d8b  ..2.S.s......z}.
    0x0090:  346c 39df 3ecc d2b0 e0ad 5104 272d 6513  4l9.>.....Q.'-e.
    0x00a0:  4b8d 5ee6 6c7d 9477 e40b 8637 996a bb5a  K.^.l}.w...7.j.Z
    0x00b0:  471a 2ac4 3335 266d 0485 2e52 b2c2 f6e8  G.*.35&m...R....
    0x00c0:  0549 5ae0 9c7b ad45 da0a eef2 1ccb b2ac  .IZ..{.E........
    0x00d0:  a4a2 0a96 cc5f 238c 9570 0d15 984e 6f58  ....._#..p...NoX
    0x00e0:  d8ff 8034 1165 cf44 02e4 ed6b 631e 2548  ...4.e.D...kc.%H
    0x00f0:  56fd 4c8a 664c e5ee d845 2e50            V.L.fL...E.P
1 packet captured
1 packet received by filter
0 packets dropped by kernel

-i : 指定用來抓包的網路介面,這個參數在伺服器有多個網卡的時候非常有效
-nn : 不轉換協議和埠號,當tcpdump遇到協議號或埠號,不需要將這些數字轉換為對應的協議名稱或埠名稱,如22埠SSH埠,我們希望顯示22,而非SSH
-X : 將協議頭和包內容原原本本的顯示出來,tcpdump會同時以16進位和ASCII的形式進行顯示,在協議分析時非常好用。
'port 22' : 告訴tcpdump要有選擇的顯示所抓到的包,在該示例中,只顯示源埠或目的埠是22的數據包,其他的數據包則不顯示。
-c : 用來指定抓包的個數,示例設置的個數為1,則代表僅抓取一個包之後就退出不再抓包了。

2、-e 增加數據鏈路層的頭部信息

  • 不帶-e的抓包
[root@localhost ~]# tcpdump -i ens5f1 -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
23:44:06.918259 IP localhost.localdomain.ssh > 112.64.61.186.37035: Flags [P.], seq 3341233794:3341234006, ack 1999165283, win 31152, length 212
1 packet captured
6 packets received by filter
0 packets dropped by kernel
  • 帶-e的抓包
[root@localhost ~]# tcpdump -i ens5f1 -c 1 -e
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
23:45:51.114314 dc:fe:18:65:76:f2 (oui Unknown) > 34:97:f6:5a:50:e0 (oui Unknown), ethertype IPv4 (0x0800), length 82: 112.85.42.197.20263 > localhost.localdomain.ssh: Flags [P.], seq 254675888:254675904, ack 306708143, win 155, options [nop,nop,TS val 3668622988 ecr 391712180], length 16
1 packet captured
8 packets received by filter
0 packets dropped by kernel

    通過兩個命令的輸出對比,可以看到增加-e選項後,輸出的結果中增加MAC地址信息。而且在輸出內容中會有oui Unknown,OUI即Organizationally unique identifier(組織唯一標識符),在任何一塊網卡中燒錄的6位元組MAC地址中,前3個位元組體現了OUI,其表明瞭網卡的製造組織,通常情況下,該標識符是唯一的。在本例中,由於沒有識別出網卡的製造商,因此顯示為Unknown。

3、-l 將輸出變為行緩衝模式

    -l的作用是將tcpdump的輸出行為變為行緩衝方式,這樣可以保證tcpdump遇到換行符,就立即將緩衝的內容輸出到標準輸出(stdout),方便利用管道或重定向方式進行後續處理,而不會造成延遲。
    在Linux的標準I/O中提供了全緩衝行緩衝無緩衝三種緩衝方式。標準錯誤是不帶緩衝的,而終端設備常為行緩衝,其他預設則為全緩衝。

[root@localhost ~]# tcpdump -i ens5f1 -l -c 5 | awk '{print $5}'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
112.64.61.186.37035:
gateway.domain:
localhost.localdomain.49348:
gateway.domain:
localhost.localdomain.ssh:
5 packets captured
13 packets received by filter
0 packets dropped by kernel

    在該例中,將tcpdump輸出的內容通過管道提取第5列,可以用來查看詳細的連接信息。而如果不加 -l 選項時,則只有當緩衝區全部占滿時,tcpdump才會將緩衝區中的內容輸出,這樣就有可能導致輸出不連續的,如果強行結束,則會影響下一行的完整性。

4、-t 輸出不加時間戳

[root@localhost ~]# tcpdump -i ens5f1 -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
23:48:03.193526 IP localhost.localdomain.ssh > 112.64.60.194.19101: Flags [P.], seq 3091447763:3091447975, ack 4113666212, win 251, length 212
1 packet captured
6 packets received by filter
0 packets dropped by kernel

[root@localhost ~]# tcpdump -i ens5f1 -c 1 -t
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
IP localhost.localdomain.ssh > 112.64.60.194.19101: Flags [P.], seq 3091448643:3091448855, ack 4113666488, win 251, length 212
1 packet captured
6 packets received by filter
0 packets dropped by kernel

    在增加選項-t選項後,時間23:48:03.193526就消失了。tcpdump預設情況下是按微秒來計時,因此最一個時間精確到了第6位。

5、 -v 顯示詳細信息

[root@localhost ~]# tcpdump -i ens5f1 -c 1 -v
tcpdump: listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
23:53:13.252748 IP (tos 0x10, ttl 64, id 24820, offset 0, flags [DF], proto TCP (6), length 188)
    localhost.localdomain.ssh > 112.64.60.194.19101: Flags [P.], cksum 0x7661 (incorrect -> 0x2474), seq 3091449471:3091449619, ack 4113666972, win 251, length 148
1 packet captured
7 packets received by filter
0 packets dropped by kernel

    在增加-v選項後,會在輸出的內容中增加tosttlidoffset協議編號總長度等,如需要理解這些信息,就需要瞭解TCP/IP協議中的頭的具體定義了。

6、-F 指定過濾表達式所在的文件
    在第一個示例中,命令行增加了'port 22',而這一項就叫過濾條件,如果設置了過濾條件,則tcpdump只抓取滿足過濾條件的數據包。如需要設置較為複雜的過濾條件或復用過濾條件時,這時可以將過濾條件保存為文件,然後通過-F載入該過濾文件。

[root@localhost ~]# cat tcpdumpFilter.txt
port 22

[root@localhost ~]# tcpdump -i ens5f1 -c 1  -v  -F ~/tcpdumpFilter.txt 
tcpdump: listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
00:05:52.685555 IP (tos 0x10, ttl 64, id 25291, offset 0, flags [DF], proto TCP (6), length 188)
    localhost.localdomain.ssh > 112.64.60.194.19101: Flags [P.], cksum 0x7661 (incorrect -> 0x827b), seq 3091492507:3091492655, ack 4113685300, win 251, length 148
1 packet captured
3 packets received by filter
0 packets dropped by kernel

7、 -w 將原始數據包信息保存到文件中

[root@localhost ~]# tcpdump -i ens5f1 -c 1  -v  -F ~/tcpdumpFilter.txt -w ~/tcpdumpRAW
tcpdump: listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
1 packet captured
1 packet received by filter
0 packets dropped by kernel

[root@localhost ~]# cat tcpdumpRAW 
Ճ²¡¯OW[ߌ
        ˊݾev

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

-Advertisement-
Play Games
更多相關文章
  • 大家好,今天又想到需要寫一下博客了,畢竟感覺應該在新人入公司的時候可能需要將你電腦上的開發環境進行修改。 下麵講的主要是將VS2012卸載後,重新安裝VS2010,。 我遇到了這種情況:在我將VS2012卸載完後。發現在網上下載VS2010的安裝包下載完成後,進行安裝,發現在安裝完成之後,自己沒有的 ...
  • 從入職到準備離開兩年多了,兩年的時間不長也不斷,各種原因,決定離開了。 挺捨不得這群小伙伴,帶了一個項目組兩年了,不得不走了,感情的牌就不打了。 記得從入職時,公司研發的源碼管理工具使用的SVN,其實SVN也是非常不錯的中心式源碼管理工具,不過一個項目的解決方案,達到了2G到30G,個人感覺比較混亂 ...
  • 控制器代碼: public string ValidateCarID(string carid) { string result; Car car = db.Car.Find(carid); if(car==null) { result = "false"; //沒有找到 } else { resu ...
  • 客戶機上基於Oracle 9i的ODBC數據源,無法連接oracle 11G資料庫,提示錯誤為:error ORA-01017, Invalid Username / Password。奇怪的是:sqlplus能連接成功;且基於Oracle 10G的ODBC數據源也能連接成功。 解決方法:以DBA進 ...
  • unity中播放視頻步驟如下: 1.將要播放的視頻拖入projec。(註意:unity一般支持的視頻格式有mov, .mpg, .mpeg, .mp4,.avi, .asf格式 ) 2.在場景中添加RawImage。(因為Image使用sprite渲染,rawImage是用texture渲染) 3. ...
  • 優化HighCharts 利用svg導出圖片到Excel,圖片模糊問題 ...
  • 我們在創建Powerpoint文檔時,系統預設的幻燈片是空白背景的,很多時候我們需要自定義幻燈片背景,以達到美觀的文檔效果。在下麵的示例中將介紹給PowerPoint幻燈片設置背景的方法,主要包含以下三個部分: 添加純色背景 添加漸變色背景 添加圖片作為背景 所需工具 Free Spire.Pres ...
  • 很簡單,一條命令可以搞定:sudo apt-get install bcmwl-kernel-source ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...