在内核模式下打开win-socket(tcp)指定序列号

时间:2010-08-05 19:20:19

标签: c windows sockets kernel

我正在编写一个Windows驱动程序(当然是在c中我处于内核模式)并且我想从外部打开一个tcp套接字,指定第一个SYN数据包应该具有的序列号。

我尝试使用Windows过滤平台修改过滤它的数据包,但当然它不起作用,因为堆栈认为正确的数字是原始数字,而接收者的堆栈认为正确的数字被修改为。

我正在寻找一些想法: OpenSocket(...,UINT32 seqNum,UINT16 winSize) 或任何等价物。

有办法做到这一点吗?

谢谢, 马可

1 个答案:

答案 0 :(得分:0)

看起来像是一件奇怪的事情,但如果您的过滤器可以修改传入和传出的数据包,那么它可以在两个方向上修复序列号。

只需计算出原始序列号的偏移量。然后,您可以将其添加到传出数据包的序列号中,并从传入数据包的确认号中减去它。

会话的每一方都得到了他们所期望的,即使他们对预期的内容存在分歧。