这看起来应该很简单,但由于这不是我的专业领域,所以我花了很长时间才弄清楚如何去做。
基本上,我有一个 Flash 应用,我正在连接到 Flash Media Server 来传输一些内容。例如,我用来执行此操作的 URL 如下所示:
rtmp://someserver.com/some/path/mp3:somefile
一切正常——但这就是问题所在。我尝试模拟用户在比我这里更严格的条件下(即无条件)尝试播放我的媒体——即被困在防火墙或代理服务器后面,阻止访问 RTMP 流。
根据 Adobe 的说法,Flash 可以自动处理代理服务器和防火墙,如下所示(来自文档):
当您未在 RTMP 地址中指定端口号时,Flash 将尝试连接端口 1935。如果失败,它将尝试连接端口 443;如果还失败,它将尝试连接端口 80。[如果失败,它将尝试通过端口 80 上的 RTMPT(即 HTTP 隧道)进行连接。] 因此,如果您未在 RTMP 地址中指定端口,则无需编码即可访问端口 1935、443 或端口 80。
我遇到的问题是设置一个可靠的环境来测试此行为是否确实发生。例如,我在一台 Windows 计算机上,因此使用 Windows 防火墙,我可以阻止某些端口和协议(1935、443),但我不想阻止端口 80,因为最终的后备协议(RTMPT)应该在端口 80 上运行,而 Windows 防火墙只给我足够的粒度(据我所知)来阻止“所有到远程端口 80 的出站 TCP 流量”——也就是说,我显然不能在离开时阻止“所有到端口 80 的出站 RTMP 流量”远程多径传输协议到端口 80 的流量不受影响。
到目前为止,我的理解是,我可能需要设置代理服务器才能执行此操作。这是正确的吗?或者有没有更简单的方法(至少在 Win 7 上)来过滤掉 RTMP 到 1935、RTMP 到 443、RTMP 到 80,但仍允许 RTMPT 到 80(其中所有四个主机名都相同)?如果我确实必须设置代理服务器,那么在 Windows 上最简单的方法是什么?我已经设置了 WinProxy,它看起来有点不稳定但显然可以工作——但我不知道如何告诉 Windows 强制所有 TCP 流量(包括 RTMP、RTMPT 和 HTTO)通过此代理服务器,这样我就可以转身拒绝 RTMP 请求。
任何帮助都将不胜感激。这不是我的专业领域,而且我已经在这上面花费了比我应该花的更多的时间。:)
答案1
您将无法使用任何基本防火墙过滤使用端口 80 的内容。您要么需要使用可能的代理服务器(实际上甚至不确定代理是否能够完成此操作),要么需要使用可以进行深度数据包检查的防火墙(应用层防火墙)。
答案2
虽然我对这句话有点困惑:
或者有没有...方法...过滤掉...RTMP 到 80,但仍然允许 RTMPT 到 80(其中所有四个主机名相同)?
我认为您还可以尝试创建一个 IPSec 过滤器来阻止往返于特定主机的某些流量并允许往返于特定主机的某些流量...