tcpdump:理論、自動抓包及業務架構樹的生成

2021-01-15 高效運維

請及時關注「高效運維(微信ID:greatops)」公眾號,並置頂公眾號,以免錯過各種乾貨滿滿的原創文章。

作者簡介:汪華

現任騰訊SNG社交網絡運營部高級工程師,負責多媒體增值業務的運維工作和運維自動化平臺建設。

目錄

一、tcpdump基礎

二、自動抓包工具的實現

三、基於訪問關係的業務架構樹

導語:

熟悉運維的兄弟姐妹都知道tcpdump是一款抓包分析利器,其靈活的過濾規則和對表達式的支持能夠讓我們在眾多的數據報文中抓取到理想的關鍵信息。

本文在介紹tcpdump的基本使用方式的同時,會向大家說明海量業務中tcpdump進階應用場景。

在開始閱讀之前請兄弟姐妹們現在腦海中思考一下這幾個問題,看看讀完本文後會有些什麼收穫。

1、tcpdump怎麼使用?

2、tcpdump在海量業務中又怎麼使用?

3、tcpdump除了抓包還能做什麼?

一、tcpdump基礎

tcpdump是一個對網絡數據包進行截獲的包分析工具。

tcpdump可以將網絡中傳送的數據包的「頭」完全截獲下來提供分析。它支持針對網絡層、協議、主機、埠等的過濾,並支持與、或、非邏輯語句協助過濾有效信息。

命令使用規則如下:

過濾方式有很多,可以依據所需設置過濾條件,較常用的三種:

1、可以按host過濾,例如:

tcpdump -i eth1 -n -X src host 10.19.66.62

2、可以按port過濾,例如:

tcpdump -i eth1 -n -X src host 10.19.66.62 and dst port 80

3、可以按protocol過濾,例如:

tcpdump -i eth1 -n -X src host 10.19.66.62 and dst port 80 and tcp

下面來看一下tcpdump過濾規則的具體使用:

我們在伺服器10.219.153.215上搭建了一個http服務用來作為服務端,10.19.66.62作為客戶端客戶端對其發起訪問。我們使用前面提到的按host 10.19.66.62、port 80以及protocol tcp的組合條件來執行tcpdump。

tcpdump -i eth1 -n  tcp port 80 and host 10.19.66.62


點擊可查看高清大圖

不同的協議類型有不同的數據包格式顯示,以tcp包為例,通常tcpdump對tcp數據包的顯示格式如下:

src > dst: flags data-seqno ack window urgent options

src > dst:表明從源地址到目的地址

flags:TCP包中的標誌信息,S 是SYN標誌,,F (FIN),P (PUSH),R (RST),」.」 (沒有標記)

data-seqno:是數據包中的數據的順序號

ack:是下次期望的順序號

window:是接收緩存的窗口大小

urgent:表明數據包中是否有緊急指針

options:選項

執行抓包過程中輸出的這八行數據其實包含了tcp三次握手和四次揮手的交互過程,詳細分析下看看:

點擊可查看高清大圖

第一至三行為建立連結的三次握手過程,包狀態為:[S]、[S.]、[.],第四至五行為傳輸數據的過程,包狀態為[P.]、[.];第六至八行為關閉連結的四次揮手過程(ack延遲發送未禁用,所以這裡只看到三個包),包狀態為[F.]、[F.]、[.]。

第一行:客戶端62向伺服器215發送了一個序號seq 2020752563給服務端;

第二行:服務端收到後將序號加一返回ack 2020752564;

第三行:客戶端檢查返回值正確,向服務端發ack 1,建立了連結;

第四行和第五行:具體的數據交互,tcpdump命令-x可以顯示出具體內容;

第六行:客戶端發一個序號seq 875,說明要斷開連結;

第七行:服務端在收到後序號加一返回ack 876,同意斷開連結;

第八行:客戶端檢查返回值正確,向服務端發ack,連結斷開。

以上的分析是使用基本的過濾條件組合獲取的,如果想要獲取到限制條件更嚴格的報文數據應該怎麼寫命令呢?比如在數據交互時狀態為[P.]. 即PSH-ACK,如果我們要抓取flag為[P.]的包應該怎麼實現呢?

