allow public ip address from any interface

This commit is contained in:
Michael Harder 2016-02-04 01:14:22 -08:00
parent 7543b31da5
commit e8532970a9

View file

@ -25,6 +25,7 @@ use Getopt::Long;
use Sys::Hostname; use Sys::Hostname;
use IO::Socket; use IO::Socket;
use Data::Validate::IP; use Data::Validate::IP;
use Net::Address::IP::Local;
my $version = "3.8.3"; my $version = "3.8.3";
my $programd = $0; my $programd = $0;
@ -2145,10 +2146,15 @@ sub get_ip {
$arg = 'ip'; $arg = 'ip';
} elsif ($use eq 'if') { } elsif ($use eq 'if') {
$skip = opt('if-skip', $h) || ''; if ($arg eq '') {
$reply = `ifconfig $arg 2> /dev/null`; $ip = Net::Address::IP::Local->public;
$reply = `ip addr list dev $arg 2> /dev/null` if $?; }
$reply = '' if $?; if (!$ip) {
$skip = opt('if-skip', $h) || '';
$reply = `ifconfig $arg 2> /dev/null`;
$reply = `ip addr list dev $arg 2> /dev/null` if $?;
$reply = '' if $?;
}
} elsif ($use eq 'cmd') { } elsif ($use eq 'cmd') {
if ($arg) { if ($arg) {
@ -2226,15 +2232,17 @@ sub get_ip {
$skip =~ s/ /\\s/is; $skip =~ s/ /\\s/is;
$reply =~ s/^.*?${skip}//is; $reply =~ s/^.*?${skip}//is;
} }
if ($reply =~ /^.*?\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b.*/is) { if (!$ip) {
if ($reply =~ /^.*?\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b.*/is) {
$ip = $1; $ip = $1;
$ip = un_zero_pad($ip); $ip = un_zero_pad($ip);
$ip = filter_local($ip) if opt('fw-banlocal', $h); $ip = filter_local($ip) if opt('fw-banlocal', $h);
} elsif ( $ip = ipv6_match($reply) ) { } elsif ( $ip = ipv6_match($reply) ) {
$ip = un_zero_pad($ip); $ip = un_zero_pad($ip);
$ip = filter_local($ip) if opt('fw-banlocal', $h); $ip = filter_local($ip) if opt('fw-banlocal', $h);
} else { } else {
warning("found neither ipv4 nor ipv6 address"); warning("found neither ipv4 nor ipv6 address");
}
} }
if (($use ne 'ip') && (define($ip,'') eq '0.0.0.0')) { if (($use ne 'ip') && (define($ip,'') eq '0.0.0.0')) {
$ip = undef; $ip = undef;