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数据包重建》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

代码之美

代码之美

Grey Wilson / 聂雪军 / 机械工业出版社 / 2008年09月 / 99.00元

《代码之美》介绍了人类在一个奋斗领域中的创造性和灵活性:计算机系统的开发领域。在每章中的漂亮代码都是来自独特解决方案的发现,而这种发现是来源于作者超越既定边界的远见卓识,并且识别出被多数人忽视的需求以及找出令人叹为观止的问题解决方案。 《代码之美》33章,有38位作者,每位作者贡献一章。每位作者都将自己心目中对于“美丽的代码”的认识浓缩在一章当中,张力十足。38位大牛,每个人对代码之美都有自......一起来看看 《代码之美》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具