Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
diff -urN ddclient-3.8.2.org/ddclient ddclient-3.8.2/ddclient
--- ddclient-3.8.2.org/ddclient 2014-12-30 18:35:38.000000000 +0900
+++ ddclient-3.8.2/ddclient 2014-12-30 18:36:41.000000000 +0900
@@ -332,6 +332,7 @@
'web-skip' => setv(T_STRING,1, 0, 1, '', undef),
'fw' => setv(T_ANY, 0, 0, 1, '', undef),
'fw-skip' => setv(T_STRING,1, 0, 1, '', undef),
+ 'fw-banlocal' => setv(T_BOOL, 0, 0, 1, 0, undef),
'fw-login' => setv(T_LOGIN, 1, 0, 1, '', undef),
'fw-password' => setv(T_PASSWD,1, 0, 1, '', undef),
'cmd' => setv(T_PROG, 0, 0, 1, '', undef),
@@ -371,6 +372,7 @@
'web-skip' => setv(T_STRING,0, 0, 1, '', undef),
'fw' => setv(T_ANY, 0, 0, 1, '', undef),
'fw-skip' => setv(T_STRING,0, 0, 1, '', undef),
+ 'fw-banlocal' => setv(T_BOOL, 0, 0, 1, 0, undef),
'fw-login' => setv(T_LOGIN, 0, 0, 1, '', undef),
'fw-password' => setv(T_PASSWD,0, 0, 1, '', undef),
'cmd' => setv(T_PROG, 0, 0, 1, '', undef),
@@ -605,6 +607,7 @@
"",
[ "fw", "=s", "-fw address|url : obtain IP address from firewall at 'address'" ],
[ "fw-skip", "=s", "-fw-skip pattern : skip any IP addresses before 'pattern' on the firewall address|url" ],
+ [ "fw-banlocal", "!", "-fw-banlocal : ignore local IP addresses on the firewall address|url" ],
[ "fw-login", "=s", "-fw-login login : use 'login' when getting IP from fw" ],
[ "fw-password", "=s", "-fw-password secret : use password 'secret' when getting IP from fw" ],
"",
@@ -1943,6 +1946,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 {
@@ -2039,6 +2084,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 opt('fw-banlocal', $h);
}
if (($use ne 'ip') && (define($ip,'') eq '0.0.0.0')) {
$ip = undef;