成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

tcpdump抓包分析詳解-創(chuàng)新互聯(lián)

tcpdump抓包分析詳解

成都創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、資陽網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5建站、電子商務商城網(wǎng)站建設、集團公司官網(wǎng)建設、成都外貿(mào)網(wǎng)站建設、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為資陽等各大城市提供網(wǎng)站開發(fā)制作服務。

      

1 起因

前段時間,一直在調(diào)線上的一個問題:線上應用接受POST請求,請求body中的參數(shù)獲取不全,存在丟失的狀況。這個問題是偶發(fā)性的,大概發(fā)生的幾率為5%-10%左右,這個概率已經(jīng)相當高了。在排查問題的過程中使用到了tcpdump和Wireshark進行抓包分析。感覺這兩個工具搭配起來干活,非常完美。所有的網(wǎng)絡傳輸在這兩個工具搭配下,都無處遁形。

為了更好、更順手地能夠用好這兩個工具,特整理本篇文章,希望也能給大家?guī)硎斋@。為大家之后排查問題,添一利器。

2 tcpdump與Wireshark介紹

在網(wǎng)絡問題的調(diào)試中,tcpdump應該說是一個必不可少的工具,和大部分linux下優(yōu)秀工具一樣,它的特點就是簡單而強大。它是基于Unix系統(tǒng)的命令行式的數(shù)據(jù)包嗅探工具,可以抓取流動在網(wǎng)卡上的數(shù)據(jù)包。

默認情況下,tcpdump不會抓取本機內(nèi)部通訊的報文。根據(jù)網(wǎng)絡協(xié)議棧的規(guī)定,對于報文,即使是目的地是本機,也需要經(jīng)過本機的網(wǎng)絡協(xié)議層,所以本機通訊肯定是通過API進入了內(nèi)核,并且完成了路由選擇?!颈热绫緳C的TCP通信,也必須要socket通信的基本要素:src ip port dst ip port】

如果要使用tcpdump抓取其他主機MAC地址的數(shù)據(jù)包,必須開啟網(wǎng)卡混雜模式,所謂混雜模式,用最簡單的語言就是讓網(wǎng)卡抓取任何經(jīng)過它的數(shù)據(jù)包,不管這個數(shù)據(jù)包是不是發(fā)給它或者是它發(fā)出的。一般而言,Unix不會讓普通用戶設置混雜模式,因為這樣可以看到別人的信息,比如telnet的用戶名和密碼,這樣會引起一些安全上的問題,所以只有root用戶可以開啟混雜模式,開啟混雜模式的命令是:ifconfig en0 promisc, en0是你要打開混雜模式的網(wǎng)卡。

Linux抓包原理:

Linux抓包是通過注冊一種虛擬的底層網(wǎng)絡協(xié)議來完成對網(wǎng)絡報文(準確的說是網(wǎng)絡設備)消息的處理權。當網(wǎng)卡接收到一個網(wǎng)絡報文之后,它會遍歷系統(tǒng)中所有已經(jīng)注冊的網(wǎng)絡協(xié)議,例如以太網(wǎng)協(xié)議、x25協(xié)議處理模塊來嘗試進行報文的解析處理,這一點和一些文件系統(tǒng)的掛載相似,就是讓系統(tǒng)中所有的已經(jīng)注冊的文件系統(tǒng)來進行嘗試掛載,如果哪一個認為自己可以處理,那么就完成掛載。

當抓包模塊把自己偽裝成一個網(wǎng)絡協(xié)議的時候,系統(tǒng)在收到報文的時候就會給這個偽協(xié)議一次機會,讓它來對網(wǎng)卡收到的報文進行一次處理,此時該模塊就會趁機對報文進行窺探,也就是把這個報文完完整整的復制一份,假裝是自己接收到的報文,匯報給抓包模塊。

Wireshark是一個網(wǎng)絡協(xié)議檢測工具,支持Windows平臺、Unix平臺、Mac平臺,一般只在圖形界面平臺下使用Wireshark,如果是Linux的話,直接使用tcpdump了,因為一般而言Linux都自帶的tcpdump,或者用tcpdump抓包以后用Wireshark打開分析。

