网络协议: TCP 包如何识别应用层协议?

2023-03-20 14:52:13 +08:00
 Summ2r

链路层,ip 层都有 type 或 next_header 字段指示下一层的协议类型,那么 TCP 有没有类似的字段。 举个例子,tcp 通过 dst_port 交付给上层应用后,该应用如何识别 payload 是 http 或 tls 乃至其他协议

1216 次点击
所在节点    问与答
7 条回复
shibo501c
2023-03-20 14:59:22 +08:00
不识别,上层自己识别
Summ2r
2023-03-20 15:18:28 +08:00
@shibo501c 现在有个需求是抓完包后进行解析,如果是 HTTP 需要解析出类似 StatusCode 的信息,如果是 TLS 解析出 Cipher Suite 和证书等,这就需要根据 application 层是哪个协议交给哪个 function 去处理,现在卡在这里了
NewYear
2023-03-20 15:22:53 +08:00
运行在 TCP 下的协议千千万,如何预留字段呢,要预留多长呢,谁去规定好这千千万的协议具体用到了什么标志呢……

不要想当然啊哥们。
Mithril
2023-03-20 15:59:32 +08:00
@Summ2r 如果只是这俩的话,简单点就靠端口猜,复杂点就靠读一部分 payload 猜。
Wireshark 就是这么干的,实在猜不出来就给你显示个 Data Protocol 。
LinePro
2023-03-20 16:00:59 +08:00
一般来说是拿到 TCP 流的数据以后,根据协议特征去判断,比如 HTTP/1 可以判断响应数据的前四个字节是不是 HTTP 这样。
Wireshark 是开源的,你可以参考看看它是怎么做的。
https://github.com/wireshark/wireshark
wheat0r
2023-03-20 16:58:28 +08:00
深度包检测?
echoechoin
2023-03-20 17:14:39 +08:00
nDPI

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/925555

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX