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