#!/usr/bin/perl use strict; use warnings; use Net::Traceroute; use Net::DNS::Resolver; use Dancer2; #use JSON::PP; use Data::Dumper; hook 'before' => sub { header 'Access-Control-Allow-Origin' => '*'; }; get '/:ip' => sub { my $ip = route_parameters->get('ip') || 8.8.8.8; my $trace = traceit($ip); return encode_json $trace; }; start; sub traceit { my ($host) = @_; my $tr = Net::Traceroute->new(host => $host, use_icmp => 1, timeout => 1 ); my @array = (); if($tr->found) { #print Dumper($tr->hops); foreach my $hop (@{$tr->{'hops'}}) { my $sum = sprintf("%.1f",($hop->[0]->[2] + $hop->[1]->[2] + $hop->[2]->[2])/3); my $res = Net::DNS::Resolver->new; my $query = $res->query($hop->[0]->[1], 'PTR'); my $answer = "nonono"; if($query) { foreach my $rr ($query->answer) { if($rr->type eq "PTR") { $answer = $rr->ptrdname; } } } # print $hop->[0]->[1]."\t(".$answer.") - ".$sum."\n"; push(@array, [$hop->[0]->[1],$answer,$sum]); } } if($tr->found) { return \@array; } else { return $tr->{'hops'}; } }