TCP测试真够麻烦的……

没有合适的工具,只有文字描述的一些测试用例。

要测TCP,大多数情况下要建立起一个正常的TCP连接,然后在这个连接上发送一些测试数据,当然这些数据包括正确的和有问题的,然后看对方返回过来的报文是否符合协议规定的。

不过要发送的错误报文主要的是对TCP头部的某些字段人为地设置一些错误的数据。所以,一般情况下最方便的通过Windows Socket API的方法显然不可行,因为没办法很好的控制头部结构中的数据。

现在手头有一个别人做的Packet Gernerator,这东西是用来发送数据包的,使用的是WinPCap,所以能设置各个层次中的头部数据。不过问题是对于建立一条TCP连接而言,需要通过对方回复过来的报文来得到对方初始的Sequence Number,这个数据是无法预测的,所以也就没办法通过这个发包工具来手动建立一条连接了。

本来考虑通过Raw Socket接口,自己构造IP头和TCP头,然后先发送SYN报文,再等接收到对方回复的SYN、ACK报文之后,根据该报文的内容来构造建立连接的最后一个ACK报文。似乎从思路上没有问题,不过实际测试下来就发现问题了:系统内核也会收到对方发回来的SYN、ACK报文,于是在我构造好ACK报文之前,系统中的协议栈会对收到的这个SYN、ACK报文回复一个RST报文,这样,我辛辛苦苦构造好的ACK报文就白发了……

发现了这个问题之后,四处寻找解决方案,在Winsocket的文档里没找到如何让系统内核不干扰我的程序的方法。现在基本上只有一条路了,就是用WinPCap来实现我想要的目的。因为考虑WinPCap能够在底层网卡上截获报文,也许就能够让该报文不发送到系统协议栈,或者在系统协议栈对该报文做出响应之前发送出我的报文。不过这里还是有问题,就是不能确定第一个方法能否实现,也就是不知道WinPCap能不能做到该功能。而对于第二种方法,也有2个问题,其一是不知道能不能赶在系统的报文发送之前发送我的报文,其二就是如果建立起连接了,再收到一个RST报文,会不会将连接中断掉呢?(按照我的想法,应该会打断掉该连接的。因为ACK报文不占用序列号,于是我发的ACK和系统发的RST中的ACK Num对于对方来说都是有效的,无论哪个在先,这样就会将已经建立的连接RST。)

真是问题多多啊!

具体的明天去试试看吧,试了就知道结果了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值