Просмотр полной версии : Скрипт ограничение доступа по IP
Привет.
Такой вопрос:
есть список IP-адрессов, нужно сделать доступ к папке только для них.
список адрессов больше 3000 , поэтому вручную каждый IPишник в .htaccess я вижу глупым добовлять..
-------
список IP _http://majordomo.ru/rus_networks_secret_file.txt
А может эти IP читать из базы скриптом и тем самым генерить .htaccess?
Как так идея?
Merlin Cori
29.03.2006, 19:28
Зачем же ручками..... Вот тебе перловый скрипт и и создавай .htaccess
#!/usr/bin/perl -w
$input_file="rus_networks_secret_file.txt";
$out_file=".htaccess";
$text="Allow from ";
open(HANDLE_IN, $input_file) or die ("Error open file", $input_file);
open(HANDLE_OUT, "> $out_file") or die ("Error open file");
print HANDLE_OUT "Options -Indexes\nOrder Deny, Allow\nDeny from all\n";
while(!eof(HANDLE_IN) )
{
$input=readline(HANDLE_IN);
($input, $dummy) = split /\//, $input;
$output= $text.$input;
print HANDLE_OUT $output,"\n";
}
А если список IP динамически изменяется, то можно без htaccess делать - в пхп(или перл) скрипте проверяем перемнную $ip = getenv("REMOTE_ADDR") (это для пхп), и смотрим подходит ли она под нужный диапазон или нет... Но это удобнее (возможно) только когда адреса изменяеются без твоего участия, иначе, конечно легче в htaccess загонять, как Merlin Cori написал..
Merlin Cori
Order Deny Allow
А тута точно между Deny и Allow не нужна запятая?
Пусть еще будет версия на ПХП
<?
$input="rus_networks_secret_file.txt";
$output=".htaccess";
$fh_input=fopen($input,"rt") or die("Error, while opening file $fh_input");
$fh_output=fopen($output,"wt") or die("Error, while opening file $fh_output");
fputs($fh_output,"Order Deny, Allow\n");
fputs($fh_output,"Deny from all\n");
while(!feof($fh_input)){
$str=fgets($fh_input);
$str="Allow from ".$str."\n";
fputs($fh_output,$str);
}
fclose($fh_input);
fclose($fh_output);
?>
The_naked
Этот файл наверняка общий ресурс и большой посещаемостью сайта(ов) сделанных так, возможны траблы с перегрузкой.
перед тем как загонять в .htaccess - сети можно(я бы сказал нужно)
сгруппировать
ftp://ftp.isc.org/isc/aggregate
Kvarx:
А тута точно между Deny и Allow не нужна запятая?
нужна (http://httpd.apache.org/docs/1.3/mod/mod_access.html#order)
Merlin Cori
02.04.2006, 13:54
да, да, да,...... каюсь..... пропустил.......
нужна запятая
а будут ли скрипты понимать IP написанный таким образом: 195.161.0.0/16.
тоесть расшифруется ли он как 195.161.0.0, 195.161.0.1, 195.161.0.2 ... 195.161.0.16 ?
IP будет читаться из файла целой строкой и просто переписываться в .htaccess, зависит от поддерживает ли это Apache, cудя по _http://httpd.apache.org/docs/1.3/mod/mod_access.html.en#allow так можно делать.
Merlin Cori
04.04.2006, 17:03
тогда так....
убираем строку со split
#!/usr/bin/perl -w
$input_file="rus_networks_secret_file.txt";
$out_file=".htaccess";
$text="Allow from ";
open(HANDLE_IN, $input_file) or die ("Error open file", $input_file);
open(HANDLE_OUT, "> $out_file") or die ("Error open file");
print HANDLE_OUT "Options -Indexes\nOrder Deny, Allow\nDeny from all\n";
while(!eof(HANDLE_IN) )
{
$input=readline(HANDLE_IN);
$output= $text.$input;
print HANDLE_OUT $output,"\n";
}
Merlin Cori
скрипт работает.. ток он распределяеться на весь сервер.. а мне нужно на определенную папку, чтоб он работал..
типо www.mypage/blablabla/ftp
Merlin Cori
06.04.2006, 16:30
Kapa6ac
так ты .htaccess в эту папку и положи :)
и будет распостранятся только на нее
апшыпся немнога :)
скрипт непашет :( пишет ошибка сервера
Merlin Cori
07.04.2006, 14:05
Kapa6ac
пробел лишний затесался между Deny и Allow
#!/usr/bin/perl -w
$input_file="rus_networks_secret_file.txt";
$out_file=".htaccess";
$text="Allow from ";
open(HANDLE_IN, $input_file) or die ("Error open file", $input_file);
open(HANDLE_OUT, "> $out_file") or die ("Error open file");
print HANDLE_OUT "Options -Indexes\nOrder Deny,Allow\nDeny from all\n";
while(!eof(HANDLE_IN) )
{
$input=readline(HANDLE_IN);
$output= $text.$input;
print HANDLE_OUT $output,"\n";
}
тоже самое .. ошибка сервера..
Merlin Cori
08.04.2006, 09:45
какя ошибка? 500
Merlin Cori
08.04.2006, 15:00
Kapa6ac
ну-ка давай свой сгенерированный .htaccess...
посмотрю
Merlin Cori
даже сгенерировать его немогу :(((
пишет ошибку..
failed with return code 126
Merlin Cori
08.04.2006, 16:22
кто пишет? перл? :confused: :confused: :confused:
блин ) чвото путти тормозил.. щас сделал. .скину!
проверяй пм
непонял, как понимать подобные IP..
80.67.210.144/29
может наоборот надо 29/144 ?
Merlin Cori
08.04.2006, 20:18
это он на пустые строки ругался...
а зачем ты оттуда Deny from all убрал?
#!/usr/bin/perl -w
$input_file="rus_networks_secret_file.txt";
$out_file=".htaccess";
$text="Allow from ";
open(HANDLE_IN, $input_file) or die ("Error open file", $input_file);
open(HANDLE_OUT, "> $out_file") or die ("Error open file");
print HANDLE_OUT "Options -Indexes\nOrder Deny,Allow\nDeny from all\n";
while(!eof(HANDLE_IN) )
{
$input=readline(HANDLE_IN);
$output= $text.$input;
print HANDLE_OUT $output;
}
Merlin Cori
пасиб. скомпилил. пробелы убрались.
добавил свой IP . доступ есть..
остаеться думать если доступ с других iP.
и как всеже понимать ипишку записанную в виде 80.67.210.144/29
Merlin Cori
08.04.2006, 23:36
Address: 80.67.210.144 01010000.01000011.11010010.10010 000
Netmask: 255.255.255.248 = 29 11111111.11111111.11111111.11111 000
Wildcard: 0.0.0.7 00000000.00000000.00000000.00000 111
=>
Network: 80.67.210.144/29 01010000.01000011.11010010.10010 000 (Class A)
Broadcast: 80.67.210.151 01010000.01000011.11010010.10010 111
HostMin: 80.67.210.145 01010000.01000011.11010010.10010 001
HostMax: 80.67.210.150 01010000.01000011.11010010.10010 110
Hosts/Net: 6
vBulletin® v3.8.5, Copyright ©2000-2024, Jelsoft Enterprises Ltd.