tcpdump抓取HTTP包


tcpdump抓取HTTP包

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

0x4745為“GET”前兩個字母“GE”
0x4854為“HTTP”前兩個字母“HT”

通常情況下:一個正常的TCP連接,都會有三個階段

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

TCP三次握手(創建OPEN)

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

數據通訊

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

TCP四次握手

  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_RECEIVED

    • 服務器接收創建連接的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_WAIT1

    • 主動關閉的一方,在發出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一下即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM