tcpdump抓包mysql建聯驗證TCP的三次握手

TCP的三次握手、4次揮手是老生常談的東西,那麼具體的包數據傳輸過程你是否真正的試過呢?咱們今天就經過具體的mysql建聯實踐來看看是怎麼傳遞數據包的。html

網絡嗅探器和tcpdump

在共享式的網絡中,數據的傳輸是怎麼完成的呢?又是怎麼找到對應的機器來進行數據交互的呢?mysql

通常來講,在網絡中,信息報會廣播到網絡中全部主機的網絡接口,主機的網絡設備經過IP和MAC地址等信息判斷該信息包是否應該接收,經過拋棄與本身無關的數據包,這樣就達到互聯網中咱們與指定機器通訊的目的。linux

可是在衆多的黑客技術中,嗅探器(sniffer)是一種很常見的技術,它使主機的網絡設備接收全部到達的信息包,從而達到網絡監聽的目的。在共享式的局域網中,嗅探器能夠對該網絡中的流量盡收眼底。除了黑客,網絡管理員也應該學會使用嗅探器來隨時掌握網絡的使用狀況,在網絡性能急劇降低時,找到網絡阻塞和問題的根源。git

具體的嗅探器工具在Windows平臺上有netxraysniffer pro軟件,在Linux平臺上有tcpdump。咱們今天要介紹的就是tcpdump sniffer嗅探器工具。github

安裝tcpdump

tcpdumpLinux平臺一個以命令行方式運行的網絡流量檢測工具,它能截獲網卡上收到的數據包,並經過必定的配置來完成對內容的解析和分析。sql

檢測系統中是否已經安裝了tcpdump的方法很是簡單,就是直接執行:shell

$ tcpdump
# 若是沒有安裝
tcpdump: no suitable device found
# 若是已經安裝,則當有網絡請求時會出現許多的這種網絡解析數據
21:44:14.109590 IP client.host > server.host: Flags [P.], seq 1031520:1031984, ack 1393, win 95, options [nop,nop,TS val 2242702304 ecr 3381086780], length 464

最新的tcpdump源碼下載地址:http://www.tcpdump.org (tcpdump官網)數據庫

tcpdump的運行須要 pcap的支持,請同時下載這兩個內容並安裝,通常最新版本的二者是互相兼容的。

筆者本次下載的是最新的版本,直接在命令行裏使用wget下載便可:express

# 下載tcpdump文件
wget www.tcpdump.org/release/tcpdump-4.9.2.tar.gz

# 下載pcap文件
wget www.tcpdump.org/release/libpcap-1.9.0.tar.gz

# 安裝libpcap,make install的時候可能須要root權限
tar -zxvf libpcap-1.9.0.tar.gz
cd libpcap-1.9.0.tar.gz
./configure
make
make install

# 安裝tcpdump的過程
tar -zxvf tcpdump-4.9.2
cd tcpdump-4.9.2
./configure
make
make install

安裝完成後跟上面同樣輸入tcpdump判斷是否成功安裝了:網絡

$ tcpdump

tcpdump的命令行參數和過濾規則

tcpdump是個命令行方式的網絡嗅探器,若是不使用任何參數,會持續捕獲全部的網絡請求內容,沒法有效分析,能夠針對本身的需求使用合適的參數。

