while (){ chomp; my @temp = split /\?/,$_; $ipmatch = $temp[0] ; #unless defined $ipmatch; next unless $temp[4] eq 'Started'; $dati{$.} = { webnum=>$temp[1], alias => { map {$_ => &risolvi( $_ )} split / /,$temp[12] } , }; } sub risolvi{ my $host = shift; my $dnsserver = '122.211.222.221'; my @arr; open DNS, "nslookup $host $dnsserver 2>&1|"||die; while () {push @arr, $_} if ($arr[0]=~/\s*Non-existent domain/ ){return ("NON-EXISTENT-DOMAIN")} elsif ($arr[0]=~/Non-authoritative answer:/ ) {$arr[5]=~/\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/;return ("NON-AUTH: $1")} elsif ($arr[4]=~/\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/ ){return $1;} else {return ("????")} close DNS; } __DATA__ 999.110.136.999?50?www.google.it?usr1?Started?c:\webroot\google?172517?NA??--?--?--?www.google.it www.google.com www.google.org ?? 999.110.136.999?51?www.fedoracore.it?usr2?Started?c:\webroot\thebossmanagement?835304?NA??--?--?--?www.fedoracore.it ?? #!perl use strict; use warnings; use GD; use GD::Polyline; # create an image use GD::Text::Align; my $image = new GD::Image (1024,768); my $align = GD::Text::Align->new($image, valign => 'top', halign => 'left', ); ################### COLORI my $gray = $image->colorAllocate(127,127,127); my $white = $image->colorAllocate(255,255,255); my $black = $image->colorAllocate( 0, 0, 0); my $red = $image->colorAllocate(255, 0, 0); $image->setThickness(1); ################### COSTANTI my $pig = 3.141592653589793238462643383279502884197169399375; my $radius = 90; my $apo = ($radius*sqrt(3))/2; ################### initial positioN of the center my $xc = 512; my $yc = 384; my $vertex= 6; ################### MAIN #### &hexagon($xc,$yc); print "original coord: $xc -- $yc\n-------------\n"; $align->set_text("X"); $align->draw($xc,$yc,0); foreach my $cardinal (qw(N NE SE S NO SO)) { my ($xc2, $yc2) = &vicini ($xc,$yc,$cardinal,1); #$yc2=sprintf("%10.3f",$yc2);#CORREZIONE print "$cardinal coord: $xc2 -- $yc2\n"; $align->set_text($cardinal); $align->draw($xc2,$yc2,0); &hexagon($xc2,$yc2); } &disegna; ############################################################ sub hexagon { my $xc = shift; my $yc = shift; my $poly = new GD::Polygon; foreach my $i (0..5 ){ my $newX=$xc+($radius*cos($i*2 *$pig/$vertex)); my $newY=$yc+($radius*sin($i*2 *$pig/$vertex)); $poly->addPt( $newX, $newY); $align->set_text(" $i "); $align->draw($newX,$newY,0); } $image->polydraw($poly,$black); #my @vertices = $poly->vertices; } ############################################################ sub disegna { open PNG, ">testHEX2.jpeg"; select PNG; binmode PNG; print $image->jpeg(100); } ############################################################ sub vicini { my $xc = shift; my $yc = shift; my $quale = shift; my $dist =shift||1; my %vicini = ( SE => sub{my $xc2 = $xc+($radius*3/2) *$dist; my $yc2 = $yc+ $apo *$dist; return($xc2,$yc2)}, NE => sub{my $xc2 = $xc+($radius*3/2) *$dist; my $yc2 = $yc- $apo *$dist; return($xc2,$yc2)}, N => sub{my $xc2 = $xc; my $yc2 = $yc- $apo*2 *$dist; return($xc2,$yc2)}, S => sub{my $xc2 = $xc; my $yc2 = $yc+ $apo*2 *$dist; return($xc2,$yc2)}, NO => sub{my $xc2 = $xc-($radius*3/2) *$dist; my $yc2 = $yc- $apo *$dist; return($xc2,$yc2)}, SO => sub{my $xc2 = $xc-($radius*3/2) *$dist; my $yc2 = $yc+ $apo *$dist; return($xc2,$yc2)}, ); return &{$vicini{$quale}}($xc,$yc); }