国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux網絡必備技能tcpdump應用場景和基礎原理與實戰案例

Linux愛好者 ? 來源:CSDN技術社區 ? 作者:chopin11vip ? 2021-03-19 11:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天要分享的是 tcpdump,它是 Linux 系統中特別有用的網絡工具,通常用于故障診斷、網絡分析,功能非常的強大。

相對于其它 Linux 工具而言,tcpdump 是復雜的。當然我也不推薦你去學習它的全部,學以致用,能夠解決工作中的問題才是關鍵。

本文會從應用場景和基礎原理出發,提供豐富的實踐案例,讓你快速的掌握 tcpdump 的核心使用方法,足以應對日常工作的需求。

應用場景

在日常工作中遇到的很多網絡問題都可以通過 tcpdump 優雅的解決:

1. 相信大多數同學都遇到過 SSH 連接服務器緩慢,通過 tcpdump 抓包,可以快速定位到具體原因,一般都是因為 DNS 解析速度太慢。

2. 當我們工程師與用戶面對網絡問題爭執不下時,通過 tcpdump 抓包,可以快速定位故障原因,輕松甩鍋,毫無壓力。

3. 當我們新開發的網絡程序,沒有按照預期工作時,通過 tcpdump 收集相關數據包,從包層面分析具體原因,讓問題迎刃而解。

4. 當我們的網絡程序性能比較低時,通過 tcpdump 分析數據流特征,結合相關協議來進行網絡參數優化,提高系統網絡性能。

5. 當我們學習網絡協議時,通過 tcpdump 抓包,分析協議格式,幫助我們更直觀、有效、快速的學習網絡協議。

上述只是簡單羅列幾種常見的應用場景,而 tcpdump 在網絡診斷、網絡優化、協議學習方面,確實是一款非常強大的網絡工具,只要存在網絡問題的地方,總能看到它的身影。

熟練的運用 tcpdump,可以幫助我們解決工作中各種網絡問題,下邊我們先簡單學習下它的工作原理

工作原理

tcpdump 是 Linux 系統中非常有用的網絡工具,運行在用戶態,本質上是通過調用 libpcap 庫的各種 api 來實現數據包的抓取功能。

29482068-8679-11eb-8b86-12bb97331649.jpg

通過上圖,我們可以很直觀的看到,數據包到達網卡后,經過數據包過濾器(BPF)篩選后,拷貝至用戶態的 tcpdump 程序,以供 tcpdump 工具進行后續的處理工作,輸出或保存到 pcap 文件。

數據包過濾器(BPF)主要作用,就是根據用戶輸入的過濾規則,只將用戶關心的數據包拷貝至 tcpdump,這樣能夠減少不必要的數據包拷貝,降低抓包帶來的性能損耗。

思考:這里分享一個真實的面試題

面試官:如果某些數據包被 iptables 封禁,是否可以通過 tcpdump 抓到包?

通過上圖,我們可以很輕易的回答此問題。

因為 Linux 系統中 netfilter 是工作在協議棧階段的,tcpdump 的過濾器(BPF)工作位置在協議棧之前,所以當然是可以抓到包了!

我們理解了 tcpdump 基本原理之后,下邊直接進入實戰!

實戰:基礎用法

我們先通過幾個簡單的示例來介紹 tcpdump 基本用法。

1. 不加任何參數,默認情況下將抓取第一個非 lo 網卡上所有的數據包

$ tcpdump

2. 抓取 eth0 網卡上的所有數據包

$ tcpdump -i eth0

3. 抓包時指定 -n 選項,不解析主機和端口名。這個參數很關鍵,會影響抓包的性能,一般抓包時都需要指定該選項。

$ tcpdump -n -i eth0

4. 抓取指定主機 192.168.1.100 的所有數據包

$ tcpdump -ni eth0 host 192.168.1.100

5. 抓取指定主機 10.1.1.2 發送的數據包

$ tcpdump -ni eth0 src host 10.1.1.2

6. 抓取發送給 10.1.1.2 的所有數據包

