【问题标题】:Filtering UDP packets accidentally sent to my port过滤意外发送到我的端口的 UDP 数据包
【发布时间】:2014-04-11 08:52:30
【问题描述】:

我正在 UDP 之上设计一个简单的协议,现在我意识到其他人可以向我正在侦听的端口发送数据包。这样的数据包对于我的应用程序显然是不正确的(我现在不担心安全性)

是否有过滤这些无效消息的方法?我正在考虑在每个数据包的开头添加一些固定的幻数,但它应该有多大? 16位够吗?

【问题讨论】:

    标签: networking udp protocols


    【解决方案1】:

    我认为典型的解决方案是在会话开始时要求握手(可能包括“足够长”的幻数)。当然,“会话”是您的协议需要跟踪的东西,UDP 没有这个概念。为所有当前会话保留一个列表 ip、端口和最后一个数据包接收时间应该这样做:然后您可以丢弃来自未事先进行握手的对等方的所有数据包。这不仅可以防止随机的未知应用流量破坏您的应用,还可以防止多个合法对等方相互干扰。

    此外,如果您需要确保对等方同意您关于这是哪个会话,您可以向数据包添加会话 ID 或增加的数据包序列号(允许丢失数据包)。

    【讨论】:

    • 这完全不适合UDP。
    • 介意解释一下原因吗?简单的应用程序可能根本不需要“会话”知识(在这种情况下,每个数据包中的简单幻数可能就足够了)但是 UDP 用于很多事情......例如gamers.org/dEngine/quake/QDP/qnp.html
    • @EJP 请看上面的评论(第一条忘了点你的名字)
    • 实际上这几乎正是我想要做的。现在唯一的问题是长度。
    【解决方案2】:

    大概吧。 Java 将 32 用于 .class 文件 (0xcafebabe)。但是在实际的 UDP 中你只有 534 个字节,所以你可能需要保存几个。

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 1970-01-01
      • 2017-02-25
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      相关资源
      最近更新 更多