【问题标题】:How do I identify the source of a UDP packet in an access point?如何识别接入点中 UDP 数据包的来源?
【发布时间】:2015-06-30 08:46:41
【问题描述】:

我正在创建一种接入点。

我从我的机器中捕获所有类型的所有数据包,以便在转发它们之前根据默认的服务质量 (QoS) 类确定它们的优先级。

通过使用ETH_P_ALL参数调用socket,我可以获得任何协议类型的所有传入数据包:

    if ((sockfd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) == ERROR)  {
        perror("socket");
        exit(1);
    }

通过使用 ethhdriphdrtcphdrudphdr 结构,我无法检索有关哪个应用程序发送每个数据包的信息。

但是,Voip 和 SNMP 都使用 UDP,我不知道两者中的哪一个向我发送了 UDP 包。

我想知道哪些应用程序正在发送 UDP 数据包,因此我可能会遵循 QoS 类并在其他数据包(例如电子邮件)之前转发一些数据包(例如会话语音)。

为了识别协议,我应该使用 TCP 和 UDP 端口号列表吗?

【问题讨论】:

  • 我应该使用 TCP 和 UDP 端口号列表”:如果不(尝试)检查数据包的有效负载,您可能没有其他可能性。

标签: c sockets network-programming qos


【解决方案1】:

您无法确定哪个应用程序发送了一个数据包 - 只有发送者自己知道这一点。如果我理解正确,您想要的是检测正在使用的协议。那么你有两种可能:

  1. 假设基于 TCP/UDP 数据包上设置的目标端口的应用程序 - list of TCP/UDP port numbers 或您的 /etc/services(如果您使用的是 Linux/Unix/OSX/等)可能会有所帮助;

  2. 分析数据包内容并将其与已知的协议签名进行匹配(就像 IDS 所做的那样 - 例如参见 Snort rules)。请注意,您可能需要某种形式的 conntrack 才能使这项工作可靠地工作;

【讨论】:

  • 选项二很贵。这样做也可能引起道德上的反对。
  • @alk:确实很贵。至于另一点,虽然我同意,但我必须问:NGFW 如何在不引起道德反对的情况下做到这一点?我(目前)知道的唯一答案是:用户条款和条件 + 隐私政策。
  • 你能给我推荐一些关于 IDS 如何识别协议签名的有趣论文或文档吗?真诚的,我不知道从哪里开始。
  • @elmazzun 我现在不记得有什么好的论文/文档,但我建议查看Snort's manual 或者other Snort documents
  • 谢谢,我从那里开始。
猜你喜欢
  • 1970-01-01
  • 2012-11-27
  • 2016-03-26
  • 2018-10-23
  • 2017-08-18
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 2013-09-21
相关资源
最近更新 更多