Определение IP-адреса с помощью Perl.
Что такое
Отслеживание
Переменные окружения CGI и доступ к ним в Perl
При запросе пользователем
Имя переменной окружения | Значение переменной |
---|---|
HTTP_COOKIE | Записанные в браузере cookie для данного URL |
HTTP_X_FORWARDED_FOR | |
REMOTE_ADDR | Удаленный |
REMOTE_HOST | Имя удаленного узла, осуществляющего запрос |
Для того, чтобы получить доступ к значению переменной окружения
с помощью Perl необходимо просто использовать в качестве ключа в хеше %ENV
имя этой переменной. Например, удаленный
Значения всех переменных окружения, доступных через хеш %ENV, можно получить, воспользовавшись простым скриптом:
#!/usr/local/bin/perl
## если perl в другом каталоге – #!/usr/bin/perl
print "Content-type: text/html\n\n";
## перебираем все ключи хеша и для каждого
## выводим запись "ключ" - "значение"
foreach $key( keys( %ENV ) ) {
print "$key - $ENV{ $key }<br>\n";
}
Запись
Последняя тонкость, которую нужно знать для определения
## если ключ HTTP_X_FORWARDED_FOR определен
if ( $ENV{ HTTP_X_FORWARDED_FOR } ) {
## в переменную $ip записывается IP-адрес
## клиента, подключенного через прокси
$ip = $ENV{ HTTP_X_FORWARDED_FOR};
} else {
## в противном случае запишем в $ip
## удаленный IP-адрес клиента
$ip = $ENV{ REMOTE_ADDR };
}
Согласно этому программному коду в переменную $ip записывается
Пример использования
Ниже приведен программный код cgi скрипта на языке Perl, осуществляющий проверку
повторных визитов. В том случае, если осуществлен первый визит будет выдано
приветствие “Вы здесь впервые!”, а если визит повторный
#!/usr/local/bin/perl
## записываем IP-адрес в переменную $ip
if ( $ENV{ HTTP_X_FORWARDED_FOR } ) {
$ip = $ENV{ HTTP_X_FORWARDED_FOR };
} else {
$ip = $ENV{ REMOTE_ADDR };
}
$path_to_file = "ip_base";
$comment = "Вы здесь в первый раз!"
## открываем файл ip_base и ищем в нем
## IP-адрес из переменной $ip
open ( IP_BASE, "$path_to_file" );
while ( <IP_BASE> ) {
if ( /$ip/ ) {
$comment = "Вы здесь уже были!";
}
}
close ( IP_BASE );
## записываем в файл ip_base новый IP-адрес
## если пользователь здесь впервые
if ( $comment eq “Вы здесь в первый раз!” ) {
open ( ADD_IP, ">>$file" );
print ADD_IP "$ip\n";
close ( ADD_IP );
}
## Выводим html файл с комментарием
print "Content-type: text/html\n\n";
print "<h1>$comment</h1>";