document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  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;
');