$ tcpdump -ni eth0 dst host 10.1.1.2

7. 抓取 eth0 網卡上發往指定主機的數據包,抓到 10 個包就停止,這個參數也比較常用

$ tcpdump -ni eth0 -c 10 dst host 192.168.1.200

8. 抓取 eth0 網卡上所有 SSH 請求數據包,SSH 默認端口是 22

$ tcpdump -ni eth0 dst port 22

9. 抓取 eth0 網卡上 5 個 ping 數據包

$ tcpdump -ni eth0 -c 5 icmp

10. 抓取 eth0 網卡上所有的 arp 數據包

$ tcpdump -ni eth0 arp

11. 使用十六進制輸出,當你想檢查數據包內容是否有問題時,十六進制輸出會很有幫助。

$ tcpdump -ni eth0 -c 1 arp -X

listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

1231.602995 ARP, Request who-has 172.17.92.133 tell 172.17.95.253, length 28

0x0000: 0001 0800 0604 0001 eeff ffff ffff ac11 。。。。。。。。。。。。。。。。

0x0010: 5ffd 0000 0000 0000 ac11 5c85 _.。。。。。。。。。

12. 只抓取 eth0 網卡上 IPv6 的流量

$ tcpdump -ni eth0 ip6

13. 抓取指定端口范圍的流量

$ tcpdump -ni eth0 portrange 80-9000

14. 抓取指定網段的流量

$ tcpdump -ni eth0 net 192.168.1.0/24

實戰:高級進階

tcpdump 強大的功能和靈活的策略,主要體現在過濾器(BPF)強大的表達式組合能力。

本節主要分享一些常見的所謂高級用法,希望讀者能夠舉一反三,根據自己實際需求,來靈活使用它。

1. 抓取指定客戶端訪問 ssh 的數據包

$ tcpdump -ni eth0 src 192.168.1.100 and dst port 22

2. 抓取從某個網段來,到某個網段去的流量

$ tcpdump -ni eth0 src net 192.168.1.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16

3. 抓取來自某個主機,發往非 ssh 端口的流量

$ tcpdump -ni eth0 src 10.0.2.4 and not dst port 22

4. 當構建復雜查詢的時候,你可能需要使用引號,單引號告訴 tcpdump 忽略特定的特殊字符,這里的 () 就是特殊符號,如果不用引號的話,就需要使用轉義字符

$ tcpdump -ni eth0 ‘src 10.0.2.4 and (dst port 3389 or 22)’

5. 基于包大小進行篩選,如果你正在查看特定的包大小,可以使用這個參數

小于等于 64 字節:

$ tcpdump -ni less 64

大于等于 64 字節:

$ tcpdump -ni eth0 greater 64

等于 64 字節:

$ tcpdump -ni eth0 length == 64

6. 過濾 TCP 特殊標記的數據包

抓取某主機發送的 RST 數據包:

$ tcpdump -ni eth0 src host 192.168.1.100 and ‘tcp[tcpflags] & (tcp-rst) != 0’

抓取某主機發送的 SYN 數據包:

$ tcpdump -ni eth0 src host 192.168.1.100 and ‘tcp[tcpflags] & (tcp-syn) != 0’

抓取某主機發送的 FIN 數據包:

$ tcpdump -ni eth0 src host 192.168.1.100 and ‘tcp[tcpflags] & (tcp-fin) != 0’

抓取 TCP 連接中的 SYN 或 FIN 包

$ tcpdump ‘tcp[tcpflags] & (tcp-syn|tcp-fin) != 0’

7. 抓取所有非 ping 類型的 ICMP 包

$ tcpdump ‘icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply’

8. 抓取端口是 80,網絡層協議為 IPv4, 并且含有數據,而不是 SYN、FIN 以及 ACK 等不含數據的數據包

$ tcpdump ‘tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)《《2)) - ((tcp[12]&0xf0)》》2)) != 0)’

