0

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?

Brian Bruman
  • 883
  • 12
  • 28

1 Answers1

0

The first script you posted has several syntax errors. When you call it via , you are getting an HTTP 500 error because it is throwing exceptions.

A few errors of note from testing:

  • You do not close your foreach loop with a curly brace.
  • Your series of nested if statements are missing curly braces.
  • The $_SERVER superglobal will not be populated with all values when run from command line (just an FYI from my testing -- not necessarily an issue) resulting in several undefined index errors.

Work on that script separate and once it runs correctly, then you can call it from another one.

Jeremy Harris
  • 24,318
  • 13
  • 79
  • 133
  • thank you. I should use a better IDE even for just single scripts. Serves me right for taking excerpts from the web and assuming they are correct without fulling debugging them. Thanks much for the info/feedback :) – Brian Bruman Dec 30 '18 at 17:35