A bit confused about this. Trying to find a way to detect proxies and their type. Not sure if there are restrictions, or if some option needs to be enabled or what.
Here's the php script uploaded to one of my live sites
<html lang="en">
<head>
<meta charset="utf-8">
<title></title>
<meta name="description">
<meta name="author">
<link rel="stylesheet" href="css/styles.css?v=1.0">
</head>
<body>
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
set_time_limit(6000);
function get_ip()
{
if ($_SERVER)
{
if ($_SERVER['HTTP_X_FORWARDED_FOR']) $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
elseif ($_SERVER['HTTP_CLIENT_IP']) $ip = $_SERVER['HTTP_CLIENT_IP'];
else $ip = $_SERVER['REMOTE_ADDR'];
}
else
{
if (getenv('HTTP_X_FORWARDED_FOR')) $ip = getenv('HTTP_X_FORWARDED_FOR');
elseif (getenv('HTTP_CLIENT_IP')) $ip = getenv('HTTP_CLIENT_IP');
else $ip = getenv('REMOTE_ADDR');
}
return $ip;
}
function detect_proxy($myIP)
{
$scan_headers = array(
'HTTP_VIA',
'HTTP_X_FORWARDED_FOR',
'HTTP_FORWARDED_FOR',
'HTTP_X_FORWARDED',
'HTTP_FORWARDED',
'HTTP_CLIENT_IP',
'HTTP_FORWARDED_FOR_IP',
'VIA',
'X_FORWARDED_FOR',
'FORWARDED_FOR',
'X_FORWARDED',
'FORWARDED',
'CLIENT_IP',
'FORWARDED_FOR_IP',
'HTTP_PROXY_CONNECTION'
);
$flagProxy = false;
$libProxy = 'No';
foreach($scan_headers as $i) {
if ($_SERVER[$i]) { $flagProxy = true; }
if (in_array($_SERVER['REMOTE_PORT'], array(
8080,
80,
6588,
8000,
3128,
553,
554) || @fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 30)))
{ $flagProxy = true; }
if ($flagProxy == true && isset($_SERVER['REMOTE_ADDR']) && !empty($_SERVER['REMOTE_ADDR'])) {
// HTTP_X_FORWARDED_FOR = yourIP
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] == $myIP) { $libProxy = 'Transparent'; }
elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] == $_SERVER['REMOTE_ADDR']) { $libProxy = 'Simple';
elseif ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] != $_SERVER['REMOTE_ADDR'] ) { $libProxy = 'Distorting';
elseif ( $_SERVER['HTTP_X_FORWARDED_FOR'] == '' && $_SERVER['HTTP_CLIENT_IP'] == '' && !empty($_SERVER['HTTP_VIA']) ) { $libProxy = 'Anonymous';
else { $libProxy = 'High'; }
}
return $libProxy;
}
$ip = get_ip();
echo 'Proxy Server Detection<br />';
echo '=================<br /><br />';
$typeProxy = detect_proxy($ip);
echo 'Use Proxy Server : ' . $typeProxy . '<br />';
echo '<br />';
echo 'Brief IP Information' . '<br />';
echo '--------------------' . '<br />';
echo 'Your IP : ' . $ip . '<br />';
echo 'Language : ' . $_SERVER['HTTP_ACCEPT_LANGUAGE'] . '<br />';
echo '<br />';
echo 'Detail IP Information' . '<br />';
echo '---------------------' . '<br />';
echo 'HTTP_ACCEPT : ' . $_SERVER['HTTP_ACCEPT'] . '<br />';
echo 'HTTP_ACCEPT_ENCODING : ' . $_SERVER['HTTP_ACCEPT_ENCODING'] . '<br />';
echo 'HTTP_ACCEPT_LANGUAGE : ' . $_SERVER['HTTP_ACCEPT_LANGUAGE'] . '<br />';
echo 'HTTP_ACCEPT_CHARSET : ' . $_SERVER['HTTP_ACCEPT_CHARSET'] . '<br />';
echo 'HTTP_CONNECTION : ' . $_SERVER['HTTP_CONNECTION'] . '<br />';
echo 'HTTP_HOST : ' . $_SERVER['HTTP_HOST'] . '<br />';
echo 'HTTP_KEEP_ALIVE : ' . $_SERVER['HTTP_KEEP_ALIVE'] . '<br />';
echo 'HTTP_USER_AGENT : ' . $_SERVER['HTTP_USER_AGENT'] . '<br />';
echo 'REMOTE_HOST : ' . @gethostbyaddr($_SERVER['REMOTE_ADDR']) . '<br />';
echo 'REMOTE_PORT : ' . $_SERVER['REMOTE_PORT'] . '<br />';
echo '<br />';
echo 'REMOTE_ADDR : ' . $_SERVER['REMOTE_ADDR'] . '<br />';
echo 'HTTP_VIA : ' . $_SERVER['HTTP_VIA'] . '<br />';
echo 'HTTP_X_FORWARDED_FOR : ' . $_SERVER['HTTP_X_FORWARDED_FOR'] . '<br />';
echo 'HTTP_PROXY_CONNECTION : ' . $_SERVER['HTTP_PROXY_CONNECTION'] . '<br />';
echo 'HTTP_CLIENT_IP : ' . $_SERVER['HTTP_CLIENT_IP'] . '<br />';
?>
</body>
</html>
along with the script I've tried on both my localhost and another seperate web server
$url = 'https://www.othersite.com/test.php';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Language: en-US,en;q=0.9',
'Cache-Control: max-age=0',
'Connection: keep-alive'
));
$curl_page = curl_exec($curl);
$err = curl_errno ( $curl );
$errmsg = curl_error ( $curl );
$header = curl_getinfo ( $curl );
$httpCode = curl_getinfo ( $curl, CURLINFO_HTTP_CODE );
echo '------------------------';
echo '<pre>';
print_r($curl);
echo '</pre>';
echo '<pre>';
print_r($err);
echo '</pre>';
echo '<pre>';
print_r($errmsg);
echo '</pre>';
echo '<pre>';
print_r($header);
echo '</pre>';
echo '<pre>';
print_r($httpCode);
echo '</pre>';
if(curl_exec($curl) === false)
{
echo 'Curl error: ' . curl_error($curl);
}
echo '<h1>Response</h1>';
echo '<pre>';
print_r(curl_getinfo($curl));
echo '</pre>';
echo 'page:';
echo $curl_scraped_page;
var_dump($curl_scraped_page);
And this is the result >
Response
Array
(
[url] => https://www.othersite.com/test.php
[content_type] => text/html; charset=UTF-8
[http_code] => 500
[header_size] => 213
[request_size] => 323
[filetime] => -1
[ssl_verify_result] => 20
[redirect_count] => 0
[total_time] => 0.14
[namelookup_time] => 1.0E-6
[connect_time] => 0.046
[pretransfer_time] => 0.093
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => 0
[upload_content_length] => -1
[starttransfer_time] => 0.14
[redirect_time] => 0
[redirect_url] =>
[primary_ip] => 148.72.12.211
[certinfo] => Array
(
)
[primary_port] => 443
[local_ip] => 10.150.43.44
[local_port] => 51212
)
page:
C:\wamp64\www\testext.php:111:string '' (length=0)
So, for whatever reason, a lot of nothing. Not even echo'd html residing in the php file. Really confusing and I'm not even sure how to debug it with absolutely no response or error message for me to go forward upon. Anyone know what's going on or what other route I can take to test this?