Intro
findstring
бесполезно, так как perl - замечательный grep
движок ...
В Linux я буду делать:
my $gw;
open my $ipr,"ip r|";
while (<$ipr>) {
$gw=$1 if /default.*via ([0-9.]+) /;
};
print $gw."\n";
Поскольку ваш вопрос обозначает ipconfig
, я думаю что-то вроде
open my $ipr,"ipconfig /all|";
while (<$ipr>) {
$gw=$1 if /[dD].*faul?t.*: ([0-9.]+) *$/;
};
print $gw."\n";
Примечание: Regex - это try , основанное на fr.wikipedia и en.wikipedia. Обратная связь приветствуется!
Группировка
my $gw;
my $regex='default.*via ([0-9.]+) ';
my $cmd='ip r';
if ($^O =~ "MSWin") {
$regex='[dD].*faul?t.*: ([0-9.]+) *$';
$cmd='ipconfig /all'
};
open my $ipr,$cmd."|";
while (<$ipr>) {
$gw=$1 if /$regex/;
};
print $gw."\n";
Эта работа под моим Debian Linux.Не знаю, может ли это работать под MSWin ... Обратная связь приветствуется!
Или с помощью traceroute
:
use Net::Traceroute;
$tr = Net::Traceroute->new(host => "8.8.8.8",max_ttl=>1);
print "Gateway: " . $tr->hop_query_host(1,0) . "\n";