在Mac平臺下,Wireshark通過WinPcap進行抓包,封裝的很好,使用起來很方便,可以很容易的制定抓包過濾器或者顯示過濾器,具體簡單使用下面會介紹。Wireshark是一個免費的工具,只要google一下就能很容易找到下載的地方。

所以,tcpdump是用來抓取數(shù)據(jù)非常方便,Wireshark則是用于分析抓取到的數(shù)據(jù)比較方便。

3 tcpdump使用

3.1 語法

類型的關鍵字

host(缺省類型): 指明一臺主機,如:host 210.27.48.2

net: 指明一個網(wǎng)絡地址,如:net 202.0.0.0

port: 指明端口號,如:port 23

確定方向的關鍵字

src: src 210.27.48.2, IP包源地址是210.27.48.2

dst: dst net 202.0.0.0, 目標網(wǎng)絡地址是202.0.0.0

dst or src(缺省值)

dst and src

協(xié)議的關鍵字:缺省值是監(jiān)聽所有協(xié)議的信息包

fddi

ip

arp

rarp

tcp

udp

其他關鍵字

gateway

broadcast

less

greater

常用表達式:多條件時可以用括號,但是要用轉義

非 : ! or “not” (去掉雙引號)

且 : && or “and”

或 : || or “or”

3.2 選項

tcpdump抓包分析詳解

3.3 命令實踐

1、直接啟動tcpdump,將抓取所有經(jīng)過第一個網(wǎng)絡接口上的數(shù)據(jù)包

tcpdump抓包分析詳解

2、抓取所有經(jīng)過指定網(wǎng)絡接口上的數(shù)據(jù)包

tcpdump抓包分析詳解

3、抓取所有經(jīng)過 en0,目的或源地址是 10.37.63.255 的網(wǎng)絡數(shù)據(jù):

tcpdump抓包分析詳解

4、抓取主機10.37.63.255和主機10.37.63.61或10.37.63.95的通信:

tcpdump抓包分析詳解

5、抓取主機192.168.13.210除了和主機10.37.63.61之外所有主機通信的數(shù)據(jù)包:

tcpdump抓包分析詳解

6、抓取主機10.37.63.255除了和主機10.37.63.61之外所有主機通信的ip包

tcpdump抓包分析詳解

7、抓取主機10.37.63.3發(fā)送的所有數(shù)據(jù):

tcpdump抓包分析詳解

8、抓取主機10.37.63.3接收的所有數(shù)據(jù):

tcpdump抓包分析詳解

9、抓取主機10.37.63.3所有在TCP 80端口的數(shù)據(jù)包:

tcpdump抓包分析詳解

10、抓取HTTP主機10.37.63.3在80端口接收到的數(shù)據(jù)包:

tcpdump抓包分析詳解

11、抓取所有經(jīng)過 en0,目的或源端口是 25 的網(wǎng)絡數(shù)據(jù)

tcpdump抓包分析詳解

12、抓取所有經(jīng)過 en0,網(wǎng)絡是 192.168上的數(shù)據(jù)包

tcpdump抓包分析詳解

13、協(xié)議過濾

tcpdump抓包分析詳解

14、抓取所有經(jīng)過 en0,目的地址是 192.168.1.254 或 192.168.1.200 端口是 80 的 TCP 數(shù)據(jù)

tcpdump抓包分析詳解

15、抓取所有經(jīng)過 en0,目標 MAC 地址是 00:01:02:03:04:05 的 ICMP 數(shù)據(jù)

tcpdump抓包分析詳解

16、抓取所有經(jīng)過 en0,目的網(wǎng)絡是 192.168,但目的主機不是 192.168.1.200 的 TCP 數(shù)據(jù)

tcpdump抓包分析詳解

17、只抓 SYN 包

tcpdump抓包分析詳解

18、抓 SYN, ACK

tcpdump抓包分析詳解

