好心的高手帮帮忙啊:// BandWidthControl.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//#include "stdafx.h"
#include <winsock2.h>
#include <ws2tcpip.h>
#include <qos.h>
#include <ntddndis.h>
#include <traffic.h>
#include <Qossp.h>
#include <tcerror.h>
#include<STDIO.H>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"Traffic.lib")void MyClNotifyHandler( HANDLE ClRegCtx,HANDLE ClIfcCtx,ULONG Event,HANDLE SubCode,ULONG BufSize,PVOID Buffer )
{
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD destPort;
PCHAR destAddress;
destAddress="172.18.62.34"; //IP_ADDRESS;
destPort = 0x50;//5000;
int err;
WSADATA WSAData;
err = WSAStartup(MAKEWORD(2,2), &WSAData);
if (err) {
printf("WSAStartup Failed (%d) Exiting\n", err);
exit(err);
}
HANDLE ClientHandle;
HANDLE ifcHandle;
HANDLE flowHandle;
HANDLE FilterHandle;
TCI_CLIENT_FUNC_LIST QoSFunctions;
QoSFunctions.ClAddFlowCompleteHandler = NULL;
QoSFunctions.ClDeleteFlowCompleteHandler = NULL;
QoSFunctions.ClModifyFlowCompleteHandler = NULL;
QoSFunctions.ClNotifyHandler = (TCI_NOTIFY_HANDLER)MyClNotifyHandler;
long result = TcRegisterClient(CURRENT_TCI_VERSION, NULL, &QoSFunctions , &ClientHandle);
if (result == NO_ERROR) {
printf("no error TcRegisterClient.\n");
TC_IFC_DESCRIPTOR InterfaceBuffer[40];
PTC_IFC_DESCRIPTOR pInterfaceBuffer = &InterfaceBuffer[0];
ULONG BufferSize = 40* sizeof(TC_IFC_DESCRIPTOR);
result = TcEnumerateInterfaces(ClientHandle, &BufferSize, pInterfaceBuffer);
if (result == NO_ERROR) {
printf("no error TcEnumerateInterfaces \n" );
if (BufferSize == 0) {
printf("no traffic control interfaces are available\n");
}
TCHAR interfaceName[500];
WideCharToMultiByte(CP_ACP,0,InterfaceBuffer[0].pInterfaceName, -1,(LPSTR)interfaceName, sizeof(interfaceName), 0, 0 );
result = TcOpenInterface( interfaceName, ClientHandle, NULL, &ifcHandle );
if( result == NO_ERROR ) {
printf("no error OpenInterfaces.\n");
int curSize = sizeof(TC_GEN_FLOW) + sizeof(QOS_DS_CLASS) + sizeof(QOS_TRAFFIC_CLASS) + sizeof(QOS_OBJECT_HDR);
char *bufFlow = new char[curSize];
PTC_GEN_FLOW newFlow = ( PTC_GEN_FLOW )bufFlow;
LPQOS_OBJECT_HDR objHdr = NULL;
newFlow->ReceivingFlowspec.DelayVariation = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.Latency = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.MaxSduSize = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.MinimumPolicedSize = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.PeakBandwidth = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.ServiceType =QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.TokenBucketSize = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.TokenRate = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.DelayVariation = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.Latency = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.MaxSduSize = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.MinimumPolicedSize = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.PeakBandwidth = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.ServiceType =SERVICETYPE_BESTEFFORT;
newFlow->SendingFlowspec.TokenBucketSize = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.TokenRate = QOS_NOT_SPECIFIED;
newFlow->TcObjectsLength = sizeof(QOS_DS_CLASS) + sizeof(QOS_TRAFFIC_CLASS) + sizeof(QOS_OBJECT_HDR);
[CHAIRAT Youssef - EXT]
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);
int retCode = TcAddFlow( ifcHandle, /*ClientHandle*/NULL, 0, newFlow, &flowHandle );
if(retCode == NO_ERROR) {
printf("no error TcAddFlow\n");
}
TC_GEN_FILTER GenericFilter;
IP_PATTERN Pattern, Mask;
memset(&Pattern,0,sizeof(IP_PATTERN));
memset(&Mask,0,sizeof(IP_PATTERN));
GenericFilter.AddressType = NDIS_PROTOCOL_ID_TCP_IP;
GenericFilter.PatternSize = sizeof(IP_PATTERN);
GenericFilter.Pattern = &Pattern; // pattern to match, defined below
GenericFilter.Mask = &Mask;
// Filter pattern.
Pattern.Reserved1 = 0;
Pattern.Reserved2 = 0;
Pattern.SrcAddr = 0;//inet_addr("172.18.100.38");
Pattern.DstAddr = 0;//inet_addr(destAddress);
Pattern.tcSrcPort = 0;//htons(0);
Pattern.tcDstPort = htons(0x50);//destPort;
Pattern.ProtocolId = 0;//IPPROTO_UDP;
Pattern.Reserved3[0] = 0;
Pattern.Reserved3[1] = 0;
Pattern.Reserved3[2] = 0;
// Patterns mask
Mask.Reserved1 = 0;
Mask.Reserved2 = 0;
Mask.SrcAddr = 0;//htonl(0xFFFFFFFF);
Mask.DstAddr = 0;//htonl(0xFFFFFFFF);
Mask.tcSrcPort = 0;//htons(0);//0xFFFF;
Mask.tcDstPort = htons(0xFFFF);
Mask.ProtocolId = 0xFF;
Mask.Reserved3[0] = 0;
Mask.Reserved3[1] = 0;
retCode = TcAddFilter(flowHandle, &GenericFilter, &FilterHandle);
if(retCode == NO_ERROR) {
printf("no error TcAddFilter.\n");
}
// UDP MULTICAST
SOCKET hSocket = socket(AF_INET,SOCK_DGRAM,0);
if (hSocket == INVALID_SOCKET) {
err = GetLastError();
printf("\"Socket\" failed with error %d\n", err);
return 1;
}
SOCKADDR add;
SOCKADDR_IN addr_dest;
addr_dest.sin_family = AF_INET;
addr_dest.sin_addr.s_addr = inet_addr(GROUP_ADDR);
addr_dest.sin_port = htons(0x50);
IN_ADDR interfaceAddr;
interfaceAddr.S_un.S_un_b.s_b1 = 204;
interfaceAddr.S_un.S_un_b.s_b2 = 1;
interfaceAddr.S_un.S_un_b.s_b3 = 1;
interfaceAddr.S_un.S_un_b.s_b4 = 148;
unsigned char ttl = 1;
setsockopt(hSocket , IPPROTO_IP, IP_MULTICAST_TTL, (char *)&ttl, sizeof(ttl));
setsockopt(hSocket,IPPROTO_IP,IP_MULTICAST_IF,(const char *)&interfaceAddr, sizeof(interfaceAddr));
sendto( hSocket, "TEST QOS Milticast", 20 , 0, (sockaddr*)&addr_dest,sizeof(SOCKADDR_IN));
result = TcDeleteFilter(FilterHandle);
if (result == NO_ERROR) {
printf("no error TcDeleteFilter\n");
}
result = TcDeleteFlow(flowHandle);
if (result == NO_ERROR) {
printf("no error TcCloseInterface\n");
}
result = TcDeregisterClient(ClientHandle);
if (result == NO_ERROR) {
printf("no error TcDeregisterClient\n");
}
shutdown(hSocket, SD_BOTH);
closesocket(hSocket);
WSACleanup();
return 0;
}
}
}
return 0;
}
//#include "stdafx.h"
#include <winsock2.h>
#include <ws2tcpip.h>
#include <qos.h>
#include <ntddndis.h>
#include <traffic.h>
#include <Qossp.h>
#include <tcerror.h>
#include<STDIO.H>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"Traffic.lib")void MyClNotifyHandler( HANDLE ClRegCtx,HANDLE ClIfcCtx,ULONG Event,HANDLE SubCode,ULONG BufSize,PVOID Buffer )
{
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD destPort;
PCHAR destAddress;
destAddress="172.18.62.34"; //IP_ADDRESS;
destPort = 0x50;//5000;
int err;
WSADATA WSAData;
err = WSAStartup(MAKEWORD(2,2), &WSAData);
if (err) {
printf("WSAStartup Failed (%d) Exiting\n", err);
exit(err);
}
HANDLE ClientHandle;
HANDLE ifcHandle;
HANDLE flowHandle;
HANDLE FilterHandle;
TCI_CLIENT_FUNC_LIST QoSFunctions;
QoSFunctions.ClAddFlowCompleteHandler = NULL;
QoSFunctions.ClDeleteFlowCompleteHandler = NULL;
QoSFunctions.ClModifyFlowCompleteHandler = NULL;
QoSFunctions.ClNotifyHandler = (TCI_NOTIFY_HANDLER)MyClNotifyHandler;
long result = TcRegisterClient(CURRENT_TCI_VERSION, NULL, &QoSFunctions , &ClientHandle);
if (result == NO_ERROR) {
printf("no error TcRegisterClient.\n");
TC_IFC_DESCRIPTOR InterfaceBuffer[40];
PTC_IFC_DESCRIPTOR pInterfaceBuffer = &InterfaceBuffer[0];
ULONG BufferSize = 40* sizeof(TC_IFC_DESCRIPTOR);
result = TcEnumerateInterfaces(ClientHandle, &BufferSize, pInterfaceBuffer);
if (result == NO_ERROR) {
printf("no error TcEnumerateInterfaces \n" );
if (BufferSize == 0) {
printf("no traffic control interfaces are available\n");
}
TCHAR interfaceName[500];
WideCharToMultiByte(CP_ACP,0,InterfaceBuffer[0].pInterfaceName, -1,(LPSTR)interfaceName, sizeof(interfaceName), 0, 0 );
result = TcOpenInterface( interfaceName, ClientHandle, NULL, &ifcHandle );
if( result == NO_ERROR ) {
printf("no error OpenInterfaces.\n");
int curSize = sizeof(TC_GEN_FLOW) + sizeof(QOS_DS_CLASS) + sizeof(QOS_TRAFFIC_CLASS) + sizeof(QOS_OBJECT_HDR);
char *bufFlow = new char[curSize];
PTC_GEN_FLOW newFlow = ( PTC_GEN_FLOW )bufFlow;
LPQOS_OBJECT_HDR objHdr = NULL;
newFlow->ReceivingFlowspec.DelayVariation = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.Latency = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.MaxSduSize = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.MinimumPolicedSize = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.PeakBandwidth = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.ServiceType =QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.TokenBucketSize = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.TokenRate = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.DelayVariation = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.Latency = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.MaxSduSize = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.MinimumPolicedSize = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.PeakBandwidth = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.ServiceType =SERVICETYPE_BESTEFFORT;
newFlow->SendingFlowspec.TokenBucketSize = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.TokenRate = QOS_NOT_SPECIFIED;
newFlow->TcObjectsLength = sizeof(QOS_DS_CLASS) + sizeof(QOS_TRAFFIC_CLASS) + sizeof(QOS_OBJECT_HDR);
[CHAIRAT Youssef - EXT]
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);
int retCode = TcAddFlow( ifcHandle, /*ClientHandle*/NULL, 0, newFlow, &flowHandle );
if(retCode == NO_ERROR) {
printf("no error TcAddFlow\n");
}
TC_GEN_FILTER GenericFilter;
IP_PATTERN Pattern, Mask;
memset(&Pattern,0,sizeof(IP_PATTERN));
memset(&Mask,0,sizeof(IP_PATTERN));
GenericFilter.AddressType = NDIS_PROTOCOL_ID_TCP_IP;
GenericFilter.PatternSize = sizeof(IP_PATTERN);
GenericFilter.Pattern = &Pattern; // pattern to match, defined below
GenericFilter.Mask = &Mask;
// Filter pattern.
Pattern.Reserved1 = 0;
Pattern.Reserved2 = 0;
Pattern.SrcAddr = 0;//inet_addr("172.18.100.38");
Pattern.DstAddr = 0;//inet_addr(destAddress);
Pattern.tcSrcPort = 0;//htons(0);
Pattern.tcDstPort = htons(0x50);//destPort;
Pattern.ProtocolId = 0;//IPPROTO_UDP;
Pattern.Reserved3[0] = 0;
Pattern.Reserved3[1] = 0;
Pattern.Reserved3[2] = 0;
// Patterns mask
Mask.Reserved1 = 0;
Mask.Reserved2 = 0;
Mask.SrcAddr = 0;//htonl(0xFFFFFFFF);
Mask.DstAddr = 0;//htonl(0xFFFFFFFF);
Mask.tcSrcPort = 0;//htons(0);//0xFFFF;
Mask.tcDstPort = htons(0xFFFF);
Mask.ProtocolId = 0xFF;
Mask.Reserved3[0] = 0;
Mask.Reserved3[1] = 0;
retCode = TcAddFilter(flowHandle, &GenericFilter, &FilterHandle);
if(retCode == NO_ERROR) {
printf("no error TcAddFilter.\n");
}
// UDP MULTICAST
SOCKET hSocket = socket(AF_INET,SOCK_DGRAM,0);
if (hSocket == INVALID_SOCKET) {
err = GetLastError();
printf("\"Socket\" failed with error %d\n", err);
return 1;
}
SOCKADDR add;
SOCKADDR_IN addr_dest;
addr_dest.sin_family = AF_INET;
addr_dest.sin_addr.s_addr = inet_addr(GROUP_ADDR);
addr_dest.sin_port = htons(0x50);
IN_ADDR interfaceAddr;
interfaceAddr.S_un.S_un_b.s_b1 = 204;
interfaceAddr.S_un.S_un_b.s_b2 = 1;
interfaceAddr.S_un.S_un_b.s_b3 = 1;
interfaceAddr.S_un.S_un_b.s_b4 = 148;
unsigned char ttl = 1;
setsockopt(hSocket , IPPROTO_IP, IP_MULTICAST_TTL, (char *)&ttl, sizeof(ttl));
setsockopt(hSocket,IPPROTO_IP,IP_MULTICAST_IF,(const char *)&interfaceAddr, sizeof(interfaceAddr));
sendto( hSocket, "TEST QOS Milticast", 20 , 0, (sockaddr*)&addr_dest,sizeof(SOCKADDR_IN));
result = TcDeleteFilter(FilterHandle);
if (result == NO_ERROR) {
printf("no error TcDeleteFilter\n");
}
result = TcDeleteFlow(flowHandle);
if (result == NO_ERROR) {
printf("no error TcCloseInterface\n");
}
result = TcDeregisterClient(ClientHandle);
if (result == NO_ERROR) {
printf("no error TcDeregisterClient\n");
}
shutdown(hSocket, SD_BOTH);
closesocket(hSocket);
WSACleanup();
return 0;
}
}
}
return 0;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货