#!/usr/bin/perl
use warnings;
use strict;
BEGIN { $ENV{PATH} = "/sbin:/usr/sbin:$ENV{PATH}" }
use WWW::Mechanize;
use File::Temp qw< tempfile >;
use constant {
USERNAME => "iblech",
PASSWORD => "...",
EXT_IF => "ippp0",
};
my $ipv4_public = (split /\s+/, `ip addr show dev @{[EXT_IF]} | grep inet`)[2];
$ipv4_public =~ s/\/.*//;
die "Couldn't get public IPv4 address!\n" unless $ipv4_public;
print STDERR "Public IPv4 address: $ipv4_public\n";
print STDERR "Logging in to as8758...\n";
my $mech = WWW::Mechanize->new;
$mech->get("http://tunnelbroker.as8758.net/login.php");
$mech->form_number(1);
$mech->field(username => USERNAME);
$mech->field(password => PASSWORD);
$mech->click("Login");
print STDERR "Changing tunnel parameters...\n";
$mech->form_number(1);
$mech->field(ipv4tunnelend => $ipv4_public);
$mech->click("ipv4change");
print STDERR "Downloading tunnel initialisation script...\n";
$mech->form_number(2);
$mech->field(OS => "linux24");
$mech->click("Generate");
print STDERR "Executing script...\n";
my ($fh, $fn) = tempfile();
print $fh $mech->content;
close $fh;
system qw< ifconfig tunnelbroker down >;
system "bash", $fn;
unlink $fn;
Download