PDA

Просмотр полной версии : Скрипт ограничение доступа по IP


Kapa6ac
29.03.2006, 18:13
Привет.
Такой вопрос:
есть список IP-адрессов, нужно сделать доступ к папке только для них.
список адрессов больше 3000 , поэтому вручную каждый IPишник в .htaccess я вижу глупым добовлять..

-------
список IP _http://majordomo.ru/rus_networks_secret_file.txt

Kvarx
29.03.2006, 18:31
А может эти 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";
}

Naked
30.03.2006, 09:30
А если список IP динамически изменяется, то можно без htaccess делать - в пхп(или перл) скрипте проверяем перемнную $ip = getenv("REMOTE_ADDR") (это для пхп), и смотрим подходит ли она под нужный диапазон или нет... Но это удобнее (возможно) только когда адреса изменяеются без твоего участия, иначе, конечно легче в htaccess загонять, как Merlin Cori написал..

Kvarx
02.04.2006, 00:58
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
Этот файл наверняка общий ресурс и большой посещаемостью сайта(ов) сделанных так, возможны траблы с перегрузкой.

ftpd
02.04.2006, 05:03
перед тем как загонять в .htaccess - сети можно(я бы сказал нужно)
сгруппировать
ftp://ftp.isc.org/isc/aggregate

Saruman
02.04.2006, 13:10
Kvarx:
А тута точно между Deny и Allow не нужна запятая?
нужна (http://httpd.apache.org/docs/1.3/mod/mod_access.html#order)

Merlin Cori
02.04.2006, 13:54
да, да, да,...... каюсь..... пропустил.......
нужна запятая

Kapa6ac
04.04.2006, 16:23
а будут ли скрипты понимать IP написанный таким образом: 195.161.0.0/16.
тоесть расшифруется ли он как 195.161.0.0, 195.161.0.1, 195.161.0.2 ... 195.161.0.16 ?

Kvarx
04.04.2006, 16:58
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";
}

Kapa6ac
06.04.2006, 16:26
Merlin Cori
скрипт работает.. ток он распределяеться на весь сервер.. а мне нужно на определенную папку, чтоб он работал..
типо www.mypage/blablabla/ftp

Merlin Cori
06.04.2006, 16:30
Kapa6ac
так ты .htaccess в эту папку и положи :)
и будет распостранятся только на нее

Kapa6ac
07.04.2006, 12:03
апшыпся немнога :)
скрипт непашет :( пишет ошибка сервера

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";
}

Kapa6ac
08.04.2006, 02:58
тоже самое .. ошибка сервера..

Merlin Cori
08.04.2006, 09:45
какя ошибка? 500

Kapa6ac
08.04.2006, 14:56
Merlin Cori
она самая

Merlin Cori
08.04.2006, 15:00
Kapa6ac
ну-ка давай свой сгенерированный .htaccess...
посмотрю

Kapa6ac
08.04.2006, 16:18
Merlin Cori
даже сгенерировать его немогу :(((
пишет ошибку..
failed with return code 126

Merlin Cori
08.04.2006, 16:22
кто пишет? перл? :confused: :confused: :confused:

Kapa6ac
08.04.2006, 16:33
блин ) чвото путти тормозил.. щас сделал. .скину!

проверяй пм

непонял, как понимать подобные 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;
}

Kapa6ac
08.04.2006, 23:24
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