Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1126780
  • 博文数量: 153
  • 博客积分: 10576
  • 博客等级: 上将
  • 技术积分: 2137
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-02 21:01
文章分类

全部博文(153)

文章存档

2009年(43)

2008年(110)

分类:

2009-12-02 12:23:22

从系统的traceroute命令获取路径,并解析出路径中每一跳IP的所在地

Usage: traceroutex YOURIP

 


#!/usr/bin/perl -w

use strict;
use LWP;

my $IP = shift;
my $LIP;
my $Locate;

open(TRACERT,"/bin/traceroute $IP |");

while(<TRACERT>){
        next if m/^trace/;
        ($LIP) = m/\((.+?)\)/;
        $Locate = locate($LIP);
        print "$LIP\t\t$Locate\n";
}


sub locate {
    my $ip = shift;
    my ($content,$message,$is_success) = do_POST(
        '',
        ['ip' => "$ip",'action' => 2]
    );
    die "Error in locat\(\) : $message" unless $is_success;
    if($content =~ m{参考数据二:(.+?)</li>}) {
        return $1;
    } else {
        die "Can't locat address: $ip\n";
    }
}

sub do_POST {
  my $browser = LWP::UserAgent->new( );
  my $resp = $browser->post(@_);
  return ($resp->content, $resp->status_line, $resp->is_success, $resp)
    if wantarray;
  return unless $resp->is_success;
  return $resp->content;
}


效果如下


阅读(3497) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~