启动选项以强制Java套接字连接到localhost?

时间:2009-10-17 03:01:20

标签: java proxy localhost

我正试图找到一种方法来强制Jar通过我的代理服务器对外部IP进行任何连接尝试,该代理服务器在localhost(也是Java应用程序)上运行。 一旦代理服务器收到连接,它将打开与外部IP的连接,并开始将IO路由到客户端/服务器或从客户端/服务器路由。

我已经谷歌搜索了2天,我没有运气,我相信我在搜索尝试中使用了错误的术语。

如果您有任何想法,请告诉我,我会尝试任何事情。

提前致谢。 - 肖恩。

3 个答案:

答案 0 :(得分:5)

如果是“真正的”代理,您可以使用java系统属性指定要使用的代理。

您有两种选择:

  1. 在命令行中指定代理
  2. 将其硬编码到您的应用中
  3. 嗯,你实际上有三个

    1. 指定.properties文件,然后从那里读取,并将其设置为System属性(这几乎是选项2但更具动态性)
    2. 从命令行中您将使用:

       java -Dhttp.proxyHost=localhost -Dhttp.proxyPort=8080 -jar YourJar.jar
      

      您执行的所有http连接都将通过localhost端口8080

      第二个是在程序的主要方法中添加:

      public static void main( String [] args ) { 
          System.setProperty("http.proxyHost", "localhost");
          System.setProperty("http.proxyPort", "8080");
          .....
      }
      

      其中也是如此。

      最后从myapp.properties

      加载
      public static void main( String [] args ) { 
          try { // there are cleaner ways of course 
              ResorceBundle bundle = ResourceBundle.getBundle("myapp");
              System.setProperty("http.proxyHost", bundle.getString("proxy.server"));
              System.setProperty("http.proxyPort", bundle.getString("proxy.port"));
          } catch( MissingResourceException missingResourceException ){}
          ....
      }
      

      您只需确保类路径中可以使用myapp.properties

      有关此功能的更多信息here

答案 1 :(得分:1)

如果您询问有关Socket连接的一般(非HTTP / FTP特定!)代理,那么简单的答案是Java不支持它。

为HTTP和FTP流量配置代理时,代理会在应用程序协议级别进行。 Java端代理属性告诉URLConnection层连接到指定的代理,而不是应用程序尝试连接的URL中的IP地址。 Java Socket级别没有意识到这种情况正在发生。它只是看到连接代理的请求。

这项工作是因为HTTP和FTP协议专门支持代理。例如,HTTP GET请求消息的第一个“行”提供客户端请求的页面的完整URL。如果GET请求转到代理,代理可以找出发送它的位置。

在Socket级别查看代理问题,第一个观察是标准Java类库不支持这一点。第二个观察是它实际上是无法实现的...除非你将它作为替代传输层实现。原因是IP和TCP / IP根本不支持明确代理或中继消息/流的概念。即使你确实实现了这样的传输,它也不适合标准的Socket模型。

因此,如果您真的询问代理所有的Java应用程序的网络流量,那么这只能在JVM之外实现;即在JVM(物理或虚拟)主机操作系统的网络传输级别。

答案 2 :(得分:0)

如果是HTTP流量或FTP流量,您可以尝试以下系统属性:

http.proxyHost(默认值:) http.proxyPort(如果指定了http.proxyHost,则默认值为80) http.nonProxyHosts(默认值:

有关详细信息,请参阅此链接:

http://java.sun.com/docs/books/tutorial/networking/urls/_setProxy.html