簡要記錄下tcpdump用法
監控某個ip上的某個端口的流量
tcpdump ?-i enp0s25 ?tcp port 5432 -nn -S
各個參數作用
-i enp0s25?指定抓包的網卡是enp0s25
-nn? 顯示ip地址和數字端口 ,如果只 -n 則顯示ip,但是端口為services文件中的服務名
如果一個n也不指定,則顯示域名以及服務名
port 抓取該端口中的信息
-S TCP的seq以及ack顯示絕對值
更詳細的參數信息可以參考
Linux系統 tcpdump 抓包命令使用教程 - 知乎
https://www.cnblogs.com/wongbingming/p/13212306.html
客戶端telnet? 192.186.100.138 命令下,服務器端顯示如下
tcp三步握手SYN=1 seq=3967800135
客戶端處于SYN_SEND狀態
16:38:20.116860 IP 192.168.100.182.7109 > 192.168.100.51.5432: Flags [S], seq 3967800135, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0SYN=1 ACK=1 seq=504220911(隨機值) ack=3967800136(上一步seq+1), 服務器端處于SYN_RCVD,這步完成后客戶端的狀態為ESTABLISHED
16:38:20.116915 IP 192.168.100.51.5432 > 192.168.100.182.7109: Flags [S.], seq 504220911, ack 3967800136, win 65535, options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0ACK=1 ack=504220912(上一步的seq+1),完成這步后服務器端狀態也變成了ESTABLISHED16:38:20.117243 IP 192.168.100.182.7109 > 192.168.100.51.5432: Flags [.], ack 504220912, win 8212, length 0tcp結束鏈接,由于tcp屬于全雙工通訊,所以關閉實際上分為4步驟,此例子由于使用telnet鏈接的5432端口的pg服務,因此服務器端超時后,服務器端主動關閉鏈接,因此前兩步為關閉服務器
服務器發起斷開鏈接FIN=1 ACK=1 seq=504220912 完成后服務器狀態為FIN_WAIT_1,客戶端狀態為CLOSE_WAIT
16:39:20.118195 IP 192.168.100.51.5432 > 192.168.100.182.7109: Flags [F.], seq 504220912, ack 3967800136, win 1024, length 0客戶端回復ACK=1 ack=504220913(上一步seq+1),完成后服務器的狀態為FIN_WAIT_2, 客戶端狀態為LAST_ACK
16:39:20.118419 IP 192.168.100.182.7109 > 192.168.100.51.5432: Flags [.], ack 504220913, win 8212, length 0
此時服務器端已經不能再發送應用數據給客戶端了,但是客戶端是可以發送數據給服務器端的,因此現在的狀態處于半雙工狀態后兩步是關閉客戶端客戶端發送斷開鏈接請求FIN=1 ACK=1 ack=504220913(上一步的ack) seq=3967800136(隨機),此時服務器端狀態為TIME_WAIT
16:39:20.118551 IP 192.168.100.182.7109 > 192.168.100.51.5432: Flags [F.], seq 3967800136, ack 504220913, win 8212, length 0服務器端回復請求ACK=1 ack=3967800137 (上一步seq+1), 此時客戶端的狀態為CLOSED,服務器的狀態TIME_WAIT等待2MSL時間后變成CLOSED
16:39:20.118575 IP 192.168.100.51.5432 > 192.168.100.182.7109: Flags [.], ack 3967800137, win 1024, length 0
借用網絡上的一個圖
當然這個圖是客戶端先發起關閉鏈接請求,跟實際測試例子不同,因此僅僅為了參考使用。