我有兴趣记录Java程序的TCP通信以便以后重放 - 类似于Betamax之类的VCR框架。面临的挑战是创建一个代理来记录TCP流量而不改变原始的Java程序。
我最初的想法:假设我有一个任意Java程序打开到不同服务(例如数据库)的TCP连接,我设置JVM的socksProxyHost
属性连接到localhost,我运行一个程序以下代码:
ServerSocket serverSocket = new ServerSocket(1080);
Socket socket = serverSocket.accept();
有什么方法可以读取Java程序尝试访问的原始主机和端口设置(在应用socksProxyHost
和socksProxyPort
选项之前)?如果是这样,那么我可以用原始主机和端口打开一个新的套接字并转发/记录数据。
或者是否有另一种方法来记录/重放(blackbox)Java程序之间的TCP通信(即假设源代码不可用)和程序使用的服务?
答案 0 :(得分:0)
有什么方法可以读取Java程序试图访问的原始主机和端口设置(在应用socksProxyHost和socksProxyPort选项之前)?
SOCK客户端尝试访问的主机和端口是client->服务器消息的一部分。这一切都在Wikipedia page中解释。
实际上,有一些现有的Java库支持SOCKs协议。