3

我有一个连接到 Flash Media Server 的简单 Flash 客户端,我希望能够模拟客户端执行以下操作:

  • 尝试连接到端口 1935 上的 RTMP 流并失败,
  • 在端口 443 上回退到 RTMP 并失败,
  • 在端口 80 上回退到 RTMP 并失败,最终
  • 通过端口 80 回退到 RTMPT (HTTP) 并成功。

这应该是 Flash 播放器的默认行为,例如,如下所述

在许多情况下,这就是您在不使用 HTTP 隧道的情况下通过许多防火墙所需的全部内容。这是因为 NetConnection 对象中内置了一个功能。如果您没有在 RTMP 地址中指定端口号,Macromedia Flash 将尝试连接到端口 1935。如果失败,它将尝试连接到端口 443;如果失败,它将尝试端口 80。因此,如果您未在 RTMP 地址中指定端口,则无需编码即可访问端口 1935、443 或端口 80。

在这里

连接到 FMS 时,您将在客户端使用 netConnection 对象,在 connect 方法的参数中,您可以设置要使用的协议:nc.connect("rtmp://whatever")。如果这样做,请注意 Flash 播放器将通过不同的端口和协议循环尝试自动连接。当然,您可以通过更改 rtmp 部分来设置要使用的协议。Flash 播放器将尝试通过端口 1935 连接到 rtmp,然后是端口 80,然后它会尝试通过端口 80 连接到 rtmpt(如下所述)

我在 Windows 7 机器上,基本上我正在寻找有关如何模拟 Flash 无法连接到任何端口上的 RTMP 流并回退到 RTMPT 的环境的提示。Windows 防火墙似乎允许设置“协议号”(除了通常的端口号——例如,TCP 为 6、UDP 17 等),但我似乎找不到 RTMP 的协议号。

如果有人对我如何简单地模拟这种行为有任何建议,我将不胜感激。提前谢谢了。

4

3 回答 3

1

我能够在 Windows 7 上使用 Firefox 和在本地计算机(localhost)上运行的代理服务器来完成这项工作。我使用 Windows 防火墙阻止与进程的特定目标 IP 地址的端口 1935、443 和 80 的出站连接:“plugin-container.exe”。(相信 Firefox 3.6 及更高版本使用“plugin-container.exe”来运行 Flash 插件。)然后我设置 Windows 系统代理设置(通过 IE,工具->Internet 选项->连接->LAN 设置)使用我的本地 http 代理服务器。有趣的是,Flash 显然使用的是 Windows 代理设置,而不是 Firefox 的,即使是在 Firefox 中运行时也是如此。

于 2011-03-07T13:18:15.147 回答
0

RTMP 建立在 TCP 之上,因此您应该能够选择 TCP 和相应的端口来使用您的防火墙进行测试。

您需要为每个端口创建一个自定义规则。

name: RTMP Default (1935)
protocol: TCP
local port: any
remote port: 1935
local ip: any
remote ip: any

name: RTMP over 443
protocol: TCP
local port: any
remote port: 443
local ip: any
remote ip: any

name: RTMP over 80
protocol: TCP
local port: any
remote port: 80
local ip: any
remote ip: any

然后将 RTMP 默认规则设置为阻止所有流量,但将其他设置为允许。然后测试并确保它故障转移到端口 443。然后将 RTMP over 443 规则设置为阻止,并确保它故障转移到端口 80。

于 2010-05-24T21:50:17.650 回答
0

您将不得不使用 HTTP 代理服务器中介,这将为无效请求引发 HTTP 错误。我不确定 RTMP 协议是如何做到这一点的,但我怀疑您声称它通过端口 80 尝试 RTMP 然后在同一端口上回退到 RTMPT 可能是错误的。那真的没有多大意义。但是 - 如果情况确实如此,我个人认为这不太可能,而且我个人永远不会设计一个协议来在同一个端口上使用两种不同的格式,那么你需要一个中介,比如 HTTP 代理服务器,它是只有现实的方式我才能看到这种情况在实践中发生。

于 2010-06-17T15:16:39.103 回答