tcpdump抓包

命令行格式:

tcpdump [ -adeflnNOpqStvx ] [ -c 數量 ] [ -F 文件名 ][ -i 網絡接口 ] [ -r 文件名] [ -s snaplen ][ -T 類型 ] [ -w 文件名 ] [表達式 ]

常用的參數:

-l    使標準輸出變爲緩衝行形式;
-n    不把網絡地址轉換成名字;

-c    在收到指定的包的數目後,tcpdump就會停止;
-i    指定監聽的網絡接口;
-w    直接將包寫入文件中,並不分析和打印出來;
-s 指定記錄package的大小,常見 -s 0 ,代表最大值65535,一半linux傳輸最小單元MTU爲1500,足夠了

-X 直接輸出package data數據,默認不設置,只能通過-w指定文件進行輸出

常用表達式:

  1. 關於類型的關鍵字,主要包括host,net,port
  2. 傳輸方向的關鍵字,主要包括src , dst ,dst or src, dst and src
  3. 協議的關鍵字,主要包括fddi,ip ,arp,rarp,tcp,udp等類型
  4. 邏輯運算,取非運算是 'not ' '! ', 與運算是'and','&&';或運算 是'or' ,'||'
  5. 其他重要的關鍵字如下:gateway, broadcast,less,greater

實際例子:

1. http數據包抓取 (直接在終端輸出package data)

tcpdump tcp port 80 -n -X -s 0 指定80端口進行輸出

2. 抓取http包數據指定文件進行輸出package

tcpdump tcp port 80 -n -s 0 -w /tmp/tcp.cap

對應的/tmp/tcp.cap基本靠肉眼已經能看一下信息,比如http Header , content信息等

3. 結合管道流

tcpdump tcp port 80 -n -s 0 -X -l | grep xxxx

這樣可以實時對數據包進行字符串匹配過濾

4. mod_proxy反向代理抓包

線上服務器apache+jetty,通過apache mod_proxy進行一個反向代理,80 apache端口, 7001 jetty端口

apache端口數據抓包: tcpdump tcp port 80 -n -s 0 -X -i eth0   注意:指定eth0網絡接口

jetty端口數據抓包: tcpdump tcp port 7001 -n -s 0 -X -i lo 注意:指定Loopback網絡接口

5. 只監控特定的ip主機

tcpdump tcp host 10.16.2.85 and port 2100 -s 0 -X 

需要使用tcp表達式的組合,這裏是host指示只監聽該ip

小技巧:

 可結合tcpdump(命令) + wireshark(圖形化)

操作: 

  • 在服務器上進行tcpdump -w /tmp/tcp.cap 指定輸出外部文件
  • scp /tmp/tcp.cap 拷貝文件到你本地
  • wireshark &  啓動wireshark
  • 通過 File -> Open  打開拷貝下來的文件,這樣就可以利用進行數據包分析了
  • 剩下來的事就非常方便了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章