编写支持基于代理的防火墙的应用程序

原创 2001年05月04日 13:24:00
几乎所有的公司都十分关注保护自己的内部网络,以防黑客及入窃者。一种常见的安全措施是完全断开与因特网的连接。如果黑客们不能连接到您的任何一台机器,他们就不能非法进入您的系统。这种策略产生的不利副作用是,内部用户无法访问外部的因特网服务器,如 Yahoo 或 JavaWorld。为了解决这一问题,网络管理员通常安装“代理服务器”。实际上,代理是安装于因特网和内部网之间的一种服务,用来管理这两个领域之间的连接。代理有助于减少安全性的外部威胁,同时还允许内部用户访问因特网服务。尽管 Java 使得编写因特网客户机不再困难,但是如果客户机不能通过代理,则它们毫无用处。幸运的是,Java 使得使用代理支持不再困难 -- 如果您知道密诀,这就是事实。

将 Java 和代理结合起来的秘诀即在 Java 运行时激活特定的系统属性。这些属性未被写入正式文件,只是作为 Java 传说的一部分在 Java 编程人员中秘传。为了支持代理,Java 应用程序不仅需要指定代理本身的信息,而且需要指定用于认证的用户信息。在开始使用网际协议之前,您需要在程序中添加以下几行代码:

System.getProperties().put( "proxySet", "true" );
System.getProperties().put( "proxyHost", "myProxyMachineName" );
System.getProperties().put( "proxyPort", "85" );

上面的第一行通知 Java 您要通过代理进行连接,第二行指定代理所在的机器,第三行指定代理监听的端口。有些代理在授权用户访问因特网之前,要求用户输入用户名和口令。如果您使用位于防火墙之内的 Web 浏览器,您就可能碰到过这种情况。以下是执行认证的方法:

URLConnection connection = url.openConnection();
String password = "username:password";
String encodedPassword = base64Encode( password );
connection.setRequestProperty( "Proxy-Authorization", encodedPassword );

这段代码的思想是,您必须调整 HTTP 标头以发出用户信息。这是通过调用 setRequestProperty() 来实现的。这种方法允许您在发出请求之前处理 HTTP 标头。HTTP 要求用 base64 对用户名和口令进行编码。幸运的是,有一组公用域 API,它们将代您执行编码(请参阅参考资源部分)。

如您所见,在 Java 应用程序中加入代理支持并不需要做多少工作。有了现在的知识,再做一点研究(您必须查明您的代理是如何处理您感兴趣的协议以及如何进行用户认证的),您就能用其他协议实现代理。

FTP 代理
Scott D. Taylor 提出这个秘诀来处理 FTP 协议代理:

defaultProperties.put( "ftpProxySet", "true" );
defaultProperties.put( "ftpProxyHost", "proxy-host-name" );
defaultProperties.put( "ftpProxyPort", "85" );

接下来您便可以通过以下代码使用 "ftp" 协议访问文件 URL:

URL url = new URL("ftp://ftp.netscape.com/pub/navigator/3.04/windows/readme.txt" );

如果有人有使用其他网际协议代理的例子,我很想看看。

注意:代码示例 (Example.java) 仅在 JDK 1.1.4 下测试过。

后续技巧!

来自 Marla Bonar:

对于仍在使用 JDK 1.1.7(配合 WebSphere 3.0)的开发人员而言,将 proxyHostproxyPort 设为系统属性不起作用;conn.getInputStream() 或者返回连接超时,或者是找不到主机路径。但是,我使用接受 Host 和 Port 为参数的 URL 构造函数解决了这一问题(使用我的代理主机和端口):

public URL(String protocol, String host, int port, String file).

来自 Dylan Walsh:

借助用户名和口令进行认证的方法不起作用。应将 "Basic " 置于认证字符串的开头;例如:

String encodedPassword = base64Encode( password );

应该是:

String encodedPassword = "Basic " + base64Encode( password );

您也不必用一个单独的程序来进行 64 位编码。您可以使用 sun.misc.BASE64Encoder() 类。下面是完成这两处改动之后的代码:

