tcpdump抓包分析TCP三次握手過程

2021-07-13 11:31:11 字數 4903 閱讀 6023

1、首先看下man手冊

tcpdump(8) 

name

tcpdump - dump traffic on a network

synopsis

tcpdump [ -addefllnnopqrstuuvxx ] [ -c count ]

[ -c file_size ] [ -f file ]

[ -i inte***ce ] [ -m module ] [ -m secret ]

[ -r file ] [ -s snaplen ] [ -t type ] [ -w file ]

[ -w filecount ]

[ -e spi@ipaddr algo:secret,... ]

[ -y datalinktype ] [ -z user ]

[ expression ]

選項:-a 以ascii碼顯示訊息包

-c 指定包個數

-c 配合-w,當寫入檔案時,先檢查檔案大小是否已經超過1m,若超過,生成新檔案,檔名為指定檔名加字尾1。

-d 將匹配資訊包的**以人們能夠理解的彙編格式給出

-dd 將匹配資訊包的**以c語言程式段的格式給出

-ddd 將匹配資訊包的**以十進位制的形式給出。

-d 列出可以抓包的所有網路介面

-e 顯示鏈路層內容

-f 外部的ip以數字方式顯示

-i 指定網路介面

-l 使標準輸出變為緩衝行形式

-n ip,埠用數字方式顯示

-t    在輸出的每一行不列印時間戳;

-v    輸出乙個稍微詳細的資訊,例如在ip包中可以包括ttl和服務型別的資訊;

-vv   輸出詳細的報文資訊;

-c    在收到指定的包的數目後,tcpdump就會停止;

-f    從指定的檔案中讀取表示式,忽略其它的表示式;

-i    指定監聽的網路介面;

-r    從指定的檔案中讀取包(這些包一般通過-w選項產生);

-w   直接將包寫入檔案中,並不分析和列印出來;

-t    將監聽到的包直接解釋為指定的型別的報文,常見的型別有rpc (遠端過程呼叫)和snmp(簡單網路管理協議;)

-x 讓十六進製制顯示包內容

2、過濾

(1)指定介面(-i)

如:tcpdump -i eth0

(2)指定ip位址(host),可以輔加and , or ,!等邏輯符,以及src,dest等表示方向。

如:tcpdump host 192.168.1.23 捕獲192.168.1.23發出或者收到的包

tcpdump -a host 192.168.1.90 and 

192.168.1.104or

192.168.1.105

捕獲192.168.1.23與192.168.1.104或者192.168.1.105之間往來的包

tcpdump host ! 192.168.1.23 捕獲除192.168.1.23以外所有主機的包

tcpdump -a src 192.168.1.90 and dst 192.168.1.104 指定從90發往104的包

(3)指定埠(port)

如:tcpdump port 80 指定捕獲80埠的包

(4)指定協議( 協議包括:ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp and udp)

如:tcpdump tcp 指定捕獲tcp包

(5)其它(gateway, broadcast, less, greater)

如:tcpdump broadcast 所有廣播包

二、三次握手過程分析

用netstat -an | grep listen看一下,當前主機正在監聽的埠,使用另一台機telnet過來,不輸入任何內容,進行抓包。

我們這裡以6000為例

tcpdump port 6000 -c 3 -n

內容如下:

21:07:17.790296 ip 192.168.1.104.2511 > 192.168.1.90.6000: s 3359422806:3359422806(0) win 64240

21:07:17.790317 ip 192.168.1.90.6000 > 192.168.1.104.2511: s 3675079922:3675079922(0) ack 3359422807 win5840

21:07:17.790675 ip 192.168.1.104.2511 > 192.168.1.90.6000: . ack 1 win 64240

我們來對第乙個包進行分析:

21:07:17(時間).

790296(id號)

ip (協議)

192.168.1.104.2511 > 192.168.1.90.6000: (源ip,埠,目的ip,埠)中間》表示方向

s (表示為syn包,即發起連線包 

緊急指標— urg

確認序號有效—ack

接收方應該盡快將這個報文段交給應用層—psh

重建連線—rst

同步序號用來發起乙個連線—syn

發端完成傳送任務—in )

3359422806:3359422806(0) (ip包序號,相對序號為0)

win 64240 (資料視窗大小,告訴對方本機接收視窗大小,windows下預設為64240,可通過setsockopt動態修改,同樣可以通過修改登錄檔項(hkey_local_machine\system\currentcontrolset\services\tcpip\parameters的 tcpwindowsize)來更改預設值)

