jer*_*ams 5 networking tcp http winpcap visual-c++
我现在正在使用winpcap开发一个项目.我知道被嗅探的数据包通常是碎片数据包.
如何重新组合这个TCP segements?..任何想法,建议或教程可用吗?..
我假设这是我可以查看HTTP标头的唯一方法...
谢谢!..
没有TCP片段这样的东西.IP协议有片段.TCP是一种流协议.您可以按照两侧的序列号将流组合到其预期的顺序.每个TCP数据包都进入IP级别,并且可以在那里进行分段.您可以通过收集所有片段并跟踪从头部开始的片段偏移来组装每个数据包.
您需要的所有信息都在标题中.维基百科文章在解释每个字段的内容时非常有用
http://en.wikipedia.org/wiki/TCP_header#Packet_structure
http://en.wikipedia.org/wiki/IPv4#Header
tcp是字节流协议.http应用程序发送的字节序列封装在tcp数据段中,并在将数据传送到另一端的应用程序之前重新创建字节流.由于您使用winpcap访问tcp数据集,因此需要转到该段的数据部分.tcp的标头有一个20字节的固定长度+一个你需要使用winpcap api确定的可选部分.
tcp段中数据部分的长度是通过从总长度中减去tcp头长度(从tcp段中的字段获得)和ip头长度(来自封装tcp段的ip数据报中的字段)来确定的. (从ip数据报中的另一个字段获得).
所以现在你有了段的总段长度和数据部分的长度.所以你知道http请求数据开始的偏移量.
偏移是
total length-length of data part
or
length of ip-header + length of tcp header
Run Code Online (Sandbox Code Playgroud)
我没有用过winpcap.所以你必须找出如何使用api获取这些字段.
ip datagrams可能会进一步碎片化,但我希望你只使用这个api提供重新组装的数据报.你已准备好出发!