System.getProperties().put("proxySet", "true");
System.getProperties().put("proxyHost", proxyHost);
System.getProperties().put("proxyPort", proxyPort);
String authString = "userid:password";
String auth = "Basic " + new sun.misc.BASE64Encoder
().encode(authString.getBytes());
URL url = new URL("http://java.sun.com/");
URLConnection conn = url.openConnection();
conn.setRequestProperty("Proxy-Authorization", auth);

来自 Marcel Oerlemans:

下面是使用 socks 4 代理服务器的方法:

System.getProperty("socksProxySet", true);
System.getProperty("socksProxyHost", proxyHostName);
System.getProperty("socksProxyPort", proxyPort);
Usually the proxyPort for Socks 4 is port 1080

接下来您就可以用 Socks 4 进行连接了。

Web应用防火墙(WAF Web Application Firewall)评价标准【译文】

转载网址:http://blog.chinaunix.net/uid-204498-id-117972.html Web应用防火墙(WAF  Web Application Firewall)评...
  • Praifire
  • Praifire
  • 2016年08月30日 11:48
  • 1333

限制篇(5.4) 04. 应用控制 - 功能介绍 ❀ 飞塔 (Fortinet) 防火墙

飞塔防火墙除了保证内网不受攻击之外,也具备上网行为管理功能,例如限定某人是否可以上网,上网流量有多少,也可以限制哪些软件不能用,哪些网站不能打开等,对应用软件的管控,就需要用到防火墙的应用控制功能。...
  • meigang2012
  • meigang2012
  • 2017年04月04日 13:11
  • 1143

有状态的防火墙与基于OVS流规则的防火墙(by quqi99)

作者:张华  发表于:2014-08-19版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99 )...
  • quqi99
  • quqi99
  • 2014年09月19日 18:03
  • 3921

用Java编写通过代理访问的应用程序

1、java 通过System.getProperties()获取系统参数Properties props=System.getProperties(); //系统属性   System.out.pr...
  • linuxsnort
  • linuxsnort
  • 2011年04月08日 14:41
  • 186

Windows防火墙启用,禁用,添加例外端口和应用程序

以下代码参考自MSDN,不过经过一点点修改,自己也逐个方法调试了,完全可行。网上的很多博客都是直接拷贝MSDN的代码,我的机器 是Windows XP  Professional SP3,需要安...
  • woshinia
  • woshinia
  • 2012年11月30日 09:26
  • 1005

使用Python检测并绕过Web应用程序防火墙

Web应用防火墙通常会被部署在Web客户端与Web服务器之间,以过滤来自服务器的恶意流量。而作为一名渗透测试人员,想要更好的突破目标系统,就必须要了解目标系统的WAF规则。如今,许多WAF都是基于签名...
  • qq_27446553
  • qq_27446553
  • 2017年07月03日 17:23
  • 315

Windows防火墙启用,禁用,添加例外端口和应用程序

以下代码参考自MSDN,不过经过一点点修改,自己也逐个方法调试了,完全可行。网上的很多博客都是直接拷贝MSDN的代码,我的机器 是Windows XP  Professional SP3,需要安装对...
  • wutaozhao
  • wutaozhao
  • 2011年12月27日 16:19
  • 5550

Windows XP防火墙中添加端口、应用程序

转自:http://blog.sina.com.cn/s/blog_45a78d510100gaws.html #include #include #include #inc...
  • awu999328
  • awu999328
  • 2014年04月25日 15:29
  • 1361

基于openam(SSO服务器)和openam policy agent(应用程序代理)的SSO

SSO 的组件 我们首先看看支持 SSO 所需的一些基本的技术组件: 1.用户。一个尝试登录的用户 2.Web 应用程序。用户尝试登录到的一个应用程序 对于本文,将...
  • u014588376
  • u014588376
  • 2014年08月14日 09:47
  • 940

UIAPPLICATIONDELEGATE 代理函数调用的时间(应用程序生命周期)

UIApplicationDelegate 包含下面几个函数监控应用程序状态的改变: – application:didFinishLaunchingWithOptions:– ap...
  • fg313071405
  • fg313071405
  • 2011年11月16日 16:55
  • 939
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编写支持基于代理的防火墙的应用程序
举报原因:
原因补充:

(最多只允许输入30个字)