default gw средствами perl

Модератор: Модераторы разделов

Аватара пользователя
murder
Сообщения: 219
ОС: FreeBSD 8.0, Ubuntu 9.10

default gw средствами perl

Сообщение murder »

Пишу скрипт, который у меня переводит тачку с одного канала инета на другой.
Все ниче, но мне надо сделать проверку текущего дефалтового шлюза, чтобы лишний раз ничего не дергать, а как это сделать с помощью perl я не знаю. Можно было вывернуться и написать скрипт на shell, но там я не знаю как сделать проверку удаленного хоста :). А времени в обрез
Вот текущий перловский скрипт:

Код: Выделить всё

#!/usr/bin/perl

use Net::Ping;

my $ISP = "192.168.0.1";
my $ping_timeout = 3;
my $ping_object = Net::Ping->new( "icmp", $ping_timeout ) || die;

if($ping_object->ping($ISP))
   {
      system("/sbin/route del default");
      system("/sbin/route add default gw 192.168.0.1");
      system("/sbin/iptables -t nat --flush");
      system("/sbin/iptables -t nat -A POSTROUTING -s 10.112.1.0/24 -j SNAT --to-source 192.168.0.21");
}
else
   {
      system("/sbin/route del default");
      system("/sbin/route add default gw 192.168.1.1");
      system("/sbin/iptables -t nat --flush");
      system("/sbin/iptables -t nat -A POSTROUTING -s 10.112.1.0/24 -j SNAT --to-source 192.168.1.21");
}

Если кто-нибудь чем-нибудь поможет, буду очень благодарен. Или представит листинг на shell... :)
-//- Реальная смерть приходит с косой, а виртуальная с пассатижами -//-
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: default gw средствами perl

Сообщение madskull »

Так у тебя тут от перла только вызовы system... все что в system() засунь в отдельный файл, будет тебе shell-скрипт.

А def gw можно узнать, например, так:
route -n | awk '/^0\.0\.0\.0/{print$2}'

или так:
ip route | awk '/^def/{print$3}'
ArchLinux / IceWM
Спасибо сказали: