Advertisement
Guest User

lyman

a guest
Jun 9th, 2010
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.09 KB | None | 0 0
  1. #!/usr/bin/env perl
  2.  
  3. use strict;
  4.  
  5. if ($#ARGV < 0) {
  6.     print "usage: $0 add|del [route_list]\n";
  7.     exit 1;
  8. }
  9. my $flag = $ARGV[0];
  10.  
  11. use Cwd 'abs_path';
  12. use File::Basename 'dirname';
  13.  
  14. my $list_file = dirname(abs_path($0)) . "/routes_cn.txt";
  15. $list_file = $ARGV[1] if $#ARGV >= 1;
  16.  
  17. my %device;
  18. foreach ( `route -n` ) {
  19.     chomp;
  20.     my ($dest, $gateway, $mask, $flag, $metric, $ref, $use_num, $interface) = split /\s+/;
  21.     if ($dest eq '0.0.0.0' and !($interface =~ m/(tun|tap)\d/)) {
  22.         $device{$interface} = $gateway;
  23.         # print "$interface\t$gateway\n";
  24.     }
  25. }
  26.  
  27. open FILE, "<", $list_file
  28.     or die "File $list_file: $!\n";
  29. while (<FILE>) {
  30.     chomp;
  31.     next if m/\W*#/;
  32.     my ($net, $msk) = split /\//;
  33.     # print "$net\t$msk\n";
  34.     foreach my $interface ( keys %device ) {
  35.         my $gateway = $device{$interface};
  36.         if ($flag eq "add") {
  37.             system("route add -net $net netmask $msk gw $gateway dev $interface");
  38.         } elsif ($flag eq "del") {
  39.             system("route del -net $net netmask $msk");
  40.         }
  41.     }
  42. }
  43. close FILE;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement