While playing around with PDL and Apache access logs I realized that IP addresses could very easily be converted into an image. The first three octects of the address can be converted to RGB values of a pixel, since both range from 0 to 255. The result looks something like this:
And here's the Perl code that parses the log for IP addresses, and then creates the image, using
PDL.
use PDL;
use PDL::NiceSlice;
use PDL::IO::Pic;
my $file = "input.log";
my $w= 500;
my $h = 300;
//create a piddle (matrix)
my $pic = zeroes(3,$w,$h);
open (LOG,"<$file") || die "can't open log file"; my $ct =0;
while(<LOG>) {
if(/^(\d+).(\d+).(\d+).(\d+)/){
$col = floor($ct/$h);
$row = $ct - (floor($ct/$h) *$h);
$pic(0:0,$col:$col,$row:$row) .=$1;
$pic(1:1,$col:$col,$row:$row) .=$2;
$pic(2:2,$col:$col,$row:$row) .=$3;
$ct ++;
if($ct > ($w * $h) -1){
print "done\n";
last;
}
}
}
close LOG;
$pic->wpic("output.tif");