這裡先掛一下tcp包頭的楨格式(詳解可參考TCP/IP協議),以便進一步說明如何使用tcpdump的過濾功能,頭部固定為20位元組,每行4位元組,根據協議規則可以看到各個字節中存放的內容的含義。

圖中控制標誌位在第13位元組(從0開始計數). 從右往左這些位被依次編號為0到7, 而PSH位在3號,ACK在第4位,因此我們想抓取狀態為[P.]的包表達式應寫為tcp13=18+8。

執行命令tcpdump -i eth1 -n -X src host 10.19.66.62 and dst port 80 and tcp13=24,此時加上-X參數可以以16進位和ASCII碼形式列印出包數據,便於觀察。

抓取到的數據如下圖,可以看到很方便的抓到了特定狀態的包。


點擊可查看高清大圖

如果要抓取業務中的get請求包,怎麼實現呢?首先查ASCII碼錶得」GET+空」的十六進位是0x47455420,因此表達式應為tcp[20:4]=0x47455420。

執行命令tcpdump -i eth1 -n -A src host 10.19.66.62 and dst port 80 and tcp[20:4]=0x47455420,此時加上-A參數以ASCII碼方式顯示數據包。

抓取到的輸出如下如,可以看到get請求的具體信息了。以此推論,我們還可以把tcpdump用來統計get、post請求的訪問次數等。

點擊可查看高清大圖

二、自動抓包工具的實現

第一部分中講解了tcpdump的一些基本用法和過濾方式,但都還停留在命令行層面。

那麼在海量運維系統中如何讓tcpdump發揮其作用?一個命令又是怎麼來構建訪問關係的分析平臺?構建平臺後又是怎麼利用分析結果的?

這裡要先說明一下我們業務中所使用的一款自動抓包工具的實現原理。

抓包工具由兩部分腳本組成,調度腳本run.sh和工作腳本access.sh:

核心實現是根據伺服器監聽的TCP和UDP埠,對抓取的報文進行分析後,將分析結果上報到網管,其工作原理如下流程圖:

1、定時執行調度腳本

業務的訪問是隨機並持續的,採用抽樣抓包的方式來獲取訪問關係數據。

所以設定為每三十分鐘執行一次調度腳本,將腳本的執行寫入到crontab中:/30 *

2、負載判決

短持續的抓包指令會帶來一定的負載消耗,所以抓包的執行需要避開伺服器高負載狀態。

因此調度腳本需要進行負載判決,每次執行前判斷負載是否在可執行抓包的閾值內。

此時計算cpu負載,代碼如下圖:

點擊可查看高清大圖

基本原理是採樣兩個足夠短的時間間隔的CPU快照來計算這段時間內的CPU平均使用率作為伺服器當前的CPU負載:

cat /proc/stat | grep ^cpu得到cpu的信息

used1=user+nice+system+irq+softirq

total1=user+nice+system+idle+iowait+irq+softirq

sleep 5秒

再次cat /proc/stat | grep ^cpu得到cpu的信息

used2=user+nice+system+irq+softirq

total2=user+nice+system+idle+iowait+irq+softirq

得到cpu在5秒內的平均使用率:

(cpu_used2 - cpu_used1) / (cpu_total2 - cpu_total1) * 100%

得到CPU的使用率後就可以進行判決了,可以假定閾值為90%,在負載閾值內即可啟動抓包腳本access.sh,否則終止。

示例代碼如下:

點擊可查看高清大圖

3、讀取伺服器的網絡接口和IP位址

此處用來獲取網卡和對應的IP位址,一般抓取內網IP即可。

點擊可查看高清大圖

4、獲取伺服器監聽的TCP/UDP埠

示例代碼如下:需要排除掉綁定IP為local的部分

點擊可查看高清大圖

5、執行抓包

此處就到了返璞歸真的時候了,運用第一部分講到的tcpdump過濾基礎設定好過濾條件,後面的工作就是按條件組合來獲取想要的報文數據了。此處設定了空包、埠出入包、入包、出包、所有包的幾個條件。

點擊可查看高清大圖

