linux下的抓包工具


 

概述:

平常使用的fiddler或Charles都是基於客戶端抓包,請求/流量到了服務器就無法定位了;

 

常用抓包兩種:

httpry:

1.httpry就是:HTTP包嗅探工具。httpry捕獲HTTP數據包,並且將HTTP協議層的數據內容以可讀形式列舉出來;

場景:

   1.查看用戶在你的網絡上在線瀏覽的內容
      2.檢查是否正確的服務器配置
      3.在HTTP中使用模式的研究
      4. 關注危險下載的文件
      5.驗證HTTP策略在網絡上的實施
      6.提取的HTTP統計輸出保存在捕捉文件

 

 

tcpdump:

1.tcpdump是普遍用於實時數據包轉儲,需要設定一些過濾規則,只捕獲HTTP流量,即便如此,它的輸出內容很難理解,需要一定的協議基礎知識

2.tcpdump是linux系統自帶的抓包工具,主要通過命令行的方式,比較適合在線上服務器進行抓包操作

場景:

     1,服務器平時流量很少,突然把帶寬跑滿了,查看什么數據把帶寬跑忙

     2,訪問服務器不成功,在服務器抓包,看是否有該IP的訪問結果,多用於測試環境。

tcpdump參數:

-a    將網絡地址和廣播地址轉變成名字;
-d    將匹配信息包的代碼以人們能夠理解的匯編格式給出;
-dd    將匹配信息包的代碼以c語言程序段的格式給出;
-ddd   將匹配信息包的代碼以十進制的形式給出;
-e    在輸出行打印出數據鏈路層的頭部信息,包括源mac和目的mac,以及網絡層的協議;
-f    將外部的Internet地址以數字的形式打印出來;
-l    使標准輸出變為緩沖行形式;
-n    指定將每個監聽到數據包中的域名轉換成IP地址后顯示,不把網絡地址轉換成名字;
-nn:   指定將每個監聽到的數據包中的域名轉換成IP、端口從應用名稱轉換成端口號后顯示
-t    在輸出的每一行不打印時間戳;
-v    輸出一個稍微詳細的信息,例如在ip包中可以包括ttl和服務類型的信息;
-vv    輸出詳細的報文信息;
-c    在收到指定的包的數目后,tcpdump就會停止;
-F    從指定的文件中讀取表達式,忽略其它的表達式;
-i    指定監聽的網絡接口;
-p:    將網卡設置為非混雜模式,不能與host或broadcast一起使用
-r    從指定的文件中讀取包(這些包一般通過-w選項產生);
-w    直接將包寫入文件中,並不分析和打印出來;
-s snaplen snaplen表示從一個包中截取的字節數。0表示包不截斷,抓完整的數據包。默認的話 tcpdump 只顯示部分數據包,默認68字節。
-T    將監聽到的包直接解釋為指定的類型的報文,常見的類型有rpc (遠程過程調用)和snmp(簡單網絡管理協議;)
-X      告訴tcpdump命令,需要把協議頭和包內容都原原本本的顯示出來(tcpdump會以16進制和ASCII的形式顯示),這在進行協議分析時是絕對的利器。

tcpdump常用命令:

tcpdump -nS........................................監聽所有端口,直接顯示 ip 地址

tcpdump -i 網卡 ..................................指定網卡

tcpdump -nn .......................................數字的方式顯示IP和端口。一個n是ip

tcpdump -c x  ......................................抓包數量,x為數字

tcpdump -nnvvS .................................顯示更詳細的數據報文,包括 tos, ttl, checksum 等。

tcpdump -nnvvXS ...............................顯示數據報的全部數據信息

tcpdump icmp .....................................過濾某個協議的數據,支持 tcp, udp 和 icmp

tcpdump net 192.168.0.0/24 ..............指定網段

tcpdump host 1.2.3.4 .........................指定某個主機

tcpdump src 1.2.3.4 ..........................src, dst: 過濾源地址和目的地址(目標地址是服務端地址)

tcpdump portrange 5000-8000 .............................................................抓取指定范圍的端口 

sudo tcpdump -nnvS src 192.168.10.32 and dst port 8000 ..................捕獲客戶端ip192.168.10.32 和目標端口是8000的數據包

tcpdump less 32 或 tcpdump > 32 ...........................................大於32字節(通過報文大小過濾請求,數據報大小,單位是字節:)

