転送されたSSHポートでトラフィックを表示するには?

転送されたSSHポートでトラフィックを表示するには?

SSHクライアントがSSHポートを介して交換されたトラフィックを画面またはファイルに印刷するSSHポート転送を設定できます。

問題をデバッグしようとしていますが、ローカルシステムで実行されているJavaプロセスとSolarisで実行されているリモートプロセスの間で転送される内容を確認したいと思います。 Javaプログラムを実行できるように、SSHを介したポート転送を使用しています。通常、.javaファイルをSolarisシステムにコピーしてビルドして実行する必要があります。これはデバッグには非常に効率的な方法ではないため、ポート転送が必要です。クライアントとサーバーはIIOPプロトコルを使用しているため、httpプロキシを使用してトラフィックを監視することはできません。

答え1

私はチートを書き、パイプにいくつかのnetcat「とa」を入れます。tee

nc -k -l -p $localport -c "tee file.out | nc 127.0.0.1 $portforwardport"

どこに$localportJavaプロセスを指す任意のポートで、$portforwardportsshポート転送ポート番号です。これにより、-kクライアントがシャットダウンするのではなく、最初の接続が切断された後でもリスニングnetcatがリスニングを維持し続けます。出力は最終的にfile.outローカルホストに表示されます。

答え2

@derobertがコメントで述べたように、最善の選択肢はおそらくWiresharkのようなツールを使用することです。 SSHトンネルに入る前に、Javaプロセスからの入出力トラフィックを見つける必要があります。トンネルは暗号化されているためアクセスできません。

また、sectools.orgのウェブサイトには、Wiresharkがあなたの要件に合わないことを確認するための幅広いスニッフィングツールのリストがあります。

答え3

あなたはそれを使用することができますtcpdump

$> sudo tcpdump -vv -x -X -s 1500 -i lo 'port 8000' 

この方法は、SSHトンネルをlocalhost(インタフェースlo)とポートにマッピングした場合に機能します。8000

-vv verbose level 2
-X  print data in hex and ASCII 
-x  print data in hex to a max limit of -s 
-s  snaplen - limit of data to print
-i eth0 tcpdump on the eth0 interface

このスクリプトをパスに保存することもできます。sniff-port

#!/bin/bash -xe
# use the first argument as port. if not defined default to 8080
PORT=${1:-8080} 
# sniff sniff
sudo tcpdump -vv -x -X -s 1500 "port $PORT" -i lo

次に、次のように使用します。

$> sniff-port 1234

答え4

運命を利用できるhttps://kismetwireless.net/スニッフィングのため。

関連情報