关于NdisSend发送数据包的流量统计

iboy   2008-4-10 16:48 楼主
  1.        
  2. MPSendPackets(){
  3. ....
  4.                        pAdapt->nTotalPacketsSeen[pVElan->NetworkConnection]++;
  5.                         // If the VElan sending the packet does not correspond to the currently
  6.                         // active connection, then buffer packets, else send them
  7.                         if (pVElan->NetworkConnection == pAdapt->CurrentActiveConnection &&
  8.                                 pAdapt->isSSIDActive[pAdapt->CurrentActiveConnection])
  9.                         {
  10.                                 DBGPRINT(MUX_LOUD, ("Sending Packet since SSID is active\n"));
  11.                                 //
  12.                                 // Make note of the upcoming send.
  13.                                 //
  14.                                 MUX_INCR_PENDING_SENDS(pVElan);

  15.                                 //
  16.                                 // Send it to the lower binding.
  17.                                 //
  18.                                 NdisSend(&Status,
  19.                                                 pAdapt->BindingHandle,
  20.                                                 MyPacket);

  21.                                 if (Status != NDIS_STATUS_PENDING)
  22.                                 {
  23.                                         PtSendComplete((NDIS_HANDLE)pAdapt,
  24.                                                                 MyPacket,
  25.                                                                 Status);
  26.                                 }
  27.                         }
  28.                         else
  29.                         {
  30.                
  31.                                 if(pAdapt->isSSIDToBeRemoved[pVElan->NetworkConnection] == SET_SSID_TO_BE_REMOVED){
  32.                                         DBGPRINT(MUX_LOUD,("@@ Throw the packets since isToBeRemoved values is %s @@\n", pAdapt->isSSIDToBeRemoved[pVElan->NetworkConnection]));
  33.                                 }else{
  34.                                 // Buffer the packet since adapter is in a different network
  35.                                 DBGPRINT(MUX_LOUD, ("@@Queueing Packet since SSID is NOT active\n"));

  36.                                 InsertTailQueue(&pAdapt->SendWaitQueue[pVElan->NetworkConnection], MP_GET_PACKET_MR(MyPacket));
  37.                                 pAdapt->nWaitSend[pVElan->NetworkConnection]++;
  38.                                 }
  39.                         }
  40. ........}

这里nTotalPacketsSeen统计了要发送数据包的个数。
上面的程序就是判断当前连接是否激活的,如果是发送数据包,不是的话,缓存数据包。
NdisSend一次只能一个数据包,对吧?
现在我想统计从本机器发送数据包到另外一台机器来测试程序运行是否正确。
可是我发现即使你还没有开始发送真正的数据包,程序还是会调用这些代码做一些比如ICMP的信息的交换(我猜的),这也要调用MPSendPackets()来发送数据。
所以这样就很难统计到底发送了多少个真正要发送的数据包了....程序就很难测试了。郁闷当中。求救!
还有什么软件可以测试当前网卡接收或者发送了多少个数据包呢?谢谢!!

回复评论 (3)

sniffer pro.软件去研究一下
点赞  2008-4-10 17:07
哦,我在用microsoft monitor?
有人帮忙?
点赞  2008-4-12 08:39
do me a favor! please
点赞  2008-4-15 21:08
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复