如何在Windows上模拟通过端口80阻止RTMP?

时间:2010-05-24 21:44:36

标签: flash flash-media-server

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

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

这应该是Flash播放器的默认行为,例如as described here

  

在许多情况下,这就是您所需要的   甚至没有经过许多防火墙   使用HTTP隧道。这有效   因为内置了一个功能   NetConnection对象。当你不这样做   在RTMP中指定端口号   地址,Macromedia Flash将尝试   连接到端口1935. 如果失败   然后它会尝试连接到端口   443;如果失败,它将尝试端口   80。因此,如果您这样做,则无需编码即可访问端口1935,443或端口80   不在RTMP中指定端口   地址。

And here

  

连接到FMS时,您将使用   客户端上的netConnection对象   一边,在参数范围内   连接方法你可以设置什么   你想要使用的协议:   nc.connect( “RTMP://无所谓”)。如果你   这样做应该注意到   Flash播放器将循环播放   尝试不同的端口和协议   自动连接。当然   您可以设置您想要的协议   通过改变rtmp部分来使用。的的   Flash播放器会尝试连接   rtmp在1935年,然后是80号港口,   然后它会尝试rtmpt(覆盖如下)   在80号港口

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

如果有人对我如何简单地模拟这种行为有任何建议,我会非常感激。非常感谢提前。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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。

答案 2 :(得分:0)

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