19、抓 SMTP 數(shù)據(jù),抓取數(shù)據(jù)區(qū)開始為”MAIL”的包,”MAIL”的十六進制為 0x4d41494c

tcpdump抓包分析詳解

20、抓 HTTP GET 數(shù)據(jù),”GET “的十六進制是 0x47455420

tcpdump抓包分析詳解

21、抓 SSH 返回,”SSH-“的十六進制是 0x5353482D

tcpdump抓包分析詳解

22、高級包頭過濾如前兩個的包頭過濾,首先了解如何從包頭過濾信息:

tcpdump抓包分析詳解

23、抓 DNS 請求數(shù)據(jù)

tcpdump抓包分析詳解

24、其他-c 參數(shù)對于運維人員來說也比較常用,因為流量比較大的服務器,靠人工 CTRL+C 還是抓的太多,于是可以用-c 參數(shù)指定抓多少個包。

tcpdump抓包分析詳解

3.4 抓個網(wǎng)站練練

想抓取訪問某個網(wǎng)站時的網(wǎng)絡數(shù)據(jù)。比如網(wǎng)站 http://www.baidu.com/ 怎么做?

1、通過tcpdump截獲主機www.baidu.com發(fā)送與接收所有的數(shù)據(jù)包

tcpdump抓包分析詳解

2、訪問這個網(wǎng)站

tcpdump抓包分析詳解

3、想要看到詳細的http報文。怎么做?

tcpdump抓包分析詳解

4、分析抓取到的報文

tcpdump抓包分析詳解

4 tcpdump抓取TCP包分析

TCP傳輸控制協(xié)議是面向連接的可靠的傳輸層協(xié)議,在進行數(shù)據(jù)傳輸之前,需要在傳輸數(shù)據(jù)的兩端(客戶端和服務器端)創(chuàng)建一個連接,這個連接由一對插口地址唯一標識,即是在IP報文首部的源IP地址、目的IP地址,以及TCP數(shù)據(jù)報首部的源端口地址和目的端口地址。TCP首部結構如下:

tcpdump抓包分析詳解

注意:通常情況下,一個正常的TCP連接,都會有三個階段:1、TCP三次握手;2、數(shù)據(jù)傳送;3、TCP四次揮手

其中在TCP連接和斷開連接過程中的關鍵部分如下:

源端口號:即發(fā)送方的端口號,在TCP連接過程中,對于客戶端,端口號往往由內(nèi)核分配,無需進程指定;

目的端口號:即發(fā)送目的的端口號;

序號:即為發(fā)送的數(shù)據(jù)段首個字節(jié)的序號;

確認序號:在收到對方發(fā)來的數(shù)據(jù)報,發(fā)送確認時期待對方下一次發(fā)送的數(shù)據(jù)序號;

SYN:同步序列編號,Synchronize Sequence Numbers;

ACK:確認編號,Acknowledgement Number;

FIN:結束標志,F(xiàn)INish;

4.1 TCP三次握手

三次握手的過程如下:

tcpdump抓包分析詳解

step1. 由客戶端向服務器端發(fā)起TCP連接請求。Client發(fā)送:同步序列編號SYN置為1,發(fā)送序號Seq為一個隨機數(shù),這里假設為X,確認序號ACK置為0;

step2. 服務器端接收到連接請求。Server響應:同步序列編號SYN置為1,并將確認序號ACK置為X+1,然后生成一個隨機數(shù)Y作為發(fā)送序號Seq(因為所確認的數(shù)據(jù)報的確認序號未初始化);

step3. 客戶端對接收到的確認進行確認。Client發(fā)送:將確認序號ACK置為Y+1,然后將發(fā)送序號Seq置為X+1(即為接收到的數(shù)據(jù)報的確認序號);

