我有一个庞大的Java应用程序(GNUEnterprise这个较为不知名的应用服务器的客户端),我有它的源代码,可以在进行一些更改后再次编译。该应用程序使用网络非常频繁,我需要监视每个请求和响应。虽然我可以使用类似Wireshark这样的嗅探器,但是该应用程序与其服务器之间通过SSL进行通信,因此如果不知道SSL证书的私钥,则任何被嗅探的流量都是无用的。
我该如何做才能使应用程序自身记录每个请求和响应?我需要看到所有发送和接收的头信息。我不想更改负责网络交互的所有代码。我的目标是像下面这样插入一些代码:
Network.setDefaultLogger(myCustomLoggerInstance);
在应用程序开始的地方附近,然后在myCustomLoggerInstance
中执行所需的所有日志记录。
另外,由于所有网络操作都是使用URLConnection
进行的,因此可以使用con.getHeaderFields()
获取响应标头,并使用con.getRequestProperties()
获取请求标头。但为什么没有Cookie?如何以相同的方式转储发送和接收的Cookie?
编辑:我想达到的目标是模仿RPC应用程序与其服务器之间的通信(例如,使用curl
)。为此,我需要获取应用程序的网络流量的详细日志记录。
OpenJDK
,实现所提到的日志记录功能,然后在库级别上嗅探通信。 - auselen