解釋一下這個復雜的表達式,具體含義就是,整個 IP 數據包長度減去 IP 頭長度,再減去 TCP 頭的長度,結果不為 0,就表示數據包有 data,如果還不是很理解,需要自行補一下 tcp/ip 協議

9. 抓取 HTTP 報文,0x4754 是 GET 前兩字符的值,0x4854 是 HTTP 前兩個字符的值

$ tcpdump -ni eth0 ‘tcp[20:2]=0x4745 or tcp[20:2]=0x4854’

常用選項

通過上述的實戰案例,相信大家已經掌握的 tcpdump 基本用法,在這里來詳細總結一下常用的選項參數。

(一)基礎選項

-i:指定接口

-D:列出可用于抓包的接口

-s:指定數據包抓取的長度

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

-w:將抓包數據保存在文件中

-r:從文件中讀取數據

-C:指定文件大小,與 -w 配合使用

-F:從文件中讀取抓包的表達式

-n:不解析主機和端口號,這個參數很重要,一般都需要加上

-P:指定要抓取的包是流入還是流出的包,可以指定的值 in、out、inout

(二)輸出選項

-e:輸出信息中包含數據鏈路層頭部信息

-t:顯示時間戳,tttt 顯示更詳細的時間

-X:顯示十六進制格式

-v:顯示詳細的報文信息,嘗試 -vvv,v 越多顯示越詳細

過濾表達式

tcpdump 強大的功能和靈活的策略,主要體現在過濾器(BPF)強大的表達式組合能力。

(一)操作對象

表達式中可以操作的對象有如下幾種:

type,表示對象的類型,比如:host、net、port、portrange,如果不指定 type 的話,默認是 host

dir:表示傳輸的方向,可取的方式為:src、dst。

proto:表示協議,可選的協議有:ether、ip、ip6、arp、icmp、tcp、udp。

(二)條件組合

表達對象之間還可以通過關鍵字 and、or、not 進行連接,組成功能更強大的表達式。

or:表示或操作

and:表示與操作

not:表示非操作

建議看到這里后,再回頭去看實戰篇章的示例,相信必定會有更深的理解。如果是這樣,那就達到了我預期的效果了!

經驗到這里就不再加新知識點了,分享一些工作中總結的經驗:

1. 我們要知道 tcpdump 不是萬能藥,并不能解決所有的網絡問題。

2. 在高流量場景下,抓包可能會影響系統性能,如果是在生產環境,請謹慎使用!

3. 在高流量場景下,tcpdump 并不適合做流量統計,如果需要,可以使用交換機鏡像的方式去分析統計。

4. 在 Linux 上使用 tcpdump 抓包,結合 wireshark 工具進行數據分析,能事半功倍。

5. 抓包時,盡可能不要使用 any 接口來抓包。

6. 抓包時,盡可能指定詳細的數據包過濾表達式,減少無用數據包的拷貝。

7. 抓包時,盡量指定 -n 選項,減少解析主機和端口帶來的性能開銷。

最后

通過上述內容,我們知道 tcpdump 是一款功能強大的故障診斷、網絡分析工具。在我們的日常工作中,遇到的網絡問題總是能夠通過 tcpdump 來解決。

不過 tcpdump 相對于其它 Linux 命令來說,會復雜很多,但鑒于它強大功能的誘惑力,我們多花一些時間是值得的。要想很好地掌握 tcpdump,需要對網絡報文(TCP/IP協議)有一定的了解。

當然,對于簡單的使用來說,只要有網絡基礎概念就行,掌握了 tcpdump 常用方法,就足以應付工作中大部分網絡相關的疑難雜癥了。
編輯:lyn

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    88

    文章

    11758

    瀏覽量

    219002
  • 故障診斷
    +關注

    關注

    5

    文章

    255

    瀏覽量

    27352
  • 網絡分析
    +關注

    關注

    0

    文章

    31

    瀏覽量

    12317

原文標題:Linux 網絡分析必備技能:tcpdump 實戰詳解

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    算法工程師需要具備哪些技能?

    算法工程師需要掌握一系列跨學科的技能,涵蓋數學基礎、編程能力、算法理論、工程實踐以及業務理解等多個方面。 以下是具體技能及學習建議: 線性代數核心內容:矩陣運算、特征值分解、向量空間等。應用場景
    發表于 02-27 10:53

    京東關鍵詞的應用場景

    需求。以下是具體的高頻場景拆解: 1. 聯盟推廣選品與傭金優化 這是京東關鍵詞 API 最核心的應用場景之一,適配jingdong.union.open.goods.promotion.query接口(即前文實戰案例的接口)。
    的頭像 發表于 01-08 13:38 ?444次閱讀

    請問C語言中整形溢出對哪些應用場景影響較大?

    C語言中整形溢出對哪些應用場景影響較大
    發表于 12-24 08:24

    請問MOSFET在電源管理中有哪些應用場景

    MOSFET在電源管理中有哪些應用場景
    發表于 12-23 07:07

    Switch的應用場景

    Switch的應用場景如下: 調用一到多個函數 設置變量值或者返回一個值 執行一到多個代碼片段 如果case標簽很多,在switch的前兩個使用場景中,使用查找表可以更高效的完成。例如下面的兩種
    發表于 12-12 07:28

    藍牙網關是什么?都有哪些功能?應用場景有哪些?

    點,更構建起“設備互聯-數據流轉-智能管控”的完整鏈路,成為物聯網生態中不可或缺的核心組件。本文將系統解析藍牙網關的核心價值、技術架構、應用場景、現存挑戰及未來趨勢,為讀者呈現這一關鍵技術的全貌
    發表于 12-11 15:21

    Linux驅動開發的必備知識

    內核基礎知識: 1、熟悉 Linux 內核的架構、模塊系統、進程管理、內存管理等。 了解內核的編譯和加載過程。 2、C編程技能: 精通 C 語言編程,包括指針操作、內存管理、結構體等
    發表于 12-04 07:58

    CW32L083有哪些應用場景

    CW32L083有哪些應用場景
    發表于 11-24 07:37

    請問CW32L011有哪些應用場景

    請問CW32L011有哪些應用場景
    發表于 11-17 06:25

    嵌入式需要掌握哪些核心技能?

    嵌入式需要掌握哪些核心技能? 若想通過學習嵌入式技術提升就業競爭力,需重點掌握C語言、嵌入式硬件架構、RTOS/Linux開發、通信協議四大核心技能,并結合行業需求積累項目經驗。 以下為具體分析
    發表于 10-21 16:25

    TCPDump抓包分析實戰

    作為一名資深運維工程師,我在生產環境中遇到過各種奇葩的網絡問題。今天分享10個真實案例,帶你掌握TCPDump這把利器,讓網絡問題無處遁形!
    的頭像 發表于 08-06 17:58 ?1058次閱讀

    Ansible代碼上線項目實戰案例

    在DevOps浪潮中,自動化部署已經成為每個運維工程師的必備技能。今天我將分享一個完整的Ansible代碼上線項目實戰案例,讓你的部署效率提升10倍!
    的頭像 發表于 07-24 14:03 ?579次閱讀

    一文掌握Linux命令

    作為一名運維工程師,熟練掌握Linux命令是基本功中的基本功。無論是日常工作中的系統維護,還是面試時的技術考核,Linux命令都是繞不開的核心技能。本文將從實戰角度出發,系統梳理運維工
    的頭像 發表于 07-22 15:23 ?610次閱讀

    Linux系統中網絡配置詳解

    網絡配置是Linux系統運維中的核心技能之一。正確理解和配置子網掩碼、網關等網絡參數,直接影響系統的網絡連通性和性能。本文將深入探討
    的頭像 發表于 07-17 11:01 ?1193次閱讀

    Linux網絡管理的關鍵技術和最佳實踐

    在大型互聯網企業中,Linux網絡管理是運維工程師的核心技能之一。面對海量服務器、復雜網絡拓撲、高并發流量,運維人員需要掌握從基礎網絡配置到
    的頭像 發表于 07-09 09:53 ?944次閱讀