链路层,ip 层都有 type 或 next_header 字段指示下一层的协议类型,那么 TCP 有没有类似的字段。 举个例子,tcp 通过 dst_port 交付给上层应用后,该应用如何识别 payload 是 http 或 tls 乃至其他协议
|  |      1shibo501c      2023-03-20 14:59:22 +08:00 via Android 不识别,上层自己识别 | 
|      2Summ2r OP @shibo501c 现在有个需求是抓完包后进行解析,如果是 HTTP 需要解析出类似 StatusCode 的信息,如果是 TLS 解析出 Cipher Suite 和证书等,这就需要根据 application 层是哪个协议交给哪个 function 去处理,现在卡在这里了 | 
|  |      3NewYear      2023-03-20 15:22:53 +08:00 运行在 TCP 下的协议千千万,如何预留字段呢,要预留多长呢,谁去规定好这千千万的协议具体用到了什么标志呢…… 不要想当然啊哥们。 | 
|      4Mithril      2023-03-20 15:59:32 +08:00 @Summ2r 如果只是这俩的话,简单点就靠端口猜,复杂点就靠读一部分 payload 猜。 Wireshark 就是这么干的,实在猜不出来就给你显示个 Data Protocol 。 | 
|      5LinePro      2023-03-20 16:00:59 +08:00 一般来说是拿到 TCP 流的数据以后,根据协议特征去判断,比如 HTTP/1 可以判断响应数据的前四个字节是不是 HTTP 这样。 Wireshark 是开源的,你可以参考看看它是怎么做的。 https://github.com/wireshark/wireshark | 
|  |      6wheat0r      2023-03-20 16:58:28 +08:00 深度包检测? | 
|      7echoechoin      2023-03-20 17:14:39 +08:00 nDPI |