代码之家  ›  专栏  ›  技术社区  ›  Christian Nunciato

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

  •  3
  • Christian Nunciato  · 技术社区  · 14 年前

    我有一个简单的flash客户机连接到flash媒体服务器,我希望能够模拟客户机执行以下操作:

    • 尝试连接到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://whatever”)。如果你 应该注意的是, Flash播放器将循环播放 尝试不同的端口和协议 自动连接。当然 您可以设置要使用的协议 通过更改RTMP部件来使用。 这个 Flash播放器将尝试连接到 从1935号港到80号港 然后再试试RTMPT(见下文) 超过80端口 .

    我在一台Windows7机器上,基本上我在寻找如何模拟一个环境的技巧,在这个环境中,flash无法连接到任何端口上的rtmp流并返回到rtmpt。Windows防火墙似乎允许设置“协议号”(除了通常的端口号,例如,TCP是6,UDP 17等),但我似乎找不到RTMP的协议号。

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

    3 回复  |  直到 13 年前
        1
  •  1
  •   Ken    13 年前

    我可以在Windows7上使用firefox,在本地机器(localhost)上运行代理服务器。我使用Windows防火墙为进程“plugin container.exe”的特定目标IP地址阻止到端口1935、443和80的出站连接。(相信firefox 3.6及更高版本使用“plugin container.exe”运行flash插件。)然后我设置Windows系统代理设置(通过IE、工具->Internet选项->连接->LAN设置)以使用本地HTTP代理服务器。有趣的是,Flash显然使用的是Windows代理设置,而不是火狐的,即使是从火狐内部运行。

        2
  •  0
  •   Marcus Adams    14 年前

    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规则设置为block,并确保其故障转移到端口80。

        3
  •  0
  •   Drew    14 年前

    您必须使用HTTP代理服务器中介,该中介将为无效请求引发HTTP错误。我不确定RTMP协议是如何做到这一点的,但我怀疑您可能错误地声称它在80端口上尝试RTMP,然后在同一端口上返回到RTMPT。这真的没有什么意义。但是-如果事实上是这样的,我个人认为这是非常不可能的,我个人永远不会设计一个协议在同一个端口上使用两种不同的格式,那么您需要一个中介,例如HTTP代理服务器,这是我在实践中看到这种情况发生的唯一现实方法。