❶ linuxtcpmp抓取HTTP包的詳細解釋
tcpmp
tcpmp是linux系統自帶的抓包工具,主要通過命令行的方式,比較適合在線上伺服器進行抓包操作,如果是windows或者ubuntu完全可 以選擇一些圖形化的工具,ubuntu比較推薦用wireshark,安裝方式很簡單sudo apt一下即可。
命令行格式:
tcpmp [ -adeflnNOpqStvx ] [ -c 數量 ] [ -F 文件名 ][ -i 網路介面 ] [ -r 文件名] [ -s snaplen ][ -T 類型 ] [ -w 文件名 ] [表達式 ]
常用的參數:
-l 使標准輸出變為緩沖行形式;
-n 不把網路地址轉換成名字;
-c 在收到指定的包的數目後,tcpmp就會停止;
-i 指定監聽的網路介面;(如果沒有指定可能在默認網卡上監聽,需要指定綁定了特定IP的網卡)
-w 直接將包寫入文件中,並不分析和列印出來;
-s 指定記錄package的大小,常見 -s 0 ,代表最大值65535,一半linux傳輸最小單元MTU為1500,足夠了
-X 直接輸出package data數據,默認不設置,只能通過-w指定文件進行輸出
常用表達式:
關於類型的關鍵字,主要包括host,net,port
傳輸方向的關鍵字,主要包括src , dst ,dst or src, dst and src
協議的關鍵字,主要包括fddi,ip ,arp,rarp,tcp,udp等類型
邏輯運算,取非運算是 'not ' '! ', 與運算是'and','&&'或運算 是'or' ,'||'
其他重要的關鍵字如下:gateway, broadcast,less,greater
實際例子:
1. http數據包抓取 (直接在終端輸出package data)
tcpmp tcp port 80 -n -X -s 0 指定80埠進行輸出
2. 抓取http包數據指定文件進行輸出package
tcpmp tcp port 80 -n -s 0 -w /tmp/tcp.cap
對應的/tmp/tcp.cap基本靠肉眼已經能看一下信息,比如http Header , content信息等
3. 結合管道流
tcpmp tcp port 80 -n -s 0 -X -l | grep xxxx
這樣可以實時對數據包進行字元串匹配過濾
4. mod_proxy反向代理抓包
線上伺服器apache+jetty,通過apache mod_proxy進行一個反向代理,80 apache埠, 7001 jetty埠
apache埠數據抓包:tcpmp tcp port 80 -n -s 0 -X -i eth0 注意:指定eth0網路介面
jetty埠數據抓包:tcpmp tcp port 7001 -n -s 0 -X -i lo 注意:指定Loopback網路介面
5. 只監控特定的ip主機
tcpmp tcp host 10.16.2.85 and port 2100 -s 0 -X
需要使用tcp表達式的組合,這里是host指示只監聽該ip
小技巧:
1. 可結合tcpmp(命令) + wireshark(圖形化)
操作:
在伺服器上進行tcpmp -w /tmp/tcp.cap 指定輸出外部文件
scp /tmp/tcp.cap 拷貝文件到你本地
wireshark & 啟動wireshark
通過File -> Open 打開拷貝下來的文件,這樣就可以利用進行數據包分析了
剩下來的事就非常方便了
tcpmp -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)
數據通訊
TCP四次握手(關閉 finish)
詳細的狀態說明(以及linux相關參數調整)
相關說明
其他網路重要參數
net.ipv4.tcp_rmem 參數
默認值: min=4096 default=87380 max=4194304
net.ipv4.tcp_wmem 參數
默認值: min=4096 default=16384 max=4194304