tcpdump抓取HTTP包

tcpdump抓取HTTP包

tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854

0x4745爲「GET」前兩個字母「GE」
0x4854爲「HTTP」前兩個字母「HT」linux

一般狀況下:一個正常的TCP鏈接,都會有三個階段ubuntu

  • 1.TCP三次握手
  • 2.數據傳送
  • 3.TCP四次揮手

TCP三次握手(建立OPEN)windows

  1. 客戶端發起一個和服務建立TCP鏈接的請求SYN
  2. 服務端接受到客戶端的建立請求以後,返回SYN(i)+ACK(j)
  3. 客戶端在接收到服務端的ACK信息校驗成功後(j與j+1),返回一個信息ACK(i+1)
  4. 服務端這時接收到客戶端的ACK信息校驗成功後(i與i+1),再也不返回信息,後面進入數據通信階段

數據通信

客戶端/服務端 read/write數據包服務器

TCP四次握手cookie

  1. 客戶端發起關閉請求,發送一個信息:FIN(M)
  2. 服務端接受到信息後,首先返回ACK(M+1),代表本身已經收到消息。
  3. 服務端在準備好關閉以前,最後發送給客戶端一個 FIN(N)消息,詢問客戶端是否準備好關閉了
  4. 客戶端接受到服務端發送的消息後,返回一個確認信息: ACK(N+1)
  5. 最後,服務端和客戶端在雙方都獲得確認時,各自關閉或者回收對應的TCP鏈接

詳細狀態說明

  1. SYN_SEND網絡

    • 客戶端嘗試鏈接服務端,經過open方法。屬於客戶端的狀態
    • sysctl -w net.ipv4.tcp_syn_retries = 2,做爲客戶端能夠設置SYN包的重試次數,默認5次(大約180s)
  2. SYN_RECEIVEDtcp

    • 服務器接收建立鏈接的SYN請求後,發送ACK數據包以前,上述三次握手中的第二步
    • 服務端端口,通常15個左右正常,若是很大,懷疑SYN_FLOOD攻擊
    • sysctl -w net.ipv4.tcp_max_syn_backlog=4096,設置該狀態的等待隊列數,默認1024,調大後可適當防止syn-flood.
    • sysctl -w net.ipv4.tcp_syncookies=1,打開syscookie,在syn backlog隊列不足的時候,提供一種機制將臨時syn鏈接換出
    • sysctl -w net.ipv4.tcp_synack_retries=2,做爲服務端返回ACK包的重試次數,默認5次(大約180s)
  3. ESTABLISHED工具

    • 客戶端接收到服務端的ACK包後的狀態,服務端再發出ACK在必定時間後即爲這個狀態
    • sysctl -w net.ipv4.tcp_keepalive_time = 1200 ,默認爲7200秒(2小時),系統針對空閒連接會進行心跳檢查,若是超過net.ipv4.tcp_keepalive_probes * net.ipv4.tcp_keepalive_intvl = 默認11分,終止對應的tcp連接,可適當調整心跳檢查頻率
  4. FIN_WAIT1this

    • 主動關閉的一方,在發出FIN請求以後(TCP四次握手第一步)
  5. CLOSE_WAIT命令行

    • 被動關閉的一方,在接收到客戶端的FIN後(TCP四次握手第二步)
  6. FIN_WAIT2

    • 主動關閉的一方,在接收到被動關閉一方的ACK後(TCP握手第三步)
  7. LASK_ACK

    • 被動關閉的一方,在發送ACK後一段時間後(確保客戶端已收到),再發起一個FIN請求。(TCP四次握手第四步)
  8. TIME_WAIT

    • 主動關閉的一方,在收到被動關閉的FIN包後,發送ACK。也就是TCP四次握手的第4步
    • sysctl -w net.ipv4.tcp_tw_recycle = 1 , 打開快速回收TIME_WAIT,Enabling this option is not recommended since this causes problems when working with NAT (Network Address Translation)
    • sysctl -w net.ipv4.tcp_tw_reuse =1, 快速回收並重用TIME_WAIT的連接, 貌 和tw_recycle有衝突,不能重用就回收?
    • net.ipv4.tcp_max_tw_buckets: 處於time_wait狀態的最多連接數,默認爲180000.

備註:

  1. 主動關閉方在接收到被動關閉方的FIN請求後,發送給對方一個ACK後,將本身的狀態由FIN_WAIT2修改成TIME_WAIT,而必須再等2MSL(Maximum Segment Lifetime,MSL是一個數據報在internetwork中能存在的時間)時間以後雙方纔能把狀態 都改成CLOSED以關閉鏈接。目前RHEL裏保持TIME_WAIT狀態的時間爲60秒

  2. keepAlive策略能夠有效的避免進行三次握手和四次關閉的動做

其餘網絡重要參數:

  1. net.ipv4.tcp_rmem 參數

    • 默認 : min=4096 default=87380 max=4194304
  2. net.ipv4.tcp_wmem 參數

    • 默認 : min=4096 default=16384 max=4194304

Tcpdump

tcpdump是linux系統自帶的抓包工具,主要經過命令行的方式,比較適合在線上服務器進行抓包操做,若是是windows或者ubuntu徹底可 以選擇一些圖形化的工具,ubuntu比較推薦用wireshark,安裝方式很簡單sudo apt一下便可。

相關文章
相關標籤/搜索