執行抓包後將數據結果按一定的結構組合上報到網管屬性。

點擊可查看高清大圖

以上就是自動抓包工具的工作原理和實現方式,將此工具嵌入在伺服器的初始化部署中,所有伺服器在工作的同時可以上報業務的訪問關係數據。

至此就完成了對所有伺服器訪問報文的上報和收集,後續的進階應用都是在此基礎上發展起來的。

三、基於訪問關係的業務架構樹

前文提到的自動抓包工具獲取分析的報文數據已經上報到了網管系統,對一個業務而言,有了訪問關係數據基礎,我們就可以將模塊間伺服器的訪問關係繪製圖譜,業務架構樹也就應運而生。

以訪問關係作為骨架,業務模塊作為肢體,通過圖形化模型來展示業務架構,一眼就能獲取更多的運營信息數據。

從訪問關係中就可以看到業務請求的流轉方向,對不合理的調用架構比如環狀或者往復迂迴的調用採取優化,可以降低關鍵模塊的請求壓力。

業務架構樹的繪製原理可以分為以下步驟:

1、IP維度匯聚為功能模塊維度

一個業務由若干功能模塊組成,功能模塊由若干伺服器提供業務支撐。

前文提到的抓包數據是按IP維度上報的,所以首先需要按CMDB的數據匯聚出業務模塊的訪問關係,這裡按IP維度取併集即可得到。匯聚之後以模塊樣式呈現在架構樹中。

模塊的附加信息包含了幾種運維管理平臺的抽象信息,除了各種跳轉接口以外,容量信息以能量條的形式展現(綠色為低負載<30%,藍色為正常負載30%<x<80%,紅色為高負載>80%)。</x<80%,紅色為高負載>

註:本文只講解和tcpdump相關的部分,其他的功能組成等以後的文章再做說明。

2、確定主被調模塊以及訪問關係

有了功能模塊的呈現後,平臺就可以對模塊附加上訪問關係的連線。

前文提到抓包數據的分析結果是以這種形式「本機IP 源IP 目標IP 包大小 時間戳 源埠 目的埠 包量 協議 方向」上報到網管的。

按模塊匯聚後,本機IP等於源IP時,目標IP匯聚的模塊即為「被調」;針對這次調用本機IP或源IP匯聚的模塊即為「主調」;主調到被調的方向即為主被調的「訪問關係」。

下圖就是一個連接關係的確立模型:A->B->C

對於TCP協議的訪問主被調的訪問關係是明確的,這裡補充說明下UDP協議的服務怎麼來確定主被調的。

UDP協議是面向無連接的,服務端綁定埠(也可能是一個埠段),在眾多的抓包數據中,可以通過聚類的方式將埠或者埠段匯聚出來。對提供服務的集合而言,通過聚類得到了服務端,也就確定了架構樹中的被調模塊了。

3、選取業務自動繪製

經過1、2的原子說明後,就可以整體來看一個業務的架構樹形態了。

在CMDB上選擇一個業務導入繪製架構樹,平臺根據抓包關係匯聚出各主調->被調的節點和連線,然後通過排列算法將這些節點和連線組合,最終呈現出一份業務架構樹模型。

如下圖所示:

點擊可查看高清大圖

總結

文章內容也基本回答了我對最初幾個問題的理解。從tcpdump入門到繪製業務訪問拓撲視圖,是在海量運維沉澱出來的經驗。

對於日常運維工作幫助較大,如快速定位故障節點,同時沉澱的訪問關係數據也廣泛地應用在其他運維高階場景中如資源回收、監控、大範圍告警關聯分析等等。本文旨在拋磚引玉,希望對大家有幫助。

雲時代應用運維怎麼升值加薪?

不忽悠!

首屆 「724運維日」 大型主題活動,將告訴你答案

屆時北上廣深蓉同時舉行,各路大神齊現身

限量免費門票,掃碼即有機會獲得

↓↓↓ 您也可以點擊"閱讀原文" ,直接搶票

