阅读:2251回复:5
(已解决)求助:根据passthru修改的程序无法发tcp包
我根据passthru修改的包过滤程序,主要是过滤发送的包。因此我另外创建一个系统线程,把要发送的包插入一个
队列中,然后系统线程就从队列里取报文,修改完报文就发送出去,开始一直好好地,就是用了一段时间后发现无法 上网了,但是我发现只是tcp包发布出去,udp包比如qq都是可以连接上的,即使把驱动卸载、网卡禁用再启用也无法解决 这种情况,只有重启电脑(虚拟机)才行。我感觉肯定是什么资源耗尽了,但是为什么udp报文却可以发出去呢?难道是 tcp的什么资源?请各位指教。 |
|
|
沙发#
发布于:2011-12-19 15:46
用sniffer看看封包
|
|
板凳#
发布于:2011-12-20 10:50
已经用wireshark抓包看过了,发现在根本就发不出tcp报文,但是udp可以。然后我用一个发包工具xcap做了一个tcp的syn包,发现可以发出去,
抓包也抓到了,这说明很可能是上层的tcp资源耗尽了。之后我用flashfxp(ftp客户端)连接了一个ftp服务器,立马出现连接错误:bind 0.0.0.0 错误 :10055 无缓冲空间可用,请问这是什么原因? |
|
|
地板#
发布于:2011-12-20 12:12
发送完,通知上层数据不再使用
|
|
|
5楼#
发布于:2011-12-20 17:49
最后定位到在函数NtDuplicateObject,在使用该函数得到目的句柄后,在返回时应该使用
zwclose(outhandle)把该句柄关掉。不然就导致标记为TCPA的内存不断泄露。 |
|
|