如何从 C# 中的 TCP 数据包中获取 Http 正文消息

Posted

技术标签:

【中文标题】如何从 C# 中的 TCP 数据包中获取 Http 正文消息【英文标题】:How to get Http Body Message From a TCP packet in C# 【发布时间】:2017-10-21 12:42:49 【问题描述】:

我正在 c# 上开发一个 tcp 侦听器项目。我正在使用 pcap.net 进行数据包捕获。但是当我尝试使用tcp.Http.Decode(Encoding.UTF8) 之类的命令获取http 消息时,我得到了一些加密脚本。我正在收听不使用 SSL 保护的网站。我尝试了tcp.Http.ToMemoryString(),然后使用带有字节的 UTF8 对其进行解码,我可以正确获取 Http 标头,但无法以可读形式获取 HTTP 消息。有什么想法我该怎么做还是我错过了什么?

【问题讨论】:

可以压缩,检查传输编码头 哦,我也用 gzip 和 deflate 尝试过,但也出现了问题。一个幻数错误你知道如何解决它吗? 【参考方案1】:

您应该使用HttpDatagram.Body 属性来获取正文。

这将返回 HTTP 数据包的解析主体部分。

请注意,尽管您正在解析单个数据包,因此您只会从该数据包中获取数据,其中可能不包含整个 HTTP 响应正文。

【讨论】:

我得到了站点的所有数据包,它必须是一个数据,也许一点数据必须在一个数据包中。它看起来像压缩或编码你能帮我吗? 如果不是第一个包,就得先做TCP重构,再解析数据。

以上是关于如何从 C# 中的 TCP 数据包中获取 Http 正文消息的主要内容,如果未能解决你的问题,请参考以下文章

我如何使用BPF定位TCP数据包中的MSS值

C# 使用 tcp/ip 从 Minecraft 服务器获取数据包

如何从 QByteArray 获取结构

从 RTP 数据包中获取 IP 地址和端口

如何使用 java.sql 包中的 rs.getSQLXML() 函数从 Oracle 数据库中获取 XMLType 列?

如何分析wireshark追踪tcp流中的信息