1

我对今天的代理服务器可以扮演什么角色并不真正了解,我正在学习,所以对我来说放轻松:-) 我有一个使用本土协议编写的客户端/服务器系统,需要增强客户端协商退出代理环境的方式。

我有一个用 C 和 C++ 编写的现有客户端和服务器系统,以提高速度,并在客户端中使用少量 MFC 来处理用户界面。我已经在 Windows 上编写了系统的服务器端和客户端(我工作的人主要是使用 Windows 一切的 Web 开发人员 - 不是一种选择)坚持使用 Berkeley Sockets,因为它是通过 wsock32 来提高效率的。客户端通过非标准端口连接到服务器(即使使用端口 80 是退出某些环境的一种选择,但通过它的协议不是 HTTP)。TCP 连接在客户端参与实时会议期间保持打开状态。

我们的客户群正在扩展到各种网络环境。我已经能够通过添加通过端口 443 安全连接的能力和使用安全套接字来解决很多问题,因为无法嗅探内部数据包,因此该协议允许协议通过很多环境。但是越来越多的客户使用代理服务器环境,而我的直接连接无法通过。我对代理服务器的老派理解是,它们通过 HTTP 充当外部 HTML 内容的代理,可能在本地缓存流行的材料以加快本地访问速度,还允许其 IT 人员将某些目标站点列入黑名单。客户抱怨我的软件无法识别并且无法轻松地在他们的代理环境中导航,但我' 我发现很难决定我的“最合适”的解决方案应该是什么。我的软件不会在每次客户端请求后断开连接,而且最重要的是,数据包可以随时来自任何一方,基本上是针对特定领域的典型自定义客户端/服务器系统。

我的第一反应是“为什么他们不能将我的服务器地址添加到他们的白名单中”,但如果有一种程序化的方式我可以通过而不需要他们的 IT 人员帮助它在政治上更好,并且可以说是一个更好的解决方案。另外,也许我仍然不了解代理服务器和环境如今已发展成为的角色和目的。

我对解决方案的第一次尝试是使用 WinInet 及其各种代理功能通过端口 80 建立与我的非标准协议服务器的连接(它知道并能够识别和回答一个简单的 HTTP 外观的 GET 请求并用一个简单的HTTP 响应页面,用于绕过一些使用初始数据包嗅探 (DPI) 的环境。我检索了 WinInet 的 HINTERNET 请求对象背后的实际 SOCKET 句柄,并希望使用它来代替我的软件现有的 SOCKET 连接,并且希望不需要在客户端进行更多更改。它最初似乎是我的解决方案,但经过进一步检查,操作系统似乎首先获得了在此套接字上接收到的数据的机会,因为当我通过标准 select(...

有人可以告诉我客户端库(商业很好)可以让我在尽可能少的用户和 IT 人员帮助的情况下通过这些代理服务器环境吗?从我读到的内容来看,它已经超越了 SOCKS,我认为必须有人在我之前解决了这个问题。

感谢您阅读我冗长的问题,

撕裂

4

1 回答 1

2

如果您的软件可以在端口 443 上建立 SSL 连接,那么您已经完成了 99% 的工作。

通常 HTTP 代理设置为代理 SSL-on-443(出于 HTTPS 的目的)。您只需要教您的软件使用 HTTP 代理。查看 HTTP RFC 以获取完整的详细信息,但 Cliffs Notes 版本是:

  • 在代理端口上连接 HTTP 代理;
  • 发送到代理:

.

 CONNECT your.real.server:443 HTTP/1.1\r\n
 Host: your.real.server:443\r\n
 User-Agent: YourSoftware/1.234\r\n
 \r\n
  • 然后解析代理响应,它将以 HTTP 状态代码开头,然后是 HTTP 标头,然后是一个空行。然后您将与您的目的地通话(如果状态码表明成功,无论如何),并且可以开始通话 SSL。

在许多公司环境中,您必须使用代理进行身份验证 - 这几乎总是 HTTP 基本身份验证,这很容易 - 再次请参阅 RFC。

于 2010-06-08T07:35:52.127 回答