WINDOWS下利用QOS实现流量控制

您所在的位置:网站首页 限流量的软件 WINDOWS下利用QOS实现流量控制

WINDOWS下利用QOS实现流量控制

2023-12-27 17:35| 来源: 网络整理| 查看: 265

/******************************************************************

* 函数介绍:限制一个Connection的网络流量

* 输入参数:nProtocol:要限制流量的协议类型

            pzSrcIp:源IP

                    nSrcPort:源端口

                    pzDstIp:目标IP

                    nDstPort:目标端口

                    nTraffic:限制流量

* 输出参数:

* 返回值  :成功返回0;失败返回错误码

*******************************************************************/

注意:设置网段流量限制的函数和这个函数大体相同

int CTrafficControl::AddTrafficControl(

                                                                     int nProtocol,

                                                                     const char *pzSrcIp,

                                                                     const int nSrcPort,

                                                                     const char *pzDstIp,

                                                                     const int nDstPort,

                                                                     int nTraffic

                                                                 )

{

      HANDLE   ClientHandle;  

      HANDLE   ifcHandle;  

      HANDLE   flowHandle;  

      HANDLE   FilterHandle;

 

   // QOS函数列表,处理各种事件通知回调函数

      TCI_CLIENT_FUNC_LIST   QoSFunctions;  

      QoSFunctions.ClAddFlowCompleteHandler   =   NULL;  

      QoSFunctions.ClDeleteFlowCompleteHandler   =   NULL;

      QoSFunctions.ClModifyFlowCompleteHandler   =   NULL;  

      QoSFunctions.ClNotifyHandler  = (TCI_NOTIFY_HANDLER)MyClNotifyHandler;

     

      // 注册Client,获取Client句柄

      long   result   =   TcRegisterClient(CURRENT_TCI_VERSION,   NULL,   &QoSFunctions   ,   &ClientHandle);

      if( NO_ERROR != result )

      {

             //cout

             //cout TcObjectsLength   =   sizeof(QOS_DS_CLASS)   +   sizeof(QOS_TRAFFIC_CLASS)   +   sizeof(QOS_OBJECT_HDR);  

       

      LPQOS_DS_CLASS   pQOSClass   =   (LPQOS_DS_CLASS)(&(newFlow-> TcObjects[0])   );

      pQOSClass-> ObjectHdr.ObjectType   =   QOS_OBJECT_DS_CLASS;

      pQOSClass-> ObjectHdr.ObjectLength   =   sizeof(QOS_DS_CLASS);

      pQOSClass-> DSField   =   0x24;

      LPQOS_TRAFFIC_CLASS   pTRClass   =   (LPQOS_TRAFFIC_CLASS)((char*)&(newFlow-> TcObjects[0])+   sizeof(QOS_DS_CLASS));

      pTRClass-> ObjectHdr.ObjectType   =   QOS_OBJECT_TRAFFIC_CLASS;

      pTRClass-> ObjectHdr.ObjectLength   =   sizeof(QOS_TRAFFIC_CLASS);

      pTRClass-> TrafficClass   =   0x3;

      objHdr   =   (LPQOS_OBJECT_HDR)((char *)&(newFlow-> TcObjects[0])   +   sizeof(QOS_DS_CLASS)   +   sizeof   (QOS_TRAFFIC_CLASS));

      objHdr-> ObjectType   =   QOS_OBJECT_END_OF_LIST;

      objHdr-> ObjectLength   =   sizeof(QOS_OBJECT_HDR);

   // 添加Flow到打开的接口中。

   // 注意,FlowSpec设置错误会导致这里添加失败。相关规则请参见MSDN中FLOWSPEC的解释

      result = TcAddFlow( ifcHandle,   /*ClientHandle*/NULL,   0,   newFlow,   &flowHandle   );

      if( NO_ERROR != result )

      {

             //cout



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3