相關焦點

  • 技術文章:網絡/命令行抓包工具tcpdump詳解
    tcpdump基於底層libpcap庫開發,運行需要root權限。一、tcpdump安裝環境虛擬機:vmware 15.5.2os: ubuntu 12.04安裝tcpdumpsudo apt-get install tcpdump
  • Python 爬蟲,推薦一款簡單的抓包工具
    前言傳統的抓包工具, 如:Fiddler、Charles、Wireshark、Tcpdump,相信大家都耳熟能詳今天我們聊一款另外一款抓包工具:Jmeter它是 Apache 組織開發基於 JAVA 語言的免費開源測試工具雖然 Jmeter 主要用於壓力性能測試,但使用它進行抓包也非常方便!2.
  • Facebook開發新技術:用照片自動生成卡通頭像
    Facebook開發新技術:用照片自動生成卡通頭像2017-10-24 09:20出處/作者:新浪科技整合編輯:Sharon責任編輯:fengxiaowen 10月24日上午消息,製作卡通頭像,誰有時間做這種事?電腦就可以。
  • 你真的懂「抓包」嗎?
    frame由網絡接口設備在TCP/IP協議棧的第2層生成,payload大小取決於傳輸的數據類型。frame被發送到網絡上,乙太網交換機根據其存儲器中的MAC表檢查frame的目的地址。MAC表告訴交換機哪個物理埠(RJ45埠)與設備相關聯,該設備的MAC地址與幀的目的地址相匹配。交換機將frame轉發到由MAC表確定的物理埠。
  • 抓包技術詳解及抓包軟體介紹
    抓包 概念:抓包(packet capture)就是將網絡傳輸發送與接收的數據包進行截獲、重發、編輯、轉存等操作,也用來檢查網絡安全。抓包也經常被用來進行數據截取等。本文講解的抓包是一個主動的過程,主要抓取某個軟體或某個app的數據包。和黑客技術中的嗅探有所不同,還請區分。抓包工具介紹:Wireshark,在N久以前也叫Ethereal。這是目前網絡封包分析行業中使用最廣的軟體,功能非常強大。開源軟體,支持二次開發,支持插件開發。一般在工作中,我使用它來進行tcp協議的分析。
  • 相芯科技首秀SIGGRAPH,3D形象自動生成火了
    只要3秒,立刻生成你的卡通3D形象除了前沿的技術,不少在VR/AR成熟商業化、進入消費級領域應用的商家也備受關注。FaceUnity(相芯科技)的SIGGRAPH首秀之行,為各參展者帶來了虛擬形象自動生成和AI虛擬助手的產品解決方案,成為展區現場最具人氣的展臺之一。
  • 簡易版倉庫管理工具:自動生成庫存統計及月結存查詢,財務必備
    系統功能說明本系統是通過出入庫數據,自動生成的庫存統計表,我們只需要選擇,我們需要的月份數據表,即可自動生成該月的月結統計表。1、系統功能導航系統①「首頁」中我們可以看到有一些標誌詞,這些詞都已安裝號超連結,點擊功能按鈕,即可自動跳轉到相關頁面;②在我們的首頁中,還附帶有系統使用說明書。
  • 剛剛美團開源了一款超級好用的抓包及 Mock 工具
    公眾號:AirPython作者:星安果1.前言抓包和 Mock 是日常工作中經常用到的 2 個功能,可能第一時間你會想到 Charles、Fiddler 但是這兩款工具在 Mock 數據管理上功能過於簡單,並且擴展性不強這裡,強烈推薦美團剛開源的一個工具,即:Lyrebird2.介紹
  • EXCEL中DATE函數與TEXT函數的組合自動生成帶星期幾格式的考勤表
    EXCEL函數公式大全之利用DATE函數與TEXT函數的組合自動生成帶星期幾的考勤表。excel函數與公式在工作中使用非常的頻繁,會不會使用公式直接決定了我們的工作效率,今天我們來學習一下提高我們工作效率的函數DATE函數和TEXT函數。
  • 前端開發者的福音:根據UI設計圖自動生成GUI骨架代碼
    有沒有辦法通過 UI 設計圖直接生成 GUI 骨架代碼來簡化這個繁複的轉換過程,讓開發者解放更多精力投入到後續的應用功能開發中去?某些工具聲稱可以在給定 UI 設計圖的情況下自動生成 GUI 骨架代碼,但這些工具由於是基於人工設計的視覺理解規則實現的,因此功能十分有限,不能處理真實複雜的 UI 設計(如圖 1)。
  • 白帽子黑客抓包工具排行榜
    網絡安全的白帽子黑客都有一些心水的抓包工具,抓包工具是攔截查看網絡數據包內容的軟體。白帽子黑客用抓包工具來分析報文,針對漏洞做一些滲透測試。下面對白帽子黑客常用的五種網絡抓包工具做了個整理。第五名:TCPDump(網絡類)根據白帽子黑客抓包工具的使用率,將TCPdump排在第五的位置。
  • 2D動畫唇動合成,根據語音自動生成動畫人物口型
    只需要輸入一段語音,代碼會自動生成與之相對的動畫唇形。  還是毫無違和感的那種。    它既可以是Windows和OS X命令行工具,也可以作為軟體的插件使用,能夠根據語音記錄自動創建2D嘴型動畫。  它可以用於計算機遊戲、動畫卡通中的角色,或者用於其他需要基於現有錄音、對嘴部進行動畫處理的的影視項目。  那麼,它是怎麼實現如此效果的呢?  運作原理  首先,了解一下動畫人物說話的六種嘴型。
  • 省水利廳青年理論學習小組開展衛星遙感技術與水利業務融合專題...
    為促進高新技術與水利業務深度融合,激發水利青年在落實「水利工程補短板、水利行業強監管」中創新方式方法、提升服務效能的思考,12月31日,省水利廳青年理論學習小組開展了衛星遙感技術與水利業務融合專題研學活動。
  • 蘋果新專利:用戶照片自動生成3D地圖「街景」
    美國專利和商標局本周二通過了一項蘋果申請的「使用可攜式電子設備錄製功能生成三維模型」專利,蘋果早在2010年就簡單描述了該專利,不過這次的專利有了更多細節
  • 推薦四個網絡爬蟲抓包神器
    目前市面上比較不錯的網絡爬蟲抓包工具有Fiddler、charles、Anyproxy和mitmproxy等。有人可能會問,何為網絡爬蟲?首先,網絡爬蟲它是一種程序,它的樣子如同一個大蜘蛛.它將網絡上全部的連結和內容進行查索,建立相關的資料庫並引入。
  • 為打壓盜版Google在搜索自動生成功能中移除Kodi
    【PConline資訊】據報導,Google已經開始在其搜索自動生成功能中禁止了"Kodi"一詞,這意味著想要搜索該詞的用戶需要自己打全才能看到搜索結果。據悉,此舉則是為了打壓網絡盜版。雖然Kodi是一款合法的流媒體機頂盒軟體,但它卻支持大量提供盜版媒體的第三方插件。
  • 一鍵生成幾十款 Logo 任你選,AI 設計公司 Tailor Brands 獲 1550...
    創立於 2014 年,Tailor Brands 利用 AI 和機器學習,幫小公司自動設計生成 Logo。在其官網上輸入品牌名稱、行業、公司相關信息,確認企業的調性和特點;通過幾組對比圖,讓用戶篩選出個人喜歡的風格後,Tailor Brands 只需要兩秒鐘就可以生成幾十種風格的 Logo 備選,畫風如下。
  • Fiddler:程式設計師必備的網絡抓包調試工具
    Fiddler是一個非常流行的網絡抓包調試工具,也算是比較出名吧。其實說起抓包工具,很多人可能先想到的是wireshark這個經典工具。不過wireshark側重於網絡抓包,可以抓所有類型的數據包,並且解析包的內容。
  • 自動氣象站的如何實現網絡監控與自動報警
    截止到目前,自動氣象站設備已經開始融入各行各業,除為人所熟知的農業行業外,如交通、金融、電力、旅遊等行業也均對實時氣象信息的需求越來越高。伴隨著氣象自動化觀測能力不斷增強,氣象觀測項目的不斷增加,氣象站設備的類型越來越豐富。由於觀測數據量的不斷加大,傳輸網絡堵塞的情況就會經常出現,嚴重影響了後臺數據的更新,對生產和生活產生了較大的影響。