# 查看全部的參數內容
$ tcpdump --help
tcpdump version 4.9.2
libpcap version 1.9.0-PRE-GIT (with TPACKET_V2)
OpenSSL 1.0.0-fips 29 Mar 2010
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
                [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
                [ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
                [ -Q in|out|inout ]
                [ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
                [ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
                [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
                [ -Z user ] [ expression ]

經常使用的參數含義:

  • -a 將網絡地址轉變爲易識別的主機名(默認)
  • -n 不將網絡地址轉變爲易識別的主機名,即直接顯示IP地址,能夠省略DNS查詢
  • -nn 不進行端口名稱的轉換
  • -t 不顯示時間戳
  • -tttt 輸出由date處理後的時間戳
  • -c 捕獲指定數量的數據包後退出
  • -e 顯示數據鏈路層的頭部信息,即MAC地址信息:00:8c:fa:f3:e3:04 (oui Unknown) > 00:e0:ec:3e:8d:39 (oui Unknown), ethertype IPv4 (0x0800), length 71
  • -f 將目標的internet地址以IP形式展現
  • -i 監聽指定的網絡接口
  • -S 將tcp的序號以絕對值形式輸出,而不是相對值
  • -r 從指定文檔中讀取數據包
  • -w 不分析和輸出,將截獲的數據包寫入指定文檔
  • -T 將截獲的數據包按指定類型報文解析,如:cnfp/rpc/rtp/snmp/vat/wb
  • -F 從指定文檔讀取過濾規則,忽略命令行的其餘參數指定的過濾規則
  • -v 輸出較詳細的信息,如IP包的TTL和協議類型
  • -vv 輸出詳細的信息
  • -l 將標準輸出轉變爲行緩衝方式
  • -d 將上次捕獲的信息包以彙編格式顯示
  • -dd 將上次捕獲的信息包以C語言格式顯示
  • -ddd 將上次捕獲的信息包以十進制格式顯示

除了參數以外,更重要的是過濾表達式,包含三個類型關鍵字:

  • host: 10.10.13.15 監聽的主機
  • net: 10.10.0.0 監聽的網絡
  • port: 21 監聽的端口

四個截獲方向關鍵字:

  • dst: 10.10.13.15 目標主機
  • src: 10.10.0.0 源網絡
  • dst and src
  • dst or src(缺省值)

多個協議關鍵字:ether/fddi/tr/ip/ip6/rarp/decnet/tcp/udp

還支持組合表達式:not/!/and/&&/or/||

舉幾個經常使用的例子:

# 只捕獲指定IP的數據包
tcpdump host 10.10.13.15
# 捕獲兩個IP的數據包
tcpdump host 1010.13.15 and \(10.10.13.47\)
# 捕獲指定端口和協議的數據包
tcpdump tcp port 21 and host 10.10.13.15

實例測試

這個實例是A機器 (client)向B機器 (server)發起 mysql實例鏈接,並馬上 exit的場景。

步驟:

  1. A機器啓動嗅探器: tcpdump host 10.92.143.15 -tttt -S -nn
  2. A機器執行mysql -u root -h 10.92.143.15 -p
  3. A機器數據庫鏈接成功後,馬上exit;退出mysql實例鏈接

報文:

# 三次握手,其中S表明Syn,.表明Ack,S.表明Syn, Ack
2018-08-19 22:52:42.768100 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [S], seq 864854527, win 14600, options [mss 1460,sackOK,TS val 2246810963 ecr 0,nop,wscale 8], length 0
2018-08-19 22:52:42.810055 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [S.], seq 4288771247, ack 864854528, win 14480, options [mss 1460,sackOK,TS val 2062159250 ecr 2246810963,nop,wscale 8], length 0
2018-08-19 22:52:42.810065 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [.], ack 4288771248, win 58, options [nop,nop,TS val 2246811005 ecr 2062159250], length 0
# 登陸校驗,傳輸用戶名和密碼驗證階段,其中P表明Push,傳輸數據須要。這裏包含登陸驗證和版本信息等元數據的交換
2018-08-19 22:52:42.852102 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [P.], seq 4288771248:4288771308, ack 864854528, win 57, options [nop,nop,TS val 2062159292 ecr 2246811005], length 60
2018-08-19 22:52:42.852118 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [.], ack 4288771308, win 58, options [nop,nop,TS val 2246811047 ecr 2062159292], length 0
2018-08-19 22:52:42.853251 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [P.], seq 864854528:864854590, ack 4288771308, win 58, options [nop,nop,TS val 2246811048 ecr 2062159292], length 62
2018-08-19 22:52:42.895198 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [.], ack 864854590, win 57, options [nop,nop,TS val 2062159335 ecr 2246811048], length 0
2018-08-19 22:52:42.895256 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [P.], seq 4288771308:4288771319, ack 864854590, win 57, options [nop,nop,TS val 2062159335 ecr 2246811048], length 11
2018-08-19 22:52:42.895264 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [.], ack 4288771319, win 58, options [nop,nop,TS val 2246811090 ecr 2062159335], length 0
2018-08-19 22:52:42.895312 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [P.], seq 864854590:864854627, ack 4288771319, win 58, options [nop,nop,TS val 2246811090 ecr 2062159335], length 37
2018-08-19 22:52:42.937268 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [.], ack 864854627, win 57, options [nop,nop,TS val 2062159377 ecr 2246811090], length 0
2018-08-19 22:52:42.937405 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [P.], seq 4288771319:4288771409, ack 864854627, win 57, options [nop,nop,TS val 2062159377 ecr 2246811090], length 90
2018-08-19 22:52:42.937414 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [.], ack 4288771409, win 58, options [nop,nop,TS val 2246811132 ecr 2062159377], length 0
# 發送exit;正好5個字符
2018-08-19 22:52:44.366633 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [P.], seq 864854627:864854632, ack 4288771409, win 58, options [nop,nop,TS val 2246812561 ecr 2062159377], length 5
# 四次揮手,其中F表明FIN,完成數據發送
2018-08-19 22:52:44.366649 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [F.], seq 864854632, ack 4288771409, win 58, options [nop,nop,TS val 2246812561 ecr 2062159377], length 0
## 這個是exit的答覆
2018-08-19 22:52:44.408575 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [.], ack 864854632, win 57, options [nop,nop,TS val 2062160848 ecr 2246812561], length 0
2018-08-19 22:52:44.408618 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [.], ack 864854633, win 57, options [nop,nop,TS val 2062160848 ecr 2246812561], length 0
2018-08-19 22:52:44.408652 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [F.], seq 4288771409, ack 864854633, win 57, options [nop,nop,TS val 2062160848 ecr 2246812561], length 0
2018-08-19 22:52:44.408657 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [.], ack 4288771410, win 58, options [nop,nop,TS val 2246812603 ecr 2062160848], length 0
具體的 mysql通訊內容能夠查看這篇文章: https://jin-yang.github.io/po...

參考資料

  1. Tcpdump的安裝和使用:https://blog.csdn.net/s_k_yli...
  2. Tcpdump(linux)下載、安裝、使用說明:http://www.voidcn.com/article...
  3. 深度解析mysql登陸原理:https://www.cnblogs.com/cchus...
  4. TCP/IP詳解 卷1:協議 第18章 TCP鏈接的創建和終止
  5. Mysql通信協議:https://jin-yang.github.io/po...
相關文章
相關標籤/搜索