在JVM上启用代理时是否可以获取原始主机和端口?

时间:2013-03-25 10:35:38

标签: java sockets tcp

我有兴趣记录Java程序的TCP通信以便以后重放 - 类似于Betamax之类的VCR框架。面临的挑战是创建一个代理来记录TCP流量而不改变原始的Java程序。

我最初的想法:假设我有一个任意Java程序打开到不同服务(例如数据库)的TCP连接,我设置JVM的socksProxyHost属性连接到localhost,我运行一个程序以下代码:

ServerSocket serverSocket = new ServerSocket(1080);
Socket socket             = serverSocket.accept();

有什么方法可以读取Java程序尝试访问的原始主机和端口设置(在应用socksProxyHostsocksProxyPort选项之前)?如果是这样,那么我可以用原始主机和端口打开一个新的套接字并转发/记录数据。

或者是否有另一种方法来记录/重放(blackbox)Java程序之间的TCP通信(即假设源代码不可用)和程序使用的服务?

1 个答案:

答案 0 :(得分:0)

  

有什么方法可以读取Java程序试图访问的原始主机和端口设置(在应用socksProxyHost和socksProxyPort选项之前)?

SOCK客户端尝试访问的主机和端口是client->服务器消息的一部分。这一切都在Wikipedia page中解释。

实际上,有一些现有的Java库支持SOCKs协议。