![数据包有效载荷中的签名是什么?](https://linux22.com/image/766650/%E6%95%B0%E6%8D%AE%E5%8C%85%E6%9C%89%E6%95%88%E8%BD%BD%E8%8D%B7%E4%B8%AD%E7%9A%84%E7%AD%BE%E5%90%8D%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
数据包有效负载中的签名是什么?为什么它们甚至是必要的?流量分类器也使用签名来检测数据包的协议类型,就像 http 签名和 ftp 签名的正则表达式一样。
答案1
我认为您可能对“签名”一词的使用有过多的解读,因为这些定义(通常是启发式方法)用于各种基于 DPI 的解决方案中,以识别不同的协议。
它实际上只是协议的任何方面,用于识别它是什么,无论协议是否直接说明它是哪种协议,或者它是否有特定的命令或结构可以被识别以将其与其他协议区分开来。
例如,HTTP 1 请求将以类似VERB path HTTP/version
(例如GET /foo HTTP/1.1
)的内容开头。
这基本上表明它是上述两种意义上的 HTTP,它直接说明了 HTTP 版本,但即使 HTTP 的设计并未将协议版本作为请求的一部分,从类似这样的内容来看,它仍然非常明显地GET /foo
看起来很像 HTTP。
对于某些协议,第一条消息不一定能说明问题。例如,SMTP 和 FTP 在服务器的问候消息方面可能看起来相似220 stuff about the server
(“有关服务器的内容”部分通常会说明它是什么,但可能会更嘈杂且可能不清楚),但是客户端会立即通过说EHLO host
(或可能HELO host
)来表明它是 SMTP,而 FTP 客户端会说USER myuser
等等(可能需要查看 FTP 案例的更多对话才能正确将其与其他内容区分开来)。
当然,如果您谈论的是某种通过 TLS 隧道传输的协议(例如 HTTPS),那么所有常规观察者(不是 TLS 端点)都会识别出此处讨论的 TLS 协议本身(可能只是:传输的第一件事是客户端发送 TLS clienthello 消息)。除非您实际上可以访问内部的有效负载,否则您需要依赖其他提示来了解内部可能存在的内容(例如,可能是端口号)。
值得注意的是,对于许多协议来说,端口号通常已经正确识别了它是哪种协议。你所说的方法是一种通过查看有效负载来识别/确认协议的方法,无论使用哪个端口号。