403, ) ); } } /** * Compute remote IP address * * @return string * * @todo Test me! * @codeCoverageIgnore */ function remote_addr() { static $remote_addr = null ; /** * @since 4.0.0 */ if ( is_null( $remote_addr ) ) { if ( defined( 'WP_FAIL2BAN_PROXIES' ) ) { if ( array_key_exists( 'HTTP_X_FORWARDED_FOR', $_SERVER ) ) { $ip = ip2long( $_SERVER['REMOTE_ADDR'] ); /** * PHP 7 lets you define an array * @since 3.5.4 */ $proxies = ( is_array( WP_FAIL2BAN_PROXIES ) ? WP_FAIL2BAN_PROXIES : explode( ',', WP_FAIL2BAN_PROXIES ) ); foreach ( $proxies as $proxy ) { if ( '#' == $proxy[0] ) { continue; } elseif ( 2 == count( $cidr = explode( '/', $proxy ) ) ) { $net = ip2long( $cidr[0] ); $mask = ~(pow( 2, 32 - $cidr[1] ) - 1); } else { $net = ip2long( $proxy ); $mask = -1; } if ( $net == ($ip & $mask) ) { return ( false === ($len = strpos( $_SERVER['HTTP_X_FORWARDED_FOR'], ',' )) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : substr( $_SERVER['HTTP_X_FORWARDED_FOR'], 0, $len ) ); } } } } /** * For plugins and themes that anonymise requests * @since 3.6.0 */ $remote_addr = ( defined( 'WP_FAIL2BAN_REMOTE_ADDR' ) ? WP_FAIL2BAN_REMOTE_ADDR : $_SERVER['REMOTE_ADDR'] ); } return $remote_addr; }