自写sniffer捕捉包转发,头疼中,请高手帮忙分析问题,问题内详
A机器(设192.168.0.1)为监视机器,运行抓包转发程序sniffer_trans,抓包线程抓流经该机器的IP数据包,转发线程转发捕捉到的特定数据包
B机器(设192.168.0.2)为客户机器,运行接收程序sniffer_recv,与A机器上的捕包程序连接,并接收转发来的数据(运行的程序初始为发送一个需要监视的IP给A机器上的捕包程序)如发送192.168.0.3,则A机器上的程序将所有流经其网卡的IP包、源目标地址为192.168.0.1 / 192.168.0.3 、协议为TCP的IP包转发给B机上客户程序存在的问题:
在192.168.0.1上运行一个server_test,在192.168.0.3上运行client_test,然后用client_test批量发送数据,如果发送速度特别快,则192.168.0.2上的sniffer_recv仅能接收到很少的几条,然后就会堵塞在recv函数上,再也接收不到数据,但是192.168.0.1上的sniffer_trans显示发送仍然正常如果发送的很慢就不会存在该问题
请高手帮忙分析一下,是什么问题,我已经给搞得焦头烂额了,
发送与接收数据的代码很少,看来看去没看出哪里出了问题

解决方案 »

  1.   


    这个工具是为了方便分析应用程序报文的,如果你做过sniffer类似程序(不要是玩味的就好),帮忙分析一下代码我的msn: 
    [email protected]
      

  2.   

    已经搞定,关闭聚集算法就好了,还是觉得莫名其妙--------------我觉得是不是因为发的快的时候由于tcp/ip的聚集算法,把几个数据包合并了,客户端可以来进行分割,而你的转发程序只是进行完全的转发,192.168.0.2上的sniffer_recv则因为没有进行分割,而且因为一些判断上的原因,组塞在那里,个人感觉你可以着重看一下sniffer_recv的判断方面的代码
      

  3.   

    Sniffer,猛!
    聚集算法? Nagle算法?