Що таке IP-адреса і для чого він потрібен вебмастеру?, Perl, Програмування, статті

IP-адреса являє собою унікальний 32-х бітний ідентифікатор комп'ютерів,
складається з чотирьох десяткових чисел, розділених крапками, наприклад, 127.0.0.2.
Взаємодія або звернення до певного комп'ютера в Інтернеті
здійснюється за його IP-адресою. В ідеалі кожен комп'ютер, з якого
користувач запитує сторінки сайту, має постійний унікальний IP-адресу,
який, у свою чергу, передається серверу при запитах. На практиці це не
завжди так. Іноді не можна відрізнити різних користувачів, що працюють через один
проксі-сервер по IP-адресами, тому що в HTTP заголовках передається IP-адреса
проксі-сервера, а не конкретного користувача.

Відстеження IP-адрес відвідувачів сторінки або сайту дозволяє визначати
нових і старих користувачів, тобто повторні і нові візити. У свою чергу ця
інформація може бути використана для вирішення різних практичних завдань,
таких як, наприклад, створення лічильників відвідування сайту, обмеження повторного
участі в голосуванні і т.п. Таким чином, визначення IP-адреси є
завданням, яке відкриває масу корисних можливостей для вебмастера.

Змінні оточення CGI і доступ до них в Perl


При запиті користувачем веб-сторінки з сервера браузер посилає йому запит
по протоколу HTTP. Запит браузера відповідно до протоколу завжди містить
заголовок. У заголовку міститься ім'я запрошуваного файлу, шлях до нього, версія
протоколу HTTP і, що найцікавіше для нас, інформація про користувача,
включаючи IP-адресу. У сценарії, написаному мовою Perl, ця інформація доступна
через асоціативний масив (хеш)% ENV. Деякі змінні оточення,
використовувані для ідентифікації користувача, і їх значення представлені в
таблиці 1.

Таблиця 1 – Імена та значення деяких змінних оточення, що використовуються для
ідентифікації користувача


















Ім'я змінної оточення Значення змінної
HTTP_COOKIE Записані в браузері cookie для даного URL
HTTP_X_FORWARDED_FOR IP-адреса клієнта при підключенні через проксі
REMOTE_ADDR Віддалений IP-адреса клієнта
REMOTE_HOST Ім'я віддаленого вузла, що здійснює запит

Для того, щоб отримати доступ до значення змінної оточення за допомогою
Perl необхідно просто використовувати як ключа в хеше% ENV ім'я цієї
змінної. Наприклад, віддалений IP-адреса клієнта можна отримати, використовуючи в
хеше ім'я REMOTE_ADDR і, відповідно, запис $ ENV {REMOTE_ADDR}.

Значення всіх змінних оточення, доступних через хеш% ENV, можна отримати,
скориставшись простим скриптом:

#!/usr/local/bin/perl
# # Якщо perl в іншому каталозі – #! / Usr / bin / perl

print "Content-type: text/html

";

# # Перебираємо всі ключі хеша і для кожного
# # Виводимо запис "ключ" – "значення"
foreach $key( keys( %ENV ) ) {
print "$key – $ENV{ $key }<br>
";
}


Запис IP-адреси в скалярну змінну


Остання тонкість, яку потрібно знати для визначення IP-адреси на Perl,
полягає в тому, що при підключенні користувача через проксі-сервер, в
змінної $ ENV {REMOTE_ADDR} буде зберігатися його IP-адресу, а не IP-адреса
користувача. Як зазначено в таблиці 1, IP-адреса клієнта при підключенні через
проксі знаходиться у змінній $ ENV {HTTP_X_FORWARDED_FOR}. Тепер ми вже знаємо
все необхідне для визначення IP-адреси на Perl. Все що залишилося – це
написати відповідний код:

# # Якщо ключ 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 записується IP-адреса
клієнта при підключенні через проксі або віддалений IP-адресу, якщо підключення
йде не через проксі.

Приклад використання IP-адреси для обліку повторних візитів


Нижче наведено програмний код cgi скрипта мовою Perl, що здійснює
перевірку повторних візитів. У тому випадку, якщо здійснено перший візит буде
видано вітання "Ви тут вперше!", а якщо візит повторний – "Ви тут вже
були! ". IP-адреси машин, з яких вже здійснювалися візити, записуються в
файл ip_base на сервері.

#!/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
";
close ( ADD_IP );
}

# # Виводимо html файл з коментарем
print "Content-type: text/html

";
print "<h1>$comment</h1>";

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*