跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

技巧: 为防火墙后面的 SOAP 使用代理网络库

使用 SOCKS 协议完成 Web 服务通信

Uche Ogbuji (uche.ogbuji@fourthought.com), 首席顾问, Fourthought, Inc.
Uche Ogbuji 的照片
Uche Ogbuji 是 Fourthought Inc.的顾问兼创始人,该公司是专为企业知识管理提供 XML 解决方案的软件供应商和咨询公司。 Fourthought 开发了 4Suite,这是一个用于 XML、RDF 和知识管理应用程序的开放源代码平台。Ogbuji 先生也是 VersaRDF 查询语言的首席开发人员。他是一位出生于尼日利亚的计算机工程师和作家,在美国科罗拉多的博耳德生活和工作。可以通过 uche.ogbuji@fourthought.com和 Ogbuji 先生联系。

简介: 如果试图从防火墙后面访问 SOAP 服务,而您的 SOAP 库不支持代理网络连接,直接请求就不能通过防火墙。在这种情况下,可以使用套接字重定向程序使连接通过代理服务器。Uche Ogbuji 在本文中介绍了这种技巧。

发布日期: 2004 年 4 月 01 日
级别: 中级
访问情况 : 1151 次浏览
评论: 


安全性已成为企业无法回避的问题,多数计算机用户都采用了某种防火墙,尤其是在工作场所。这样做不会对普通的 Internet 访问造成很大障碍,比如 Web 浏览与电子邮件,因为多数相应的用户代理都支持一种特殊的服务器,这种服务器允许从一台计算机到另一台计算机的通信不必建立直接的连接。这种服务器被称为 代理服务器, Internet 代理服务器最常用的协议称为 SOCKS。SOCKS 代理一般用于使防火墙后面的用户能够以有限的、受控的方式连接到 Internet 服务器。代理服务器通常强制实施安全策略,比如禁止访问某些 Web 站点,或者在连接之前要求用户验证。多数 SOCKS 实现都支持最新的 SOCKS 5 标准。

SOAP 和防火墙

如果试图穿过防火墙使用 SOAP,可能需要使用 SOCKS 代理。这意味着必须保证程序能够理解 SOCKS 协议。设置程序使其能够使用 SOCKS 协议的过程称为程序的 SOCKS 化。使 Web 服务设置 SOCKS 化有几种不同的方式:

  • 使整个计算机的网络设施都通过 SOCKS 服务器。有一些程序(据我所知只有商业化的产品)能够使所有的网络通信都透明地通过 SOCKS 代理传输。
  • 使用能够重定向所选网络通信使其通过 SOCKS 服务器的专门程序,后面我将举一个例子。
  • 一些运行时环境支持重定向在其中运行的应用程序的网络连接,使其通过 SOCKS 代理。比如,最新版本的多数 Java 运行时都允许使用 socksProxyHostsocksProxyPort 这样的属性指定代理。这样可以对所有使用套接字的对象都使用代理。
  • 使用支持 SOCKS 协议的 Web 服务工具包,比如 IBM Emerging Technologies Toolkit。

一个简单的例子

本例中将在防火墙后使用 SOAPpy Web 服务工具包 0.11.3 版。SOAPpy 是一个方便的 Python 工具包,过去我曾经在 developerWorks上介绍过(请参阅 参考资料),但是它没有内建的 SOCKS 支持,因此是稍微复杂一点的一个很好的例子。

我从防火墙背后尝试 SOAPpy 自带的 weatherTest.py 示例脚本。其中最重要的一行是:

SoapEndpointURL = 'http://services.xmethods.net:80/soap/servlet/rpcrouter'
      

这样就把客户设置成从服务器 services.xmethods.net 的端口 80 请求一个 SOAP 端点。第一次运行的结果得到下面的错误:

socket.gaierror: (-2, 'Name or service not known')
      

这种错误首先预示着此类防火墙问题。许多系统中,域名服务器只能在防火墙内解析地址,实际上必须使用代理服务器解析外部域名并建立后续连接。SOCKS 化客户的许多方法支持这种通过代理查询 DNS 的重定向,但是为了简化起见,我仅仅修改了 SOAP 端点请求,以便使用真正的 IP 地址而不是通常的 DNS 查找。修改后的一行如下:

SoapEndpointURL = 'http://66.28.98.121:80/soap/servlet/rpcrouter'
      

结果得到如下所示的错误:

socket.error: (111, 'Connection refused')
      

这就是对话错误。防火墙阻塞了直接连接到 66.28.98.121 服务器端口 80 的请求。我必须让请求通过 SOCKS 代理。为此,我下载了一个知名的套接字重定向工具 connect.c(请参阅 参考资料)。下载后构建了该程序(本例是在 Linux 上):

gcc connect.c -o proxyconnect
      

得到的 proxyconnect 命令可以重定向端口,监听本地端口并将其通过代理重定向到远程服务器。我希望它监听本地端口 8888,并重定向到 66.28.98.121 上的端口 80。在我的环境中 SOCKS 服务器的地址是 192.168.1.254,它从端口 8080 上接收 SOCKS 连接。这种情况下,正确的 proxyconnect 命令行设置如下:

proxyconnect -p 8888 -S 192.168.1.254:1080 66.28.98.121 80
      

如果在单独的会话中或者后台运行这个命令,那么就可以通过将其指向本地重定向的套接字来进一步使用 SOAP 端点。换句话说,代码中关键的一行就变为:

SoapEndpointURL = 'http://localhost:8888/soap/servlet/rpcrouter'
      

这一次,SOAP 请求运行得很好。


结束语

这个例子稍微有点笨拙,其中之一就是需要为希望使用的每个远程端点都设置重定向的套接字。我希望通过一个例子说明更糟的一些情况——通常选择的 Web 服务 SOCKS 化方法会更简单一些。如果 SOCKS 代理设置了拒绝 SOAP 的策略——最近的一些产品就是如此——这可能彻底击碎您对 SOAP 的雄心。如果这样,您就没有别的选择,只能与您的 IT 部门一道为许可 Web 服务访问设置专门的代理。和往常一样,很难在安全与方面之间求得平衡。


参考资料

关于作者

Uche Ogbuji 的照片

Uche Ogbuji 是 Fourthought Inc.的顾问兼创始人,该公司是专为企业知识管理提供 XML 解决方案的软件供应商和咨询公司。 Fourthought 开发了 4Suite,这是一个用于 XML、RDF 和知识管理应用程序的开放源代码平台。Ogbuji 先生也是 VersaRDF 查询语言的首席开发人员。他是一位出生于尼日利亚的计算机工程师和作家,在美国科罗拉多的博耳德生活和工作。可以通过 uche.ogbuji@fourthought.com和 Ogbuji 先生联系。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=XML
ArticleID=21068
ArticleTitle=技巧: 为防火墙后面的 SOAP 使用代理网络库
publish-date=04012004
author1-email=uche.ogbuji@fourthought.com
author1-email-cc=uche.ogbuji@fourthought.com

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。