tcpdump命令个人笔记
Tcpdump
一、命令構成
tcpdump:
tcpdump是一款常用抓包工具,類似于wireshark。
tcpdump的主程序會抓取當前全部網卡的全部數據包,條件允許的情況下,完全可以直接運行tcpdump抓取一個巨大的文件,然后傳輸到電腦上,使用圖形化抓包軟件來查看報文。但是實際操作上,并不可能允許你用tcpdump抓取所有報文。包括不限于:①設備性能瓶頸,很多微小型設備抓取全部報文可能會出錯。②業務流量巨大,核心交換機一秒就能抓取幾百上千個報文。③不方便傳輸數據包,有時候抓包只是想簡單看一眼報文,還得抓取下來再傳輸很麻煩。
此時需要使用到tcpdump參數來過濾,使你只捕捉你想要獲取的數據。
tcpump常用過濾條件:
tcpdump的參數構成較為復雜,大體分為4類:
tcpdump + proto + dir + type + option
這四類參數可以同時使用,不分先后,從而構成詳細的過濾條件。
proto 類過濾器:根據協議進行過濾,可識別的關鍵詞有:
ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso, stp, ipx, or netbeui
如,想抓取icmp的包:tcpdump icmp
想抓取抓ipv4的包:tcpdump ip
type 類過濾器:可識別的關鍵詞有:host, net, port, portrange,這些詞后邊需要再接參數值。
host 可以基于ip地址過濾,參數值為ip地址:tcpdump host 192.168.1.10
net 可以基于網段過濾,參數值為ip網段:tcpdump net 192.168.1.10/24
port 可以基于端口過濾,參數值為ip網段:tcpdump port 7070多個端口同時過濾時使用:tcpdump port 7070 or 800
portrange 如果想要抓取的端口很多可以這樣寫:tcpdump portrange 0-500 or 4000-8000
direction 類過濾器:根據數據流向進行過濾。
可識別的關鍵字有:src, dst
option 可選參數:和過濾無關的附加選項。
提升速度:
-n:不把ip轉化成域名,直接顯示 ip,避免執行 DNS lookups 的過程,速度會快很多
-nn:不把協議和端口號轉化成名字,速度也會快很多。
-N:不打印出host 的域名部分.。比如,,如果設置了此選現,tcpdump 將會打印’nic’ 而不是 ‘nic.ddn.mil’.
讀取數據包(看包):
-r 后接一個以 .pcap 后綴命令的文件名
控制輸出:
-v:產生詳細的輸出. 比如包的TTL,id標識,數據包長度,以及IP包的一些選項。同時它還會打開一些附加的包完整性檢測,比如對IP或ICMP包頭部的校驗和。
-vv:產生比-v更詳細的輸出. 比如NFS回應包中的附加域將會被打印, SMB數據包也會被完全解碼。(摘自網絡,目前我還未使用過)
-vvv:產生比-vv更詳細的輸出。比如 telent 時所使用的SB, SE 選項將會被打印, 如果telnet同時使用的是圖形界面,其相應的圖形選項將會以16進制的方式打印出來(摘自網絡,目前我還未使用過)
控制時間的顯示:
-t:在每行的輸出中不輸出時間
-tt:在每行的輸出中會輸出時間戳
-ttt:輸出每兩行打印的時間間隔(以毫秒為單位)
-tttt:在每行打印的時間戳之前添加日期的打印(此種選項,輸出的時間最直觀)
顯示數據包的頭部:
-x:以16進制的形式打印每個包的頭部數據(但不包括數據鏈路層的頭部)
-xx:以16進制的形式打印每個包的頭部數據(包括數據鏈路層的頭部)
-X:以16進制和 ASCII碼形式打印出每個包的數據(但不包括連接層的頭部),這在分析一些新協議的數據包很方便。
-XX:以16進制和 ASCII碼形式打印出每個包的數據(包括連接層的頭部),這在分析一些新協議的數據包很方便。
過濾指定網卡的數據包:
-i:指定要過濾的網卡接口,如果要查看所有網卡,可以 -i any
過濾特定流向的數據包:
-Q: 選擇是入方向還是出方向的數據包,可選項有:in, out, inout,也可以使用 --direction=[direction] 這種寫法
其他常用的一些參數:
-A:以ASCII碼方式顯示每一個數據包(不顯示鏈路層頭部信息). 在抓取包含網頁數據的數據包時, 可方便查看數據
-l : 基于行的輸出,便于你保存查看,或者交給其它工具分析
-q : 簡潔地打印輸出。即打印很少的協議相關信息, 從而輸出行都比較簡短.
輸出到文件:
-w 后接一個以 .pcap 后綴命令的文件名。tcpdump -w ./zhuabao.pcap
-c : 捕獲 count 個包 tcpdump 就退出
-s : tcpdump 默認只會截取前 96 字節的內容,要想截取所有的報文內容,可以使用 -s number, number 就是你要截取的報文字節數,如果是 0 的話,表示截取報文全部內容。
-S : 使用絕對序列號,而不是相對序列號
-C:file-size,tcpdump 在把原始數據包直接保存到文件中之前, 檢查此文件大小是否超過file-size. 如果超過了, 將關閉此文件,另創一個文件繼續用于原始數據包的記錄. 新創建的文件名與-w 選項指定的文件名一致, 但文件名后多了一個數字.該數字會從1開始隨著新創建文件的增多而增加. file-size的單位是百萬字節(nt: 這里指1,000,000個字節,并非1,048,576個字節, 后者是以1024字節為1k, 1024k字節為1M計算所得, 即1M=1024 * 1024 = 1,048,576)
-W:和-C配合使用,表示抓取多少個文件
-F:使用file 文件作為過濾條件表達式的輸入, 此時命令行上的輸入將被忽略.
對輸出內容進行控制的參數:
-D : 顯示所有可用網絡接口的列表
-e : 每行的打印輸出中將包括數據包的數據鏈路層頭部信息
-E : 揭秘IPSEC數據
-L :列出指定網絡接口所支持的數據鏈路層的類型后退出
-Z:后接用戶名,在抓包時會受到權限的限制。如果以root用戶啟動tcpdump,tcpdump將會有超級用戶權限。
-d:打印出易讀的包匹配碼
-dd:以C語言的形式打印出包匹配碼.
-ddd:以十進制數的形式打印出包匹配碼
tcpump過濾組合規則:
and:所有的條件都需要滿足,也可以表示為 &&
or:只要有一個條件滿足就可以,也可以表示為 ||
not:取反,也可以使用 !
想需要抓一個來自10.5.2.3,發往任意主機的3389端口的包:
tcpdump src host 192.168.1.10 and dst port 3389
當你在使用多個過濾器進行組合時,有可能需要用到括號,而括號在 shell 中是特殊符號,因為你需要使用引號將其包含。例子如下:
tcpdump src ‘192.168.1.10 and (dst port 3389 or 3390)’
而在單個過濾器里,常常會判斷一條件是否成立,這時候,就要使用下面兩個符號
=:判斷二者相等
==:判斷二者相等
!=:判斷二者不相等
當你使用這兩個符號時,tcpdump 還提供了一些關鍵字的接口來方便我們進行判斷,比如
if:表示網卡接口名、
proc:表示進程名
pid:表示進程 id
svc:表示 service class
dir:表示方向,in 和 out
eproc:表示 effective process name
epid:表示 effective process ID
比如要過濾來自進程名為 nc 發出的流經 en0 網卡的數據包,或者不流經 en0 的入方向數據包,可以這樣子寫
tcpdump '(if==en0 and proc == nc) or (if != en0 and dir = in)
其他過濾器:
過濾指定大小的數據包,也是可以的
tcpdump less 32
tcpdump greater 62
tcpdump <= 128
根據 mac 地址進行過濾
tcpdump ether 11:22:33:44:55:66
過濾通過指定網關的數據包
tcpdump gateway 192.168.1.254
總結
以上是生活随笔為你收集整理的tcpdump命令个人笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信jsapi支付,跳转到微信支付成功结
- 下一篇: 第三十六章 数词、日期和度量衡