TCP
的三次握手、4次揮手是老生常談的東西,那麼具體的包數據傳輸過程你是否真正的試過呢?咱們今天就經過具體的mysql
建聯實踐來看看是怎麼傳遞數據包的。html
tcpdump
在共享式的網絡中,數據的傳輸是怎麼完成的呢?又是怎麼找到對應的機器來進行數據交互的呢?mysql
通常來講,在網絡中,信息報會廣播到網絡中全部主機的網絡接口,主機的網絡設備經過IP和MAC地址等信息判斷該信息包是否應該接收,經過拋棄與本身無關的數據包,這樣就達到互聯網中咱們與指定機器通訊的目的。linux
可是在衆多的黑客技術中,嗅探器(sniffer)
是一種很常見的技術,它使主機的網絡設備接收全部到達的信息包,從而達到網絡監聽的目的。在共享式的局域網中,嗅探器能夠對該網絡中的流量盡收眼底。除了黑客,網絡管理員也應該學會使用嗅探器來隨時掌握網絡的使用狀況,在網絡性能急劇降低時,找到網絡阻塞和問題的根源。git
具體的嗅探器工具在Windows
平臺上有netxray
和sniffer pro
軟件,在Linux
平臺上有tcpdump
。咱們今天要介紹的就是tcpdump sniffer
嗅探器工具。github
tcpdump
tcpdump
是Linux
平臺一個以命令行方式運行的網絡流量檢測工具,它能截獲網卡上收到的數據包,並經過必定的配置來完成對內容的解析和分析。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
的場景。
步驟:
tcpdump host 10.92.143.15 -tttt -S -nn
mysql -u root -h 10.92.143.15 -p
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...