求可以统计网络流量的VC代码,就象是金山网镖下面的那样

本文提供了一个使用VC++实现网络流量统计的方法,通过调用GetAdaptersInfo和GetIfEntry等API来获取网络接口信息和流量数据,展示了如何显示适配器名称、类型、IP地址、网关列表及收发数据包数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

求可以统计网络流量的VC代码,就象是金山网镖下面的那样。。接收××K,发送××K,那种,会的千万帮忙阿。。。。 
现在作个东西,需要统计现在的网络流量。是累加的,在VC++中实现 
希望高手帮忙,谢谢了 
--------------------------------------------------------------- 
 
winpcap有个统计模式,可以很好解决你的问题 
--------------------------------------------------------------- 
 
BOOL  Network() 

           DWORD                          dwIndex; 
           DWORD                          dwNumber; 
           DWORD                          dwResult; 
           ULONG                          OutBufLen; 
           IP_ADAPTER_INFO      AdapterInfo; 
       PIP_ADDR_STRING      pAddrString; 
               PIP_ADAPTER_INFO    pAdapterNext; 
           MIB_IFROW                  IfRow; 
 
           OutBufLen  =  sizeof(IP_ADAPTER_INFO); 
           dwResult    =  GetAdaptersInfo(&AdapterInfo,&OutBufLen); 
           if(dwResult  ==  ERROR_BUFFER_OVERFLOW) 
           { 
                       GetAdaptersInfo(&AdapterInfo,&OutBufLen); 
           } 
           else  if            (dwResult  !=  ERROR_SUCCESS) 
           { 
                       printf("GetAdaptersInfo  Error:  %d/n",GetLastError()); 
                       return  FALSE; 
           } 
 
           printf("/t/t===  Network  Interface  ===/n/n"); 
           pAdapterNext  =  &AdapterInfo; 
           while(pAdapterNext  !=  NULL) 
           { 
                       printf("AdapterName:/t    %s/n",pAdapterNext->AdapterName); 
                       printf("Description:/t    %s/n",pAdapterNext->Description); 
                       dwIndex  =  pAdapterNext->Index; 
                       printf("Address:/t    "); 
               for(dwNumber  =  0;dwNumber  <  pAdapterNext->AddressLength  -  1;  dwNumber++) 
                       { 
                                   printf("%.2X-",pAdapterNext->Address[dwNumber]); 
                       } 
                       printf("%.2X/n",pAdapterNext->Address[dwNumber]); 
 
                       printf("Type:/t/t    "); 
                       switch(pAdapterNext->Type) 
                       { 
                       case  MIB_IF_TYPE_OTHER: 
                                   printf("Other/n"); 
                                   break; 
                       case  MIB_IF_TYPE_ETHERNET: 
                                   printf("Ethernet/n"); 
                                   break; 
                       case  MIB_IF_TYPE_FDDI: 
                                   printf("FDDI/n"); 
                                   break; 
                       case  MIB_IF_TYPE_PPP: 
                                   printf("PPP/n"); 
                                   break; 
                       case  MIB_IF_TYPE_LOOPBACK: 
                                   printf("LoopBack/n"); 
                                   break; 
                       case  MIB_IF_TYPE_SLIP: 
                                   printf("Slip/n"); 
                                   break; 
                       default: 
                                   printf("/n"); 
                                   break; 
                       } 
 
                       printf("IpAddressList:/t    %s/t/t%s/n","IP  Address","Subnet  Mask"); 
                       pAddrString  =  &pAdapterNext->IpAddressList; 
                       while(pAddrString  !=  NULL) 
                       { 
                                   printf("/t/t    %-15s/t",pAddrString->IpAddress.String); 
                                   printf("%s/n",pAddrString->IpMask.String); 
                                   pAddrString  =  pAddrString->Next; 
                       } 
 
                       pAddrString  =  &pAdapterNext->GatewayList; 
                       printf("GatewayList:/t    %s/n",pAddrString->IpAddress.String); 
                       pAddrString  =  pAddrString->Next; 
                       while(pAddrString  !=  NULL) 
                       { 
                               printf("/t/t    %s/n",pAddrString->IpAddress.String); 
                                 pAddrString  =  pAddrString->Next; 
                       } 
 
                       if(pAdapterNext->DhcpEnabled  !=  0) 
                       { 
                                   printf("DhcpServer:/t    %s/n",pAdapterNext->DhcpServer.IpAddress.String); 
                                   pAddrString  =  pAdapterNext->DhcpServer.Next; 
                                   while(pAddrString  !=  NULL) 
                                   { 
                                               printf("/t/t/t    %s/n",pAddrString->IpAddress); 
                                               pAddrString  =  pAddrString->Next; 
                                   } 
                       } 
 
                       if(pAdapterNext->HaveWins  !=  0) 
                       { 
                                   printf("PrimaryWinsSvr:      %s/n",pAdapterNext->PrimaryWinsServer); 
                                   printf("SecondaryWinsSvr:  %s/n",pAdapterNext->SecondaryWinsServer); 
                       } 
 
                       printf("LeaseObtained:/t    %s",asctime(gmtime(&pAdapterNext->LeaseObtained))); 
                       printf("LeaseExpires:/t    %s/n",asctime(gmtime(&pAdapterNext->LeaseExpires))); 
 
                       IfRow.dwIndex  =  dwIndex; 
                       if((dwResult    =  GetIfEntry(&IfRow))  !=  NO_ERROR) 
                       { 
                                   printf("GetIfEntry  Error:  %d/n",dwResult); 
                                   break; 
                       } 
 
                       printf("MTU:/t/t    %d/n",IfRow.dwMtu); 
                       printf("Speed:/t/t    %d  Kbps/n",IfRow.dwSpeed/1000); 
                       printf("OperStatus:/t    "); 
                       switch(IfRow.dwOperStatus) 
                       { 
                       case  MIB_IF_OPER_STATUS_NON_OPERATIONAL: 
                                   printf("LAN  Adapter  Disabled/n"); 
                                   break; 
                       case  MIB_IF_OPER_STATUS_UNREACHABLE: 
                                   printf("WAN  Adapter  Disconnected/n"); 
                                   break; 
                       case  MIB_IF_OPER_STATUS_DISCONNECTED: 
                                   printf("LAN  Adapters  Disconnected  or  WAN  Adapters  no  Carrier/n"); 
                                   break; 
                       case  MIB_IF_OPER_STATUS_CONNECTING: 
                                   printf("WAN  Adapter  Connecting/n"); 
                                   break; 
                       case  MIB_IF_OPER_STATUS_CONNECTED: 
                                   printf("WAN  Adapter  Connected/n"); 
                                   break; 
                       case  MIB_IF_OPER_STATUS_OPERATIONAL: 
                                   printf("LAN  Adapter  Default  Status/n"); 
                                   break; 
                       default: 
                                   printf("/n"); 
                                   break; 
                       } 
                       printf("Unknown  Protocol:  %d/n/n",IfRow.dwInUnknownProtos); 
 
                       printf("/t%12s%12s%10s/t%s/n","Unicast","NUnicast","Error","Bytes"); 
                       printf("%s/t%12d%12d%10d/t%d/n","Send:",IfRow.dwOutUcastPkts,IfRow.dwOutNUcastPkts,IfRow.dwOutErrors,IfRow.dwOutOctets); 
                       printf("%s%12d%12d%10d/t%d/n","Receive:",IfRow.dwInUcastPkts,IfRow.dwInNUcastPkts,IfRow.dwInErrors,IfRow.dwInOctets); 
                       printf("%s/t%12d%12d%10d/t%d/n","Total:", 
                                         IfRow.dwInUcastPkts    +  IfRow.dwOutUcastPkts, 
                                         IfRow.dwInNUcastPkts  +  IfRow.dwOutNUcastPkts, 
                                         IfRow.dwInErrors          +  IfRow.dwOutErrors, 
                                         IfRow.dwInOctets          +  IfRow.dwOutOctets); 
                        
                       pAdapterNext  =  pAdapterNext->Next; 
           } 
 
           return  TRUE; 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值