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...