1. 程式人生 > 實用技巧 >ssh遠端抓包

ssh遠端抓包

需求思路

基本的想法就是用ssh登入到遠端主機上,發起tcpdump抓包,並將tcpdump抓到的結果輸出到stdout,再傳回本地PC機,而本地PC機上的wiresharkstdin為輸入,兩者以管道連線傳輸。

可行方案

生成資料包檔案檢視

ssh dev "tcpdump -s0 -U -ni any -w - not port 22">wireshark.cap

然後再使用wireshark檢視wireshark檔案

這種方式各種環境都適用

tcpdump中引數解析

  • -s0 表示設定最大資料包長度為預設值(262144Bytes)
  • -U 表示讓資料包列印時直接輸出到stdout
    ,而不是在輸出快取滿後再輸出
  • -n表示地址已數字方式顯示,不做域名解析
  • -i 表示抓包的網絡卡,any表示抓取所有的網絡卡的資料,
  • -w 表示儲存檔案,當檔名為-時,輸出原資料包到stdout

直接在本地檢視

Mac中解決方案

ssh dev "tcpdump -s0 -U -ni any -w - not port 22" | wireshark -k -i -

這種方式在mac下行,但是在window中使用不了,不知道什麼問題,可以看見資料報文打印出來,但是就是不能輸入到wireshark中.

window中的解決方案

window環境

使用下面方式可行

ssh dev "tcpdump -s0 -U -ni any -w - not port 22" | D:\Scoop\apps\wireshark\current\App\Wireshark\Wireshark.exe -k -i -

使用下面兩種方式不行。

ssh dev "tcpdump -s0 -U -ni any -w - not port 22" | D:\Scoop\apps\wireshark\current\WiresharkPortable.exe -k -i -

ssh dev "tcpdump -s0 -U -ni any -w - not port 22" | D:\Scoop\shims\wireshark.exe -k -i -
wsl環境

使用window中的WSL方式可以實現直接使用wireshark檢視

ssh dev "tcpdump -s0 -U -ni any -w - not port 22" | /mnt/d/Scoop/apps/wireshark/current/App/Wireshark/Wireshark.exe -k -i -

但是使用下面的就不可行,不知為什麼

ssh dev "tcpdump -s0 -U -ni any -w - not port 22" | /mnt/d/Scoop/apps/wireshark/current/WiresharkPortable.exe -k -i -

ssh dev "tcpdump -s0 -U -ni any -w - not port 22" | /mnt/d/Scoop/shims/wireshark.exe -k -i -

不清楚上面兩種方式啟動wireshark有什麼差別,但是嘗試了不可行。

wireshark中引數解析

  • | 通過管道來傳輸資料
  • -k 馬上開始捕獲資料
  • -i - 從指定介面獲取資料,源為標準輸入,如果介面名為-時,就從stdin讀取資料.

window中的其他方案,未走通,待參考

sudo plink -batch -pw shitouit@2017 -ssh [email protected] "tcpdump -s0 -U -ni any -w - not port 22"|wireshark -k -i -

跳板機遠端抓包

參考:

用wireshark+tcpdump+ssh遠端抓包並實時顯示

Capturing remote packet using Wireshark on Windows

Windows remote ssh capture not getting packets

tshark

網路分析利器wireshark命令版(1):tshark簡介

openwrt遠端抓包與分析

analyze traffic remotely over ssh w/ wireshark