概述:
平常使用的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/)