tcpdump greater 128 或 tcpdump <= 128  ..............................小於128字節(通過報文大小過濾請求,數據報大小,單位是字節:)

文件相關:

sudo tcpdump -nnvS src 192.168.10.32 and dst port 8000  -w test.pcap ..................把客戶端ip192.168.10.32,目標端口是8000的數據寫入test文件(文件可通過tshark或wireshark打開)

tcpdump -w test.pcap port 8080 .............................把8080的請求寫入test文件(文件可通過tshark或wireshark打開)

cpdump -s0 -w test.pcap.................................... 抓包時防止包截斷,s0的0為數字0,抓一個完整的包必須加s0。

tcpdump -r test.pcap ......................................讀取數據包

tcpdump -nXr  test.pcap host 192.168.10.32 ..................讀取test文件中包含主機為192.168.10.32的數據到屏幕

備注:

 -w抓的包實際是包的內容,非簡單的流向。如果訪問一張圖片,用-w可以把這張圖片抓出來。只看流向的話,可以使用重定向。

在tcpdump上抓的包,可以通過tshark或wireshark打開,進行分析;

 

 

tshark參數: 

-i 設置抓包的網絡接口,不設置則默認為第一個非自環接口。
-D 列出當前存在的網絡接口。在不了解OS所控制的網絡設備時,一般先用“tshark -D”查看網絡接口的編號以供-i參數使用。
-f 設定抓包過濾表達式(capture filter expression)。抓包過濾表達式的寫法雷同於tcpdump,可參考tcpdump man page的有關部分。
-s 設置每個抓包的大小,默認為65535,多於這個大小的數據將不會被程序記入內存、寫入文件。(這個參數相當於tcpdump的-s,tcpdump默認抓包的大小僅為68)
-c 抓指定個包后終止
-a 終止條件 duration:NUM - stop after NUM seconds
          filesize:NUM - stop this file after NUM KB
          files:NUM - stop after NUM files
-w 設置raw數據的輸出文件。這個參數不設置,tshark將會把解碼結果輸出到stdout。“-w-”表示把raw輸出到stdout。如果要把解碼結果輸出到文件,使用重定向“>”而不要-w參數。 
-r 設置tshark分析的輸入文件。tshark既可以抓取分析即時的網絡流量,又可以分析dump在文件中的數據。-r不能是命名管道和標准輸入。
-R 設置讀取過濾表達式(read filter expression)。不符合此表達式的流量同樣不會被寫入文件。注意,讀取(顯示)過濾表達式的語法和底層相關的抓包過濾表達式語法不相同,它的語法表達要豐富得多,請參考http://www.ethereal.com/docs/dfref/和http://www.ethereal.com/docs/man-pages/ethereal-filter.4.html。類似於抓包過濾表達式,在命令行使用時最好將它們quote起來。-Y (顯示)過濾。
-T 設置解碼結果輸出的格式,包括fileds,text,ps,psml和pdml,默認為text。
-E 配合-T使用,制定輸出格式,分隔符等。
-t 設置解碼結果的時間格式。“ad”表示帶日期的絕對時間,“a”表示不帶日期的絕對時間,“r”表示從第一個包到現在的相對時間,“d”表示兩個相鄰包之間的增量時間(delta)。
-q 設置安靜的stdout輸出(例如做統計時)
-z 設置統計參數。
-p 設置網絡接口以非混合模式工作,即只關心和本機有關的流量。
-B 設置內核緩沖區大小,僅對windows有效。
-y 設置抓包的數據鏈路層協議,不設置則默認為-L找到的第一個協議,局域網一般是EN10MB等。
-L 列出本機支持的數據鏈路層協議,供-y參數使用。
-n 禁止所有地址名字解析(默認為允許所有)。
-N 啟用某一層的地址名字解析。“m”代表MAC層,“n”代表網絡層,“t”代表傳輸層,“C”代表當前異步DNS查找。如果-n和-N參數同時存在,-n將被忽略。如果-n和-N參數都不寫,則默認打開所有地址名字解析。
-d 將指定的數據按有關協議解包輸出。如要將tcp 8888端口的流量按http解包,應該寫為“-d tcp.port==8888,http”。注意解包協議之間不能留空格。
-F 設置輸出raw數據的格式,默認為libpcap。“tshark -F”會列出所有支持的raw格式。
-V 設置將解碼結果的細節輸出,否則解碼結果僅顯示一個packet一行的summary。
-x 設置在解碼輸出結果中,每個packet后面以HEX dump的方式顯示具體數據。
-S 在向raw文件輸出的同時,將解碼結果打印到控制台。
-l 在處理每個包時即時刷新輸出。
-X 擴展項。
-h 顯示命令行幫助。
-v 顯示tshark的版本信息。
-o 重載選項。
-e 控制打印字段

 

 

 tshark常用命令:

從文件讀取數據包

tshark  -r test.pcap ......................................只顯示列表(讀取文件所有數據)

tshark  -r test.pcap -Y "http" .....................只顯示列表-過濾http數據包

tshark -r test.pcap -Y "http && ip.src == 192.168.10.32"  -V -T text .................顯示詳情數據 (讀取文件並過濾http和源地址192.168.10.32的數據包)

tshark -r test.pcap -Y "http.request.method==POST"  -V -T text .....................顯示詳情數據(過濾后只顯示post方法的請求)

 

寫入文件

tshark -i  eth0 -f "tcp port 8080" -c 10 >123456.txt .................只能查看記錄(如果想查看詳情需要通過tcpdump抓包)

 

------------抓包--------------

抓mysql

tshark -n -i eth0 -R 'mysql.query' -T fields -e "ip.src" -e "mysql.query" .............實時抓取mysql查詢

tshark -n -i eth0 -R 'mysql matches "select|SELECT|INSERT|DELETE|UPDATE"' -T fields -e "frame.time" -e "ip.src" -e "mysql.query" ..................實時抓取-指定類型的MySQL查詢(需要區分大小寫

tshark -s 65536 -n -i eth0 -f 'tcp dst port 3306' -R 'mysql  matches  "SELECT|Select|select|UPDATE|update|Update|insert|INSERT|Insert"' -T fields -e ip.addr -e tcp.port -e frame.time -e mysql.user -e mysql.query .............監聽查詢、更新、插入語句(需要區分大小寫)

抓tcp

tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri" ......................實時查看http請求列表

tshark -i  eth0 -f "tcp port 8080" -c 10  .............................監聽eth0網卡8080的10個流量

tshark -i eth0 -f "tcp port 8000" -R "http and http.request.uri" ..............監聽8000端口+http+url

tshark -i  eth0  -R "http and ip.src==192.168.10.32" .....................監聽eth0網卡中 http請求和客戶端ip為192.168.10.32

http.host表示主機名,ip.dst表示服務端ip,http.request.method表示http請求方法,http.request.ur表示請求地址,ip.src表示客戶端ip ,tcp.dstport表示端口,frame.time表示時間

tshark -i eth0 -R "http and ip.src==192.168.10.32" -T fields  -e frame.time -e http.host -e ip.dst -e http.request.method -e http.request.uri -e ip.src -e tcp.dstport  ..................監聽http+192.168.10.32

 

 

補充:ip段講解

http://www.webkaka.com/tutorial/zhanzhang/2021/031093/ .....................ip網絡段講解(ip換算二進制)

IP地址格式采用“斜線記法”,即:IP地址/網絡前綴。

例如 192.168.1.0/24 表示32位的二進制地址中(任何IP的二進制地址都是32位),前24位為網絡前綴,后8位代表主機號。

192.168.1.0/24 代表的IP段就是 192.168.1.1 ~ 192.168.1.254

例如 192.168.0.0/16 表示32位的二進制地址中,前16位為網絡前綴,后16位代表主機號

192.168.0.0/16 代表的IP段就是 192.168.0.1 ~ 192.168.255.254

 

 

 

相關連接:

https://linux.cn/article-4148-1.html ......................................httpry安裝與使用

https://www.jb51.net/LINUXjishu/257707.html ......................httpry使用

https://blog.51cto.com/u_11060853/2113574 .....................tcpdump使用命令

https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html .................tcpdump使用命令

https://mp.weixin.qq.com/s?__biz=MzA3ODA3MjAxNg==&mid=2247486396&idx=1&sn=5393f661ea451a558645fc0fe6932911  ................tcpdump各參數

https://ywnz.com/linux/tshark/  .............................wireshark提供Linux命令行工具tshark

https://www.cnblogs.com/hiyong/p/14288239.html .......................tshark抓包及tcpdump抓包到tshark分析

https://www.cnblogs.com/liun1994/p/6142505.html ...........tshark命令

https://www.cnblogs.com/alog9/p/11805716.html ..............tshark安裝方法(https://www.jincon.com/archives/281/)

 


免責聲明!

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



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