為什么是三次握手而不是兩次對于step3的作用,假設一種情況,客戶端A向服務器B發(fā)送一個連接請求數(shù)據(jù)報,然后這個數(shù)據(jù)報在網(wǎng)絡中滯留導致其遲到了,雖然遲到了,但是服務器仍然會接收并發(fā)回一個確認數(shù)據(jù)報。但是A卻因為久久收不到B的確認而將發(fā)送的請求連接置為失效,等到一段時間后,接到B發(fā)送過來的確認,A認為自己現(xiàn)在沒有發(fā)送連接,而B卻一直以為連接成功了,于是一直在等待A的動作,而A將不會有任何的動作了。這會導致服務器資源白白浪費掉了,因此,兩次握手是不行的,因此需要再加上一次,對B發(fā)過來的確認再進行一次確認,即確認這次連接是有效的,從而建立連接。

對于雙方,發(fā)送序號的初始化為何值有的系統(tǒng)中是顯式的初始化序號是0,但是這種已知的初始化值是非常危險的,因為這會使得一些***鉆漏洞,發(fā)送一些數(shù)據(jù)報來破壞連接。因此,初始化序號因為取隨機數(shù)會更好一些,并且是越隨機越安全。

tcpdump抓TCP三次握手抓包分析:

sudotcpdump-n-S-ilo0host10.37.63.3andtcpport8080

# 接著再運行:

curlhttp://10.37.63.3:8080/atbg/doc

控制臺輸出:

tcpdump抓包分析詳解

每一行中間都有這個包所攜帶的標志:

S=SYN,發(fā)起連接標志。

P=PUSH,傳送數(shù)據(jù)標志。

F=FIN,關閉連接標志。

ack,表示確認包。

RST=RESET,異常關閉連接。

.,表示沒有任何標志。

第1行:16:00:13.486776,從10.37.63.3(client)的臨時端口61725向10.37.63.3(server)的8080監(jiān)聽端口發(fā)起連接,client初始包序號seq為1944916150,滑動窗口大小為65535字節(jié)(滑動窗口即tcp接收緩沖區(qū)的大小,用于tcp擁塞控制),mss大小為16344(即可接收的大包長度,通常為MTU減40字節(jié),IP頭和TCP頭各20字節(jié))?!緎eq=1944916150,ack=0,syn=1】

第2行:16:00:13.486850,server響應連接,同時帶上第一個包的ack信息,為client端的初始包序號seq加1,即1944916151,即server端下次等待接受這個包序號的包,用于tcp字節(jié)流的順序控制。Server端的初始包序號seq為1119565918,mss也是16344?!緎eq=1119565918,ack=1944916151,syn=1】

第3行:15:46:13.084161,client再次發(fā)送確認連接,tcp連接三次握手完成,等待傳輸數(shù)據(jù)包?!綼ck=1119565919,seq=1944916151】

4.2 TCP四次揮手

連接雙方在完成數(shù)據(jù)傳輸之后就需要斷開連接。由于TCP連接是屬于全雙工的,即連接雙方可以在一條TCP連接上互相傳輸數(shù)據(jù),因此在斷開時存在一個半關閉狀態(tài),即有有一方失去發(fā)送數(shù)據(jù)的能力,卻還能接收數(shù)據(jù)。因此,斷開連接需要分為四次。主要過程如下:

tcpdump抓包分析詳解

step1. 主機A向主機B發(fā)起斷開連接請求,之后主機A進入FIN-WAIT-1狀態(tài);

step2. 主機B收到主機A的請求后,向主機A發(fā)回確認,然后進入CLOSE-WAIT狀態(tài);

step3. 主機A收到B的確認之后,進入FIN-WAIT-2狀態(tài),此時便是半關閉狀態(tài),即主機A失去發(fā)送能力,但是主機B卻還能向A發(fā)送數(shù)據(jù),并且A可以接收數(shù)據(jù)。此時主機B占主導位置了,如果需要繼續(xù)關閉則需要主機B來操作了;

step4. 主機B向A發(fā)出斷開連接請求,然后進入LAST-ACK狀態(tài);

step5. 主機A接收到請求后發(fā)送確認,進入TIME-WAIT狀態(tài),等待2MSL之后進入CLOSED狀態(tài),而主機B則在接受到確認后進入CLOSED狀態(tài);

