V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Summ2r
V2EX  ›  问与答

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

  •  
  •   Summ2r · 2023-03-20 14:52:13 +08:00 · 1145 次点击
    这是一个创建于 395 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    不要想当然啊哥们。
    Mithril
        4
    Mithril  
       2023-03-20 15:59:32 +08:00
    @Summ2r 如果只是这俩的话,简单点就靠端口猜,复杂点就靠读一部分 payload 猜。
    Wireshark 就是这么干的,实在猜不出来就给你显示个 Data Protocol 。
    LinePro
        5
    LinePro  
       2023-03-20 16:00:59 +08:00
    一般来说是拿到 TCP 流的数据以后,根据协议特征去判断,比如 HTTP/1 可以判断响应数据的前四个字节是不是 HTTP 这样。
    Wireshark 是开源的,你可以参考看看它是怎么做的。
    https://github.com/wireshark/wireshark
    wheat0r
        6
    wheat0r  
       2023-03-20 16:58:28 +08:00
    深度包检测?
    echoechoin
        7
    echoechoin  
       2023-03-20 17:14:39 +08:00
    nDPI
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4429 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:05 · PVG 09:05 · LAX 18:05 · JFK 21:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.