【1】Wireshark 與 Tcpdump
Wireshark是Windows下非常容易上手的抓包工具。但在Linux下很難找到一個好用的圖形界面抓包工具。還好有Tcpdump。
我們可以用Tcpdump + Wireshark完美組合實現:在Linux環境下抓包,然后導出抓包數據文件,在Windows環境下分析包內容。
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.11/24 -w ./2019-06-11.cap
(1)tcp:ip icmp arp rarp 和 tcp、udp、icmp等等這些選項都要放到第一個參數的位置,用來過濾數據報的類型
(2)-i eth1:只抓經過接口eth1的包
(3)-t: 不顯示時間戳
(4)-s 0:默認抓取數據包時抓取長度僅為68字節。加上-S 0后可以抓到完整的數據包
(5)-c 100:只抓取100個數據包
(6)dst port ! 22:不抓取目標端口是22的數據包
(7)src net 192.168.1.11/24:數據包的源網絡地址為192.168.1.11/24
(8)-w ./2019-06-11.cap:保存成cap格式文件,方便在Windows環境下利用Wireshark分析數據包內容
【2】Wireshark
關於Windows環境下的Wireshark,主要內容請參見《Wireshark學習系列》
【3】Tcpdump
關於Linux環境下的Tcpdump,主要內容:
(1)啟動與關閉
啟動:tcpdump
關閉:只有將tcpdump進程終止才停止抓包
終止進程方法:ctrl + c 或 kill -9 pID
查詢pID:ps aux | grep tcpdump
(2)tcpdump -help 內容如下
tcpdump [-aAdDefIKlLnNOpqRStuUvxX] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -M secret ] [ -r file ]
[ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ]
[ -y datalinktype ] [ -z command ] [ -Z user ]
[ expression ]
2.1 抓包選項:
-a:嘗試將ip地址轉化為名稱。如本機的ip轉化為主機名進行顯示,tcpdump默認行為是轉換為名稱,若需顯示ip地址數字,需要指定-n參數。
-A:將抓取的數據包以ASCAII的形式打印出來(並將數據鏈路層頭部最小化)。
一般抓取網頁數據時使用該參數,使用該參數可以打印出human-readable的信息,便於分析包頭內容。
-d:將抓取的數據包按照匯編格式輸出。(暫不清楚用途)
-D:列出可用於抓包的接口。將會列出接口的數值編號和接口名,它們都可以用於"-i"后。
-e:打印數據鏈路層頭部信息(未最小化)。可與A、x、X配合使用。
當使用-A參數和-X參數,或不指定參數時候,打印出的數據鏈路層信息為簡化信息,使用此參數可打印鏈路層頭部完整信息。
-f:顯示外部的IPv4 地址時(nt: foreign IPv4 addresses, 可理解為, 非本機ip地址), 采用數字方式而不是名字.(此選項是用來對付Sun公司的NIS服務器的缺陷(nt: NIS, 網絡信息服務, tcpdump 顯示外部地址的名字時會用到她提供的名稱服務): 此NIS服務器在查詢非本地地址名字時,常常會陷入無盡的查詢循環)。
-I:
-K:跳過TCP校驗和驗證
-l:對標准輸出進行行緩沖(nt: 使標准輸出設備遇到一個換行符就馬上把這行的內容打印出來).在需要同時觀察抓包打印以及保存抓包記錄的時候很有用. 比如, 可通過以下命令組合來達到此目的:
``tcpdump -l | tee dat'' 或者 ``tcpdump -l > dat & tail -f dat''.(nt: 前者使用tee來把tcpdump 的輸出同時放到文件dat和標准輸出中, 而后者通過重定向操作'>', 把tcpdump的輸出放到dat 文件中, 同 時通過tail把dat文件中的內容放到標准輸出中)
-L:列出指定網絡接口所支持的數據鏈路層的類型后退出.(nt: 指定接口通過-i 來指定)
-n:對地址以數字方式顯示,否則顯示為主機名。也就是說,-n選項強制展示ip、port等數值,而不做主機名解析。作用與-a相反。
-nn:除了-n的作用外,還會把端口顯示為數值,否則會顯示端口服務名如https等。
-N:不打印出host的域名部分。例如:ip地址為"192.168.1.100"時,tcpdump將只會打印"192"而不是"192.168.1.100"。
-O:不允許分組匹配代碼優化程序
-p:不將網絡接口設置為混雜模式
-q:快速打印輸出。即打印很少的協議相關信息,從而輸出行都比較簡短。
-R:
-S:將tcp的序列號以絕對值形式輸出,而不是相對值。
-t:不在每一行中輸出時間戳。
-u:輸出未解碼的NFS句柄
-U:
-v:當分析和打印的時候,產生詳細的輸出。
-vv:產生比-v更詳細的輸出。
-vvv:產生比-vv更詳細的輸出。
-x:將抓取的數據包以16進制的形式展示出來(並將數據鏈路層頭部最小化)。
-X:將抓取的數據包同時以16進制(hex)和ASCAII的形式展示出來(並將數據鏈路層頭部最小化)。
-B:buffer_size:設置系統捕獲緩沖區大小
-c:計划抓取的包數量。注意:是指最終要抓取這么多個滿足條件的包。例如:指定"-c 30"將獲取30個包,但可能已經遇到了500個包,只不過只有30個包是滿足條件的包。
-C:在將一個原始分組寫入文件之前,檢查文件當前的大小是否超過了參數file_size 中指定的大小。如果超過了指定大小,則關閉當前文件,然后在打開一個新的文件。
參數 file_size 的單位是兆字節(是1,000,000字節,而不是1,048,576字節)。
-E:用spi@ipaddr algo:secret解密那些以addr作為地址,並且包含了安全參數索引值spi的IPsec ESP分組。
-F:從文件中讀取抓包的表達式。若使用該選項,則命令行中給定的其他表達式都將失效。
-G second:選項后面接時間,單位為秒。抓取報文后隔指定的時間保存一次。
-i:i指interface,指定需要監聽的網絡接口。若未指定該選項,默認為eth0網絡接口。
tcpdump命令默認將從系統接口列表中搜尋編號最小的正常通信接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo)
監聽所有網絡接口,可以使用'any'關鍵字
-M:如果tcp報文中存在TCP-MD5選項,則需要用secret作為共享的驗證碼用於驗證TCP-MD5選選項摘要(詳情可參考RFC 2385)。
-r:從給定的數據包文件中讀取數據。使用"-"表示從標准輸入中讀取。
-s len:設置tcpdump的數據包抓取長度為len,如果不設置默認將會是65535字節。對於要抓取的數據包較大時,長度設置不夠可能會產生包截斷,若出現包截斷,
:輸出行中會出現"[|proto]"的標志(proto實際會顯示為協議名)。但是抓取len越長,包的處理時間越長,並且會減少tcpdump可緩存的數據包的數量,
:從而會導致數據包的丟失,所以在能抓取我們想要的包的前提下,抓取長度越小越好。
-T:將監聽到的包直接解析為指定的類型的報文,常見的類型有rpc、cnfp、snmp
-w:將抓包數據輸出到文件中而不是標准輸出。可以同時配合"-G time"選項使得輸出文件每time秒就自動切換到另一個文件。可通過"-r"選項載入這些文件以進行分析和打印。
-W:限制文件的個數,達到個數后開始從最早的文件覆蓋。
-y type:設置data link type
-z:壓縮dump文件
-Z:改變運行時用戶
-P:指定要抓取的包是流入還是流出的包。可以給定的值為"in"、"out"和"inout",默認為"inout"。
2.2 輸出選項:
2.3 其他選項:
Good Good Study, Day Day Up.
順序 選擇 循環 總結