【问题标题】:How to detect packets using http or other application layer protocols?如何使用 http 或其他应用层协议检测数据包?
【发布时间】:2021-03-04 05:23:06
【问题描述】:

我正在编写一个可以检测网络数据包中使用的协议的程序。对于接收到的每个数据包,它将尝试检测网络和传输层中的协议。在这两层中检测协议非常容易,因为在数据包的某处我们有一些字节告诉我们协议。但是对于应用程序层,据我所知,这要困难得多。没有在 HTTP 数据包中没有提到协议(据我所知)。而检测应用层协议的另一个难点是,一个完整的 HTTP 请求或响应可能会占用多个数据包,并且串联多个数据包要困难得多。

我想知道理论上如何检测这些协议。

【问题讨论】:

  • 许多应用程序甚至具有专有的应用程序层协议。例如,在微软收购 Skype 并改变一切之前,Skype 曾经拥有它。很多人问如何解码,但一直保密。

标签: networking tcp network-programming application-layer


【解决方案1】:

很遗憾,没有简单的答案。虽然网络和传输层协议并不多,而且现有的协议都已经很好地标准化,但应用层却要混乱得多。

猜测应用程序协议的一种方法是查看各种“提示”,例如端口号、特定位置是否存在某些字符串(例如“HTTP”)、数据包长度等。但这并不是万无一失的。我可以轻松地在端口 80 上运行一些自定义协议,该协议恰好在有效负载中包含“HTTP”,但不是 HTTP。这就是为什么即使像wireshark 这样的专用工具有时也无法检测到正确的协议。顺便说一句,您可以使用wireshark's source code 了解它如何剖析不同协议的细节。

关于在多个数据包中发送的协议 - 这更容易。您的解析器必须将 TCP 视为 stream 协议。单个数据包在 TCP 中没有意义,您的解析器必须跨多个数据包跟踪流。

【讨论】:

  • "虽然网络和传输层协议并不多,而且现有的协议都非常标准化" 传输层协议有几十种。请参阅 IANA 维护的 Assigned Internet Protocol Numbers 页面。很容易将 IPv4 标头中的协议号或 IPv6 标头中的 Next Header 值简单地转换为 IANA 页面中的表。
猜你喜欢
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 2013-10-28
  • 2021-11-15
  • 1970-01-01
相关资源
最近更新 更多