绝对挑战问题--如何要求网络数据包等待(先300,要多少分您只管开口) ( 积分: 300 )

  • 主题发起人 主题发起人 sim_might
  • 开始时间 开始时间
S

sim_might

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟开发一个网络流量控制软件。抓包,拦截等代码已经开发完成。现在没当一个数据包要收发都要由我的程序来调用具体的收发函数。但关键是,如果我的程序要求某个用户等待,我应该怎样控制返回。
我看MSDN提到,WSAEINTR是中断。我让被控制终端的Send 和Recv返回WSAEINTR。结果报错为,从未失败的调用失败。那么我是否可以通过某个返回来要求它等待呢?
 
小弟开发一个网络流量控制软件。抓包,拦截等代码已经开发完成。现在没当一个数据包要收发都要由我的程序来调用具体的收发函数。但关键是,如果我的程序要求某个用户等待,我应该怎样控制返回。
我看MSDN提到,WSAEINTR是中断。我让被控制终端的Send 和Recv返回WSAEINTR。结果报错为,从未失败的调用失败。那么我是否可以通过某个返回来要求它等待呢?
 
有高手救我吗?我拦截是使用的SPI。可以直接对调用者的RECV和SEND返回。
 
就在你的Send或者Recv函数内处理,spi的函数调用是串行处理的,这个跟irp在驱动里的传递很象。我认为SPI的功能太弱,只能监控到socket通讯的程序,对于raw socket等spi层以下的数据监控就无能为力了,建议你用TDI或者NDIS层的驱动,这个现在有很多公开的代码,费尔防火墙1-2的代码网上都有。
 
不懂,只有顶哈
 
TO 爱元元的哥哥:
怎么在Send或者Recv函数内呢?
比如说,在我的Send 里面,判断出现在这个请求要等3秒,直接Sleep(3000)吗?
 
使用NDIS编写起来可能比较麻烦!并且需要了解DDK的编程。
我记得TCP/IP协议中有一个滑动窗口协议,你看看当窗口设置为0的时候用户端就会等待的!(好像记得就是这样)。
 
我个人认为没有这么复杂,你要控制流量,你不去调用Recv或者recvfrom,数据就会堵塞得缓冲区,你的速度也 就会得到控制, 如果是TCP,他就会自动控制传输.如果是UDP,你就看对方得程序得数据发送模式了.
 
我不知道我的想法是不是正确,说出来不要笑我。就比如我们现实生活中公路一样,如果公路太窄了,比如一个车道,那是不是就可能等待了呢?因为道路窄啊。同样的道理,如果我们控制了网络的带宽,也就是某个应用程序使用网络的带宽,那就解决问题了。大家一定用过serv-u这个软件吧,它可以控制下载速率是多少,我想可以借鉴一下它的实现方法。
 

Similar threads

后退
顶部