對應tcp包頭中的選項字段

mss: maxitum segment size 最大分段大小,mss表示tcp傳往另一端的最大塊資料的長度。當乙個連線建立時,連線的雙方都要通告各自的mss。如果一方不接收來自另一方的mss值,則mss就定為預設的536位元組。

以上三個包正好是tcp連線的三次握手過程:

(1) a主機傳送序號為3359422806的syn包到b,同時帶有自身的win和mss大小。

(2) b主機收到後,傳送syn+ack的返回包到a,也帶自身的win和mss大小,3675079922,同時為為上乙個包的應答包3359422807。

(3) a主機返回ack,包序號為1(相對序號,如果需要看絕對序號,可以在tcpdump命令中加-s)

然後我們再來分析一下包的具體內容:

我們在tcpdump命令中加-x選項,後可得到如下內容:

22:07:13.436638 ip 192.168.1.104.2799 > 192.168.1.90.6000: s 3480877812:3480877812(0) win 64240

0x0000: 4500 0030 b195 4000 8006 c51f c0a8 0168

0x0010: c0a8 015a 0aef 1770 cf79 faf4 0000 0000

0x0020: 7002 faf0 174e 0000 0204 05b4 0101 0402

22:07:13.436675 ip 192.168.1.90.6000 > 192.168.1.104.2799: s 4226616929:4226616929(0) ack 3480877813 win 5840

0x0000: 4500 0030 0000 4000 4006 b6b5 c0a8 015a

0x0010: c0a8 0168 1770 0aef fbed 0e61 cf79 faf5

0x0020: 7012 16d0 f10e 0000 0204 05b4 0101 0402

22:07:13.437019 ip 192.168.1.104.2799 > 192.168.1.90.6000: . ack 1 win 64240

0x0000: 4500 0028 b196 4000 8006 c526 c0a8 0168

0x0010: c0a8 015a 0aef 1770 cf79 faf5 fbed 0e62

0x0020: 5010 faf0 39b2 0000

還是一樣,我們對第乙個包進行分析,第乙個包為syn包,應該為乙個空包,即只包括ip頭和tcp頭。

ip包頭

4 - ip版本號 ipv4

5 - ip包頭長度 5個32位元組

00 - tos (000 0000 0)前三個bit優先權,現已忽略;4 bit的tos分別代表:最小時延、最大吞吐量、最高可靠性和最小費用, 均為0表示一般服務;最後1bit未用。

0030 -總長度,48個位元組

b195 -包唯一標識

4000 -標誌字段,和片偏移,用於分片

80 - ttl(128)

06 - 協議 tcp

c51f - mac

c0a8 0168 - src ip,可以inet_ntoa轉換成點號分隔的ip。

c0a8 015a - dst ip

tcp包頭

0aef -源埠,十進位制為2799

1770 -目的埠,十進位制為6000

cf79 faf4 包序號,十進位制為217554863

0000 0000 確認序號,0,未設定ack,確認序號無效

7002 -tcp包頭長度,標誌位。(0111 000000 000010)前4bittcp長度7個32bit,中間6bit保留,後6bit為標誌位(urg, ack,psh, rst, syn, fin),可以看出設定了倒數第二位,syn位。

faf0 - 視窗大小,十進位制為64240

174e - 校驗和,覆蓋了整個的 t c p報文段: t c p首部和t c p資料

0000 - 緊急指標, 只有當urg標誌置1時緊急指標才有效

0204 05b4 0101 0402 - 選項字段,8個位元組

頂0

tcp 快速掌握tcpdump抓包

一說到抓包,好像有點高深莫測,其實在工作中,大部分是應用發生異常時需要抓包,以此來分析原因,linux下一般用tcpdump命令抓包,而使用tcpdump其實常用的引數也就那麼幾個 抓包主要是看資料傳輸是否都走了正確的tcp協議,比如因為網路或者攻擊導致某些包 syn time wait 等特別多,...

tcpdump 抓包與分析

tcpdump 抓包與分析 tcpdump抓的包內容可以用wireshark進行解析,如 tcpdump c1000 w tmp tcpdump.test.cap wireshark是開源軟體windows和linux下都可以執行,我在windows下測試的,用wireshark開啟 tcpdump...

tcpdump抓包分析利器 wireshark

wireshark有mac版和win版,fiddler有win版。下面看下wireshark怎麼用 先抓點包 zjy ubuntu sudo tcpdump iany w dump.pcap tcpdump listening on any,link type linux sll linux coo...