HTTP数据包重建

栏目: 后端 · 前端 · 发布时间: 5年前

内容简介:如果我有一个大的HTTP数据包已被拆分成多个TCP数据包,我怎样才能将它们重新组合成一个HTTP数据包?基本上,在数据包的哪个位置,我想知道HTTP数据包何时开始/结束?我似乎无法在TCP标头中看到任何表示HTTP数据包开始或结束的标志/字段.编辑:跟进回复.如果TCP管理流,它如何知道流的开始和结束时间?这是由插座开合决定的吗?某些协议在某种程度上必须能够知道HTTP流/数据包何时开始和结束.这就是我想知道的.我所处的情况是我在C#中使用数据包嗅探器读取TCP数据包,我希望能够重建HTTP请求/响应/等.

如果我有一个大的HTTP数据包已被拆分成多个TCP数据包,我怎样才能将它们重新组合成一个HTTP数据包?基本上,在数据包的哪个位置,我想知道HTTP数据包何时开始/结束?我似乎无法在TCP标头中看到任何表示HTTP数据包开始或结束的标志/字段.

编辑:跟进回复.如果TCP管理流,它如何知道流的开始和结束时间?这是由插座开合决定的吗?某些协议在某种程度上必须能够知道HTTP流/数据包何时开始和结束.这就是我想知道的.

我所处的情况是我在C#中使用数据包嗅探器读取TCP数据包,我希望能够重建HTTP请求/响应/等.像wireshark和其他各种嗅探器一样经历界面.或者,是否有任何C#库可以让您在更高级别使用HTTP流,从而节省了我自己重建HTTP流/数据包的麻烦?

谢谢.

好吧,我找到了如何做到这一点(狡猾,但它完成了工作).

剥离以太网,IP和TCP标头很简单,只留下“原始”数据信息.查看消息内部,通过在数据包开头查找“HTTP / 1.1 …”,可以很容易地检测到它是否是HTTP数据包的开始.这表明数据包是HTTP流/更大数据包/无论什么的开始.您还可以执行一些简单的解析来读取“Content-Length”字段,该字段是整个HTTP数据包的总长度.

您还可以使用源/目标IP&端口号,以形成链接的唯一ID.因此,在收到标头包后,请注意这4件事(SRCIP,SRCPORT,DESTIP,DESTPORT).下次收到与此端口/ ip组合匹配的数据包时,您可以检查它是否是HTTP数据包的下一部分.您可以使用序列号进行一些验证,也可能使用其他东西,但通常数据包都是有序的,所以没关系.我认为为每个HTTP流打开了一个新端口,因此您不应该接收不属于流的随机数据包,但这可能是一个容易出错的区域.

无论如何,一旦你收到这个数据包,再次删除标题并获得原始消息.将其添加到消息的已知部分.如果到目前为止收到的总消息长度等于从“Content-Length”字段读取的长度,则数据包完成!

这种方法显然容易出现大量错误,但我并没有采用非常强大的方法.我想我会回答我自己的问题,以防其他人在将来遇到同样的问题!你的嗅闻祝你好运:D

翻译自:https://stackoverflow.com/questions/1529680/http-packet-reconstruction


以上所述就是小编给大家介绍的《HTTP数据包重建》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Elements of Programming

Elements of Programming

Alexander A. Stepanov、Paul McJones / Addison-Wesley Professional / 2009-6-19 / USD 39.99

Elements of Programming provides a different understanding of programming than is presented elsewhere. Its major premise is that practical programming, like other areas of science and engineering, mus......一起来看看 《Elements of Programming》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具