【问题标题】:STUN UDP request packet troubleSTUN UDP请求包故障
【发布时间】:2013-10-15 13:20:29
【问题描述】:

我正在尝试使用一些全球可用的 STUN 服务器,以便它们可以告诉我我的 NAT 映射,以便使用 UDP 遍历 NAT。服务器在此网页上: http://www.tek-tips.com/faqs.cfm?fid=7542 我对它们进行了测试,它们确实可以 ping。问题是构造一个特殊的 STUN 请求包, 因为服务器不会对所有传入的数据包做出响应。

STUN 协议的数据包结构解释得不是很好,我不想用任何 已经实现它的库。是否有一些 Java/C 代码或仔细解释的数据包结构的示例?我找不到任何有关它的信息。

【问题讨论】:

    标签: java c udp nat stun


    【解决方案1】:

    STUN 数据包格式在RFC 5389 中有详细解释。

    如果您想为 STUN 编写体面的 Java 代码 - 请查看 JSTUN 源代码。使用他们的库和/或修改他们的代码非常容易。

    如果你想使用我用 C++ 编写的代码,你可以仔细阅读Stuntman 的源代码。有一个解析器类 (CStunReader) 和一个用于创建 STUN 消息的类 (CStunWriter)。

    【讨论】:

    • 虽然我同意 RFC 5389 非常详细地详细描述了 STUN,但在我尝试实现标头格式之后,至少我得出的结论是,这是我所拥有的最混乱的措辞之一来处理。在网络/非网络订单中混合使用二进制/十六进制表示法......很难理解和理解。
    • @Laazik - RFC 通常是这样的。二进制协议通常很难。在 RFC 5389 的情况下,它在某些地方懒惰地引用了 RFC 3489。但如果我能弄清楚,那么我认为任何有足够耐心和时间的人都可以。
    • 我知道,在过去的 15 年里,我一直在使用 ETSI、ITU 等标准和协议,他们很努力。然而,“字段必须包含网络字节顺序中的值 0xXYZ”的声明。 - 这句话有很多歧义。事实证明它已经以网络字节顺序出现在 RFC 中,我最初采用了该值并确实更改了顺序(根据我的解释),但这不起作用。所以我仍然认为解释这个特定的章节真的很难,可以做得更好:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多