可以设置 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/用于嗅探。