#!/usr/bin/perl -w use strict; use diagnostics; use Data::Dumper; use Net::Ping; use Time::HiRes; use URI::URL; my $mirror_list = $ARGV[0] || undef; my $verbosity = 1; my $ping = Net::Ping->new(); my $ping_time = '2'; my %latency = (); $ping->hires(); unless ($mirror_list && -f $mirror_list) { die "Usage: '$0 ./mirror_list.txt'\n"; } open(LIST, $mirror_list) or die "$?: $!"; while() { my $url = URI::URL->new($_); my ($net) = $url->netloc; if ($verbosity) { print "url:$url\n"; print "ping:$net\n"; print "results: "; } my ($ret, $duration, $ip) = $ping->ping($net, $ping_time); if ($verbosity) { printf("%.2f", 1000 * $duration); print " ms\n\n"; } $latency{$net}{dur} = sprintf("%.2f", 1000 * $duration); $latency{$net}{url} = $url; } close(LIST); foreach my $net (sort {$latency{$b}{dur} <=> $latency{$a}{dur} } keys %latency) { print $latency{$net}{url}, "\n" if $latency{$net}{dur} > 0; }