Если у вас есть прозрачный прокси (или не такой прозрачный, но обязательный), например squid часто предоставляет возможность переписать URL. С кальмаром вы можете установить url_rewrite_program
:
url_rewrite_program /usr/local/bin/redirector.pl
Затем вы пишете программу перенаправления, например, это доказательство концепции:
my %approved;
while (<>) {
chomp;
my @parts = split;
my ($url, $ip, $ident, $method, $keypairs) = @parts;
if (defined $approved{$ip}) {
# We've seen them before
print "$url\n";
}
else {
# Not seen before
# You *will* need to urlencode $url for this
print "302:http://internal.site/page?dest=$url\n";
$approved{$ip} = 1;
}
}
Тогда все, что вам нужно сделать, это внедрить http://internal.site/page
, чтобы оно показывало ваше сообщение и имело либо перенаправление на основе времени, либо на основе клика назад на URL, который был передан как dest
.
Вероятно, вы хотели бы использовать %approved
, чтобы записать последний раз, когда вы видели запрос с этой машины, и у вас был тайм-аут. Вы также можете рассмотреть возможность использования вещей более низкого уровня, чем просто IP-адрес, например, искать MAC-адрес и порты коммутатора.