diff -urN ddclient-3.7.1.org/ddclient ddclient-3.7.1/ddclient --- ddclient-3.7.1.org/ddclient 2007-01-26 00:42:22.000000000 +0900 +++ ddclient-3.7.1/ddclient 2007-04-14 00:26:58.000000000 +0900 @@ -1770,6 +1770,48 @@ return $reply; } ###################################################################### +## un_zero_pad +###################################################################### +sub un_zero_pad { + my $in_str = shift(@_); + my @out_str = (); + + if ($in_str eq '0.0.0.0') { + return $in_str; + } + + foreach my $block (split /\./, $in_str) { + $block =~ s/^0+//; + if ($block eq '') { + $block = '0'; + } + push @out_str, $block; + } + return join('.', @out_str); +} +###################################################################### +## filter_local +###################################################################### +sub filter_local { + my $in_ip = shift(@_); + + if ($in_ip eq '0.0.0.0') { + return $in_ip; + } + + my @guess_local = ( + '^10\.', + '^172\.(?:1[6-9]|2[0-9]|3[01])\.', + '^192\.168' + ); + foreach my $block (@guess_local) { + if ($in_ip =~ /$block/) { + return '0.0.0.0'; + } + } + return $in_ip; +} +###################################################################### ## get_ip ###################################################################### sub get_ip { @@ -1847,6 +1889,8 @@ } if ($reply =~ /^.*?\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b.*/is) { $ip = $1; + $ip = un_zero_pad($ip); + $ip = filter_local($ip); } if (($use ne 'ip') && (define($ip,'') eq '0.0.0.0')) { $ip = undef;