Linux, 工作, 生活, 家人

Gentoo, Linux, Ubuntu

Wireshark Debug 遠端的機器

這個是最近從客戶那邊看到的, 回來之後覺得很有趣, 應該要學起來, 以後 debug 比較方便.

一般要 mirror 遠端機器上的流量會使用具有 port mirror 的 switch, 這樣就可以得到完整的封包了, 但是如果沒有 port mirror 的機器怎麼辦呢? 這時候就只好用其他方式, 像是 ssh or nc

這邊就不講 ssh 了, 很多 embedded system 是沒有 ssh 的.

這個方式不適用於 Windows 版的 Wireshark, 但是理論上 Windows 版的 Wireshrak 應該可以配合 Winpcap 做到同樣的事情. 以下講的是 Linux 版的

首先, 在 wireshark 的機器上先執行 nc , nc 沒有辦法直接輸出到 fifo 的檔案上, 所以要接個 tee 指令

mkfifo /tmp/temp.pcap
nc -k -l -p 9999| tee > /tmp/temp.pcap

然後在 target 機器上執行

tcpdump -s 0 -U -n -w - -i eth0 not host 10.1.1.1 | nc 10.1.1.1 9999

再回來 wireshark 的機器上執行

cat /tmp/temp.pcap | wireshark -k -i -
這樣應該就可以順利的執行了. BUT, 人生最機車的就是還有這個 BUT.

我有一組機器 Wireshark 跑在 ubuntu 12.04 上沒有辦法照上面那些指令執行, 猜想可能是 wireshark 版本的問題, 這時候請改用以下命令

首先, 在 wireshark 的機器上先執行 nc

mkfifo /tmp/temp.pcap
nc -k -l -p 9999| tee > /tmp/temp.pcap

然後在 target 機器上執行

dumpcap -P -w - -i eth0 -f 'not host 10.1.1.1' | nc 10.1.1.1 9999

再回來 wireshark 的機器上執行

wireshark -k -i /tmp/temp.pcap

這樣, 祝各位順利.

如果沒有 dumpcap 可以改用 tcpdump
在有 GUI 的機器執行


wireshark -k -i /tmp/temp.pcap

在 Target Board 上執行


ssh root@192.168.110.2 "tcpdump -s 0 -U -n -w - -i eth0 not port 22" > /tmp/temp.pcap;

這樣也可以

ref:
Monitoring remote traffic with tcpdump and netcat
Pipes (ssh 可以參考這一篇)
How to process tcpdump live data stream from a remote machine on a local WireShark

發佈留言