Proxy Detect

Discussion in 'PHP' started by gigamike, Jan 12, 2012.

  1. #1
    Guys,

    I have a class that detects if the user is using proxy, pls see below, but not sure what im still missing coz some proxy site cant still be detected by my class like zend2.com and http://hidemyass.com/. Any ideas :)

    TIA

    
    class proxyCheck {
        /**
        * Timeout for fsockopen
        * @access public
        * @public int
        */
        public $timeout = 5;
          
        /**
        * Common ports for testing
        * @access public
        * @public array
        */
        public $ports = array(8080,6588,8000,3128,553,554,1080,9179,808,80,34123,35802);
    	public $sockets = array(3128,8080);
          
        /**
        * Cookie name
        * @access public
        * @public string
        */
        public $cookieName = "proxyCheck";
          
        /**
        * proxyCheck constructor
        * @access public
        */
    	public function proxyDetect() {
    		/*
    		echo "header".$this->checkHeder();
    		echo "<br />";		
    		echo "port".$this->checkPort();
    		echo "<br />";
    		echo "cookie".$this->checkCookie();
    		*/
    		
    		if($this->checkHeder() || $this->checkPort() || $this->checkCookie()){
    			return true;
    		}else{
    			return false;			
    		}
    	}
        
        /**
        * Check usual proxy headers
        * @return array data
        * @access public
        */
        public function checkHeder() {
        	if(isset($_SERVER['HTTP_FORWARDED_FOR'])) {
            	return true;
            }
    		            
        	if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            	return true;
            }
                  
            if(isset($_SERVER['HTTP_X_FORWARDED'])) {
            	return true;
    		}
                  
            if(isset($_SERVER['HTTP_FORWARDED'])) {
            	return true;
            }
                  
            if(isset($_SERVER['HTTP_PROXY_AGENT'])) {
            	return true;
            }
                  
            if(isset($_SERVER['HTTP_VIA'])) {
            	return true;
            }
                  
            if(isset($_SERVER['HTTP_PROXY_CONNECTION'])) {
            	return true;
            }
                  
            if(isset($_SERVER['HTTP_CLIENT_IP'])) {
            	return true;
            }
    	}
            
        /**
        * Check common ports
        * @param string ip
        * @return array data
        * @access public
        */
        public function checkPort() {
    		$port = $_SERVER['REMOTE_PORT'];
    		$ip = $_SERVER['REMOTE_ADDR'];
    		
    		echo "<br /> $port | $ip <br />";
    		
    		if(in_array($port, $this->ports)){
    			return true;
    		}
                
            foreach($this->sockets as $port) {
            	$fp = @fsockopen($ip,$port,$errno,$errstr,$this->timeout);
                if(!empty($fp)){ 
    				return true;
    			}
              	@fclose($fp);
    		}
    		
    		return false;
        }
            
    	/**
    	* Cookie trap
        * @return true on finded proxy
        * @access public
        */
        
    	public function checkCookie() {
        	if(isset($_COOKIE[$this->cookieName])) {
            	if($_SERVER['REMOTE_ADDR'] != $_COOKIE[$this->cookieName]) return true;
            } else {
               	@setcookie($this->cookieName, $_SERVER['REMOTE_ADDR']);    
    		}
        }
    }
    
     	$myProxy = new proxyCheck();
    	if($myProxy->proxyDetect()){
    		echo 'you are using proxy';
    	}else{
    		echo 'you are not using proxy';
    	}
    
    Code (markup):
     
    gigamike, Jan 12, 2012 IP
  2. Arttu

    Arttu Member

    Messages:
    139
    Likes Received:
    2
    Best Answers:
    8
    Trophy Points:
    40
    #2
    Those sites are faking browser like header so you can't detect whether it's a proxy or not by checking the header. You could check the user's ip against a blacklist.
     
    Arttu, Jan 12, 2012 IP