Return to Snippet

Revision: 10608
at January 5, 2009 18:57 by paramah


Updated Code
#!/usr/bin/perl
#
#
#
# CREATE TABLE `redirects` (
#  `id` int(11) NOT NULL auto_increment,
#  `ip` varchar(15) collate utf8_polish_ci NOT NULL,
#  `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
#  `choice` varchar(10) collate utf8_polish_ci NOT NULL,
#  PRIMARY KEY  (`id`),
#  UNIQUE KEY `ip` (`ip`)
#) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=3395 ;
#
#

use Sys::Syslog qw(:DEFAULT setlogsock);
use DBI;
use Net::IP::Match::Regexp qw( create_iprange_regexp match_ip );


$dbase = DBI->connect("DBI:mysql:database=DBNAME;host=DBHOST","DBUSER","DBPASS", { RaiseError => 1 });
$utsfmt = "UNIX_TIMESTAMP()";


my $net1 = create_iprange_regexp( qw( 10.10.0.0/24 10.10.16.0/24 ) );
my $net2 = create_iprange_regexp( qw( 10.21.0.0/17 10.21.128.0/17 ) );


openlog("redirector");
setlogsock('unix');
syslog('info', 'Script started.');

$|=1;
while (<>) 
{
	@X = split;
	my $url = $X[0];
	my $oul =  $url;
	@uri = split(///,$url);
	@ip = split(///,$X[1]);
	my $sdbq = $dbase->prepare("SELECT * FROM redirects WHERE ip='".$ip[0]."' AND choice IN ('0','1','3')");
	$sdbq->execute();
	if ($sdbq->rows == 0) 
	{
	if (match_ip($ip[0], $net1))
	{ 
		$url="http://redirect_host:port/net1/".$uri[3];
	}
	elsif(match_ip($ip[0], $net2))
	{
		$url="http://redirect_host:port/net2/".$uri[3];
	}
	else
	{
		$url="http://redirect_host:port/rest/".$uri[3];
	}

	$action ="New";
	$all = "[".$ip[0]."] ".$url."[".$action."] - ".$oul." - ".$uri[3]."n";
	syslog('info', $all); 

	print "$urln";
	}
	else
	{
	$action ="In database";
		$all = "[".$ip[0]."] ".$url."[".$action."] - ".$oul." - ".$uri[3]."n";
	syslog('info', $all); 

	print; 
	}
}
closelog();

Revision: 10607
at January 5, 2009 18:50 by paramah


Initial Code
#!/usr/bin/perl
#
#
#
# CREATE TABLE `redirects` (
#  `id` int(11) NOT NULL auto_increment,
#  `ip` varchar(15) collate utf8_polish_ci NOT NULL,
#  `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
#  `choice` varchar(10) collate utf8_polish_ci NOT NULL,
#  PRIMARY KEY  (`id`),
#  UNIQUE KEY `ip` (`ip`)
#) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=3395 ;
#
#

use Sys::Syslog qw(:DEFAULT setlogsock);
use DBI;
use Net::IP::Match::Regexp qw( create_iprange_regexp match_ip );


$dbase = DBI->connect("DBI:mysql:database=DBNAME;host=DBHOST","DBUSER","DBPASS", { RaiseError => 1 });
$utsfmt = "UNIX_TIMESTAMP()";


my $net1 = create_iprange_regexp( qw( 10.10.0.0/24 10.10.16.0/24 ) );
my $net2 = create_iprange_regexp( qw( 10.21.0.0/17 10.21.128.0/17 ) );


openlog("redirector");
setlogsock('unix');
syslog('info', 'Script started.');

$|=1;
while (<>) 
{
	@X = split;
	my $url = $X[0];
	my $oul =  $url;
	@uri = split(///,$url);
	@ip = split(///,$X[1]);
	my $sdbq = $dbase->prepare("SELECT * FROM redirects WHERE ip='".$ip[0]."' AND choice IN ('0','1','3')");
	$sdbq->execute();
	if ($sdbq->rows == 0) 
	{
	if (match_ip($ip[0], $net1))
	{ 
		$url="http://redirect_host:port/net1/".$uri[3];
	}
	elsif(match_ip($ip[0], $net2))
	{
		$url="http://redirect_host:port/net2/".$uri[3];
	}
	else
	{
		$url="http://redirect_host:port/rest/".$uri[3];
	}

	$action ="New";
	$all = "[".$ip[0]."] ".$url."[".$action."] - ".$oul." - ".$uri[3]."n";
	syslog('info', $all); 

	print "$urln";
	}
	else
	{
	$action ="In database";
		$all = "[".$ip[0]."] ".$url."[".$action."] - ".$oul." - ".$uri[3]."n";
	syslog('info', $all); 

	print; 
	}
}
closelog();

Initial URL

                                

Initial Description
For database inserts must be made some site on "http://redirect_host:port/.../"   with nice getip function: http://snipplr.com/view/10946/

Initial Title
perl redirect for squid

Initial Tags
redirect, perl

Initial Language
Perl