為何主機A在發(fā)送了最后的確認后沒有進入CLOSED狀態(tài),反而進入了一個等待2MSL的TIME-WAIT主要作用有兩個:

第一,確保主機A最后發(fā)送的確認能夠到達主機B。如果處于LAST-ACK狀態(tài)的主機B一直收不到來自主機A的確認,它會重傳斷開連接請求,然后主機A就可以有足夠的時間去再次發(fā)送確認。但是這也只能盡大力量來確保能夠正常斷開,如果主機A的確認總是在網(wǎng)絡中滯留失效,從而超過了2MSL,最后也無法正常斷開;

第二,如果主機A在發(fā)送了確認之后立即進入CLOSED狀態(tài)。假設之后主機A再次向主機B發(fā)送一條連接請求,而這條連接請求比之前的確認報文更早地到達主機B,則會使得主機B以為這條連接請求是在舊的連接中A發(fā)出的報文,并不看成是一條新的連接請求了,即使得這個連接請求失效了,增加2MSL的時間可以使得這個失效的連接請求報文作廢,這樣才不影響下次新的連接請求中出現(xiàn)失效的連接請求。

為什么斷開連接請求報文只有三個,而不是四個因為在TCP連接過程中,確認的發(fā)送有一個延時(即經(jīng)受延時的確認),一端在發(fā)送確認的時候?qū)⒌却欢螘r間,如果自己在這段事件內(nèi)也有數(shù)據(jù)要發(fā)送,就跟確認一起發(fā)送,如果沒有,則確認單獨發(fā)送。而我們的抓包實驗中,由服務器端先斷開連接,之后客戶端在確認的延遲時間內(nèi),也有請求斷開連接需要發(fā)送,于是就與上次確認一起發(fā)送,因此就只有三個數(shù)據(jù)報了。

5 Wireshark分析tcpdump抓包結果

1、啟動8080端口,tcpdump抓包命令如下:

tcpdump-ilo0-s0-n-Shost10.37.63.3andport8080-w./Desktop/tcpdump_10.37.63.3_8080_20160525.cap

# 然后再執(zhí)行curl

curlhttp://10.37.63.3:8080/atbg/doc

2、使用Wireshark打開tcpdump_10.37.63.3_8080_20160525.cap文件

tcpdump抓包分析詳解

No. 1-4 行:TCP三次握手環(huán)節(jié);

No. 5-8 行:TCP傳輸數(shù)據(jù)環(huán)節(jié);

No. 9-13 行:TCP四次揮手環(huán)節(jié);

3、順便說一個查看 http 請求和響應的方法:

tcpdump抓包分析詳解

彈窗如下圖所示,上面紅色部分為請求信息,下面藍色部分為響應信息:

tcpdump抓包分析詳解

以上是Wireshark分析tcpdump的簡單使用,Wireshark更強大的是過濾器工具,大家可以自行去多研究學習Wireshark,用起來還是比較爽的。

推薦幾個關于Wireshark的文章:

Wireshark基本介紹和學習TCP三次握手

一站式學習Wireshark

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享名稱:tcpdump抓包分析詳解-創(chuàng)新互聯(lián)
本文來源:http://jinyejixie.com/article38/ccsppp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設、云服務器、做網(wǎng)站外貿(mào)網(wǎng)站建設、網(wǎng)站設計、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設
慈溪市| 岳阳市| 连山| 玉林市| 兴隆县| 高安市| 军事| 仁怀市| 常州市| 青州市| 兰州市| 兰州市| 贵州省| 浏阳市| 清丰县| 新建县| 牡丹江市| 夹江县| 炉霍县| 清丰县| 常州市| 洱源县| 临邑县| 化隆| 隆昌县| 涡阳县| 平罗县| 萍乡市| 瑞丽市| 绥中县| 泸溪县| 巴林右旗| 上蔡县| 高碑店市| 灵山县| 科技| 卢湾区| 安庆市| 平原县| 滨州市| 吉安县|