VBS/WSH/JS - [решено] VBS| Ошибки при добавлении списка разрешенных IP в IIS

Ответить
Аватара пользователя
SyNC

VBS/WSH/JS - [решено] VBS| Ошибки при добавлении списка разрешенных IP в IIS

Сообщение SyNC »

Задача - закрыть доступ к серверу (WS2003) с иностранных IP

Решение - закрыть доступ всем, потом внести список российских подсетей в список разрешенных. Список есть по адресу
http://noc.masterhost.ru/allrunet/runet


Реализация:

Поскольку вбивать ручками все это нереально, был написан скрипт на PHP, который генерит скрипт на VBS для добваления IP в список рарешенных для IIS. Скрипт на PHP писался из-за незнания VBS.



Получилось:



Код:

Код: Выделить всё

<?php
echo "'Getting IP list... ";
$ip_array=file("http://noc.masterhost.ru/allrunet/runet");
echo "IP List Loaded.\r\n";
$ip_count=count($ip_array);
echo "'Subnets count: $ip_count\r\n";
echo "'Converting masks... ";
for ($i=0; $i<$ip_count; ++$i)
{
$ip_array[$i]=str_ireplace("/8\n",",255.0.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/9\n",",255.128.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/10\n",",255.192.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/11\n",",255.224.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/12\n",",255.240.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/13\n",",255.248.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/14\n",",255.252.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/15\n",",255.254.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/16\n",",255.255.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/17\n",",255.255.128.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/18\n",",255.255.192.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/19\n",",255.255.224.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/20\n",",255.255.240.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/21\n",",255.255.248.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/22\n",",255.255.252.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/23\n",",255.255.254.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/24\n",",255.255.255.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/25\n",",255.255.224.128",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/26\n",",255.255.255.192",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/27\n",",255.255.255.224",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/28\n",",255.255.255.240",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/29\n",",255.255.255.248",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/30\n",",255.255.255.252",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/31\n",",255.255.255.254",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/32\n",",255.255.255.255",$ip_array[$i]);
}
echo "Done.\r\n";
echo "'Writing IIS config script...\r\n";
?>
'------------------------------------------------------------
Dim IIsWebVirtualDirObj
Dim IIsIPSecurityObj
Set IIsWebVirtualDirObj = GetObject("IIS://localhost/W3SVC/793577/Root")
Set IIsIPSecurityObj = IIsWebVirtualDirObj.IPSecurity
IIsIPSecurityObj.GrantByDefault = false
<?php
$ip_count--;
echo "Dim IPList ($ip_count)\r\n";
$i=0;
foreach ($ip_array as $ip)
{
echo "IPList ($i) = \"$ip\"\r\n";
$i++;
}
?>
IIsIPSecurityObj.IPGrant = IPList
IIsWebVirtualDirObj.IPSecurity = IIsIPSecurityObj
IIsWebVirtualDirObj.SetInfo
WScript.Echo("Granted access from:")
for each IP in IIsIPSecurityObj.IPGrant
WScript.Echo(IP)
next
'------------------------------------------------------------
'Done!

Результатом работы является:
http://sync.ministryofmp3.ru/ip2.txt




ПРОБЛЕМА:



Этот VBS скрипт не работает, выдает ошибку:

\ip2.vbs(1741, 1) Microsoft VBScript runtime error: Invalid procedure call or argument



НО:



Если урезать список IP до, к примеру 25 штук (
http://sync.ministryofmp3.ru/ip.txt
)

то все работает. Но мне надо полный список.



ВОПРОС:

Что делать и кто виноват?

Есть ли еще пути решения проблемы русских IP для IIS?
Аватара пользователя
hasherfrog

Re: VBS/WSH/JS - [решено] VBS| Ошибки при добавлении списка разрешенных IP в IIS

Сообщение hasherfrog »

>> Dim IPList (1728)

>> IPList (0) = "144.206.0.0,255.255.0.0"

>> ...

>> IPList (1728) = "91.76.0.0,255.252.0.0"



Сколько элементов? вроде 1729...
Аватара пользователя
SyNC

Re: VBS/WSH/JS - [решено] VBS| Ошибки при добавлении списка разрешенных IP в IIS

Сообщение SyNC »

>> Сколько элементов? вроде 1729...



Я не сомневался в таком ответе! Да, 1729 элементов, но VB создает массив от 0 до 1728! А не просто 1728 элементов, это эквивалентно Dim IPList (0 to 1728). Когда я об этом узнал, сам был немало удивлен.

И, кстати, если будет превышение - выскочит ошибка.



Проблема не в этом. Как мне посоветовали на форуме Microsoft - скорее всего, там есть пересекающиеся сети, и метод (!!!!!) IPGrant (да, это метод, что для меня было открытием, я ж почти не знаю VB, и не думал, что в нем есть перегрузка операторов) - не пропускает полученный список IP. С помощью различных тестов, я на 80% убедился, что это именно так.

Таким образом получаем, что необходимо на основе данного списка IP сформировать новый, очищенный и нормализованный.

За сим, тема закрыта.



ПС: Обсуждение алгоритма получения "чистого" списка IP уношу в соседний топик. Ариведерчи.
Аватара пользователя
hasherfrog

Re: VBS/WSH/JS - [решено] VBS| Ошибки при добавлении списка разрешенных IP в IIS

Сообщение hasherfrog »

ох уж этот vbs... постоянно там какие-то "приколы" :] уже не первый раз.



Тему пометил как решённую Изображение
Ответить

Вернуться в «Программирование и базы данных»