阅读:2311回复:4
在passthru中截获、修改、发送TCP包的问题?
第一步,在passthru的MPSendPackets函数中截获了要发送的TCP包,把它的内容复制到我自己的包中,然后发送出去,没有问题。
第二步,在前一步的基础上,修改新包中的若干字节(包长不变),但是不修改TCP校验和,将其发送出去,仍然没有问题。在目的机器上使用ethereal抓包,发现TCP校验和与原始TCP包中的校验和都不一样,有人说这是因为网卡有硬件计算校验和的功能(TCP checksum offload),所有原始TCP包中的校验和字段都是随机数。 第三步,在新包中增加一些字节,但是仍然不修改TCP校验和,只修改IP报头的长度和校验和,结果目的机器上显示TCP校验和错误!!! 疑问: 如果真的是硬件计算校验和,那么第三次为什么出错? 如果没有硬件计算机校验和,那么第二次问什么正确?而且为什么原始TCP包的校验和与目的机器上该包的校验和不一致,但是目的机器却认为校验和正确? |
|
沙发#
发布于:2007-07-12 19:26
请问,您是如何截获到TCP包的?
我也在MPSendPackets中做截获工作,用NdisQueryBufferSave()之类的函数,包总的字节数总是小于ip报里描述的字节数。 |
|
板凳#
发布于:2007-07-16 10:50
关注中。。。
|
|
地板#
发布于:2007-07-17 17:13
To xcdyjx:
我就是照搬了网上的代码,没有遇到你说的那种情况呀。 |
|
地下室#
发布于:2007-07-20 10:42
引用第0楼nudtsong于2007-07-12 17:17发表的 在passthru中截获、修改、发送TCP包的问题? : LZ,你能说一下怎么修改包吗?不胜感激啊! |
|