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

 

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

 
一、 tcpdump使用

1、首先看下MAN手冊

TCPDUMP(8)

NAME
tcpdump - dump traffic on a network

SYNOPSIS
tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ]
[ -C file_size ] [ -F file ]
[ -i interface ] [ -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.104 or 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 <mss1460,nop,nop,sackOK>
21:07:17.790317 IP 192.168.1.90.6000 > 192.168.1.104.2511: S 3675079922:3675079922(0) ack 3359422807 win5840 <mss 1460,nop,nop,sackOK>
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)來更改默認值)

<mss1460,nop,nop,sackOK> 對應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 <mss 1460,nop,nop,sackOK>
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 <mss 1460,nop,nop,sackOK>
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個字節
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章