如何查看转发的 ssh 端口上的流量?

如何查看转发的 ssh 端口上的流量?

可以设置 SSH 端口转发,其中 ssh 客户端将通过 ssh 端口交换的流量打印到屏幕或文件。

我正在尝试调试一个问题,并希望查看本地计算机上运行的 java 进程与 Solaris 上运行的远程进程之间发送的内容。我正在通过 ssh 使用端口转发,以便我可以单步执行 java 程序。通常,我必须将 .java 文件复制到 Solaris 计算机,构建它们并运行,这不是非常高效的调试方式,因此端口转发。客户端和服务器使用 IIOP 协议,因此我无法使用 http 代理来监控流量。

答案1

我会作弊并在管道中放入几个netcat's 和 a :tee

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

其中$localport是指向您的 java 进程的任意端口,$portforwardport是您的 ssh 端口转发端口号。这-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 隧道映射到本地主机(接口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/用于嗅探。

相关内容