【发布时间】:2013-09-01 23:31:10
【问题描述】:
我有一个巨大的 Java 应用程序(一个鲜为人知的应用服务器 GNUEnterprise 的客户端)及其源代码,我可以在对其进行一些更改后编译回来。该应用程序大量使用网络,我需要监控每个请求和响应。我可以使用像 Wireshark 这样的嗅探器,但该应用程序通过 SSL 与它的服务器一起工作,因此不知道 SSL 证书的私钥任何嗅探到的流量都是毫无用处的。
如何使每个请求和响应都从应用程序本身记录下来?我需要查看所有发送和接收的标头。我不想更改所有负责网络交互的代码。我想要的是放一个类似的代码
Network.setDefaultLogger(myCustomLoggerInstance);
在应用程序开始附近的某个地方,然后在 myCustomLoggerInstance 中执行我需要的所有日志记录。
此外,鉴于所有网络操作都是使用URLConnections 进行的,我可以使用con.getHeaderFields() 获取响应标头,并使用con.getRequestProperties() 获取请求标头。但是为什么没有cookies呢?如何以相同的方式转储发送和接收的 cookie?
编辑:我试图通过 SSL 模拟 RPC 应用程序与其服务器的通信,例如使用curl。为此,我需要获取应用程序网络流量的详细日志。
【问题讨论】:
-
我会修改
OpenJDK,实现提到的记录器功能,然后在库级别嗅探通信。 -
@auselen 太老套了。如果无法在应用程序级别执行此操作(看起来确实如此),我最好坚持使用外部日志记录代理服务器,就像 grayfairer 建议的那样。