У меня есть требование отмечать определенный трафик, исходящий от некоторых серверов Windows 2003, с определенным значением DSCP.
К сожалению, в этой ситуации мы не можем использовать ни маркировку трафика на маршрутизаторе, ни обновление до Windows 2008.
Я провел некоторое время с tcmon и tccom, и я так близок к тому, чтобы это заработало. На полностью обновленной и обновленной виртуальной машине XP я выяснил, как написать сценарий TCCOM (использовал проводник процессов для переменных и проводник объектов word 2003 vba, чтобы выяснить api). Сценарий запускается при загрузке и без проблем настраивает потоки на моей виртуальной машине XP.
Но на сервере Windows 2003 я вообще не могу добавить поток ни через скрипт, ни с помощью tcmon gui. Он просто говорит «неизвестная ошибка» (при написании сценария выдается код ошибки 80004005).
Я попытался решить эту проблему следующим образом:
Кому-нибудь удалось вообще заставить tcmon / tccom работать на Windows 2003?
Для всех, кому интересно, вот мой сценарий (vbscript) с примером потока (не то, что я на самом деле делаю). Он создает поток и добавляет фильтр, который применяет DSCP 32 к трафику с 192.168.10.0/24, идущему на 192.168.20.0/24 tcp-порт 80.
option explicit
dim client
set client = wscript.createobject("TrafficControl.Client")
dim sInterface
sInterface = "AMD PCNET Family PCI Ethernet Adapter - Packet Scheduler Miniport"
dim ifce
set ifce = getInterface(client,sInterface)
dim flowSpec
set flowSpec = ifce.CreateFlowSpec
dim filterSpec
set filterSpec = ifce.CreateFilterSpec(2)
clearAllFlows client
flowSpec.Parameters("TX_FRIENDLY_NAME") = "From Vbscript"
flowSpec.Parameters("TX_DCLASS") = 40
flowSpec.Parameters("TX_TOKEN_RATE") = -1
flowSpec.Parameters("TX_SERVICE_TYPE") = 1
filterSpec.Parameters("PROTOCOL_ID_MASK") =0
filterSpec.Parameters("PROTOCOL_ID") = 0
filterSpec.Parameters("DEST_PORT_MASK") = 65535
filterSpec.Parameters("SOURCE_PORT_MASK") = 0
filterSpec.Parameters("DEST_PORT") = 80
filterSpec.Parameters("SOURCE_PORT") = 0
filterSpec.Parameters("DEST_ADDRESS_MASK") = "255.255.255.0"
filterSpec.Parameters("SOURCE_ADDRESS_MASK") = "255.255.255.0"
filterSpec.Parameters("DEST_ADDRESS") = "192.168.20.0"
filterSpec.Parameters("SOURCE_ADDRESS") = "192.168.10.0"
dim newFlow
set newFlow = ifce.CreateFlow(flowSpec,1,"Flow obj from vbscript")
newFlow.CreateFilter filterSpec
function getInterface(oClient,sIntName)
dim oInterface
for each oInterface in oClient.interfaces
if oInterface.Name = sIntName then
set getInterface = oInterface
end if
Next
end function
sub clearAllFlows(oClient)
dim oInterface, oFlow
for each oInterface in client.interfaces
for each oFlow in oInterface.flows
oFlow.delete
Next
Next
end sub