2011-08-05 46 views
3

是否有可能直接连接到互联网而不使用代理。直接连接到互联网而无需代理

考虑一下我的组织拥有代理服务器的情况,并使用Java代理类中给出的DIRECT选项。

SocketAddress addr = new 
InetSocketAddress("webcache.mydomain.com", 8080); 
Proxy proxy = new Proxy(Proxy.Type.DIRECT, addr); 

如果你去的文档它规定 DIRECT表示直接连接,或代理的缺席。

这与其表现方式完全相同。当我使用这个选项时,我不必提供任何代理详细信息,并且我可以从互联网上访问内容。

我有三个问题

  1. 按我的理解,如果一个组织有一个代理,所有的网络流量 应该得到通过代理路由。没有人应该能够 直接访问网络?
  2. 我也注意到,如果我从IE删除Proxy细节,我不能 接入网络:-(如何Java的仍然这样做?
  3. 如果在任何组织中,你可以用代理服务器和 直接访问这两个,请问防火墙阻止某些网站?如何在 防火墙甚至提前工作?

感谢。

+0

问题1和3更适合Serverfault。 – Jacob

+0

所有这个问题的某些部分可能适合服务器故障,但我也有兴趣了解Java API如何工作。服务器故障时永远不会回答该部分。我请求你在SO保留这个问题。谢谢。 – Geek

+0

这是一个社区决定。但是,大多数问题中有2/3是问题;) – Jacob

回答

0

如果您的组织有代理服务器,则并非所有网络流量都通过代理服务器。您仍然可以继续并建立与Internet的直接连接。大多数组织将阻止直接连接并强制您使用代理。有时他们可能会允许您使用受限直接连接,该连接允许某些URL并拒绝其他URL。

0

2)你可能在任何系统属性已设置代理。如果您使用任何IDE,请检查IDE的代理设置。

2
Proxy proxy = new Proxy(Proxy.Type.DIRECT, addr); 

不是创建直接(无代理)代理指令的正确方法。你应该做

Proxy proxy = Proxy.NO_PROXY 

内部实现Socket类和HttpURLConnection的检查proxy == Proxy.NO_PROXY(注: “==”,而不是 “equals()方法”!)。它不检查是否proxy.getType() == Proxy.Type.DIRECT

+0

感谢您的更正,但DIRECT类型如何忽略组织代理并与外部世界建立直接连接。为什么浏览器无法做到这一点。 – Geek

+0

新代理(Proxy.Type.DIRECT)不是直接(无代理)。这可能是Java开发人员的一个错误或疏忽,但它就是这样。用Proxy.NO_PROXY试试你的代码,看看会发生什么。 – pap