首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi中从缓冲区检测QUIC协议?

在Delphi中从缓冲区检测QUIC协议?
EN

Stack Overflow用户
提问于 2022-05-28 09:08:17
回答 1查看 136关注 0票数 1

我有一个应用程序在德尔菲,监测UDP流量。当使用QUIC协议时,什么是正确的检测方法?我将数据保存在TBytes缓冲区中。

QUIC:https://datatracker.ietf.org/doc/html/rfc9000

EN

回答 1

Stack Overflow用户

发布于 2022-07-26 16:12:42

取决于你所寻找的积极匹配的程度,在“在公园散步”和“有点噩梦”之间的努力是不同的。

QUIC有一个复杂的握手,在此过程中导出加密密钥,然后进入完全加密的应用程序数据阶段。除此之外,该协议还允许在交换期间迁移端点(例如移动设备在wifi和移动数据之间跳转),因此,简单地跟踪IP地址和端口并不能捕获所有信息。

如果您所需要的只是基本检测发起的QUIC连接,那么您所需要做的就是查找初始数据包,这些数据包具有清晰的格式,并且只会被混淆(而不是加密)。

来自RFC9000

代码语言:javascript
复制
17.2.2.  Initial Packet

   An Initial packet uses long headers with a type value of 0x00.  It
   carries the first CRYPTO frames sent by the client and server to
   perform key exchange, and it carries ACK frames in either direction.

   Initial Packet {
     Header Form (1) = 1,
     Fixed Bit (1) = 1,
     Long Packet Type (2) = 0,
     Reserved Bits (2),
     Packet Number Length (2),
     Version (32),
     Destination Connection ID Length (8),
     Destination Connection ID (0..160),
     Source Connection ID Length (8),
     Source Connection ID (0..160),
     Token Length (i),
     Token (..),
     Length (i),
     Packet Number (8..32),
     Packet Payload (8..),
   }

因此,检测quick 1初始数据包的一种快速而肮脏的方法是检查以下内容(psuedocode):

代码语言:javascript
复制
( packet[ 0 ] & 0xf0 ) == 0xc0
packet[ 1 ] == 0x00
packet[ 2 ] == 0x00
packet[ 3 ] == 0x00
packet[ 4 ] == 0x01

如果你想超越这一点,它很快就会变得更加复杂。

我强烈建议下载并运行威雷沙克,并亲自查看它在有线上的样子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72414343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档