Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] VBS| Ошибки при добавлении списка разрешенных IP в IIS (http://forum.oszone.net/showthread.php?t=80810)

SyNC 12-03-2007 20:26 560778

VBS| Ошибки при добавлении списка разрешенных IP в IIS
 
Задача - закрыть доступ к серверу (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 16-03-2007 11:35 562483

>> 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 16-03-2007 13:27 562538

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

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

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

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

hasherfrog 16-03-2007 16:08 562623

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

Тему пометил как решённую ;)


Время: 18:53.

Время: 18:53.
© OSzone.net 2001-