【问题标题】:how does wireshark identify DNS traffic when it also uses a Radius port in UDP port? And how can I tell?当wireshark还在UDP端口中使用Radius端口时,它如何识别DNS流量?我怎么知道?
【发布时间】:2015-10-31 03:41:37
【问题描述】:

我的程序正在进行数据包分析。我现在遇到了有关 DNS/Radius 的问题。 DNS 使用 UDP 端口 53 Radius 使用 UDP 端口 1645/1646/1812/1813

逻辑是,如果我看到 53,那么它就是一个 DNS 数据包;如果我看到 1812... 它是一个半径数据包。然后问题来了,一些 DNS 数据包也使用 Radius 端口,例如UDP 端口 src 53/dst 1812 或反之亦然。然后我的程序无法处理这个。

但是 wireshark 并没有混淆,我想知道它是如何知道真正的协议的。它是否尝试解码有效载荷?然后告诉?或下划线 libpcap 或其他东西有能力告诉真正的协议类型。那么如果我可以使用 libpcap 中的代码,libpcap 是否提供了告诉承载协议的功能?

有人可以帮忙吗?我google了一会儿,还没有结果。

谢谢 康

【问题讨论】:

    标签: dns udp wireshark libpcap radius


    【解决方案1】:

    Wireshark 使用各种技术来识别协议。对于 DNS 和 RADIUS,它基于端口号进行。执行此操作的代码首先查找数字较低的端口号,如果没有找到该端口号的解析器,则查找数字较高的端口号,因此端口 53 和 1812 之间的数据包将被识别为 DNS而不是 RADIUS,因为 DNS 的端口 53 在数值上低于 RADIUS 的端口 1812。

    如果端口 1812 和 53 之间恰好有 RADIUS 流量,Wireshark 感到困惑。

    解决此问题的唯一方法是让 DNS 解析器尝试查看数据包数据并猜测它是否是 DNS,或者让 RADIUS 解析器尝试查看数据包并猜测它是否是 RADIUS,如果是不是该解剖器的数据包,返回“这不适合我”指示,以便可以尝试另一个解剖器。

    没有神奇的解决方案可以保证正确识别所有通过 TCP 或 UDP 运行的协议。只有基于端口号和数据包内容的启发式算法;他们可能会在 99 44/100% 的时间内得到正确的答案,但仍有 56/100% 的时间不起作用,您必须手动干预(例如,使用“解码As..." Wireshark 中的机制,或 TShark 中的 -d 命令行等效项。

    而且,不,正如 Steffen Ullrich 指出的那样,libpcap 不会为您做这件事。使用 libpcap 的不同应用程序(tcpdump、Wireshark 等)可能会有所不同。

    【讨论】:

      【解决方案2】:

      libpcap 不提供此类功能。一件事是,wireshark 会查看数据包并检测结构,但会限制它通过使用的端口/协议查找的内容。另一件事是,您通常不会发现从端口 53 到 radius 服务器的数据包或从端口 1812 到 DNS 服务器的数据包,因为客户端通常隐式使用更高的 ephemeral port

      【讨论】:

        猜你喜欢
        • 2011-04-30
        • 1970-01-01
        • 1970-01-01
        • 2011-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-29
        • 1970-01-01
        相关资源
        最近更新 更多