PHP में क्लाइंट आईपी पता कैसे प्राप्त करें?


मैं PHP का उपयोग कर क्लाइंट आईपी पते कैसे प्राप्त करूं?

मैं उस उपयोगकर्ता का रिकॉर्ड रखना चाहता हूं जिसने मेरी वेबसाइट में अपने आईपी पते के माध्यम से प्रवेश किया था।



Answers



जो भी आप करते हैं, ग्राहक से भेजे गए डेटा पर विश्वास न करें। $_SERVER['REMOTE_ADDR'] में कनेक्टिंग पार्टी का असली आईपी पता है यह सबसे विश्वसनीय मूल्य है जो आपको मिल सकता है

हालांकि, वे एक प्रॉक्सी सर्वर के पीछे हो सकते हैं, जिस स्थिति में प्रॉक्सी ने $_SERVER['HTTP_X_FORWARDED_FOR'] निर्धारित किया हो सकता है, लेकिन यह मान आसानी से धोखा दिया जा सकता है। उदाहरण के लिए, इसे प्रॉक्सी के बिना किसी के द्वारा सेट किया जा सकता है, या आईपी प्रॉक्सी के पीछे लैन से एक आंतरिक आईपी हो सकता है

इसका मतलब यह है कि यदि आप $_SERVER['HTTP_X_FORWARDED_FOR'] को सहेजने जा रहे हैं, तो सुनिश्चित करें कि आप $_SERVER['REMOTE_ADDR'] मान को भी सहेज लें। उदाहरण के लिए अपने डेटाबेस में विभिन्न क्षेत्रों में दोनों मूल्यों को सहेजकर।

यदि आप आईपी को स्ट्रिंग के रूप में डेटाबेस में सहेजने जा रहे हैं, तो सुनिश्चित करें कि आपके पास कम से कम 45 वर्णों के लिए स्थान है। IPv6 यहाँ रहने के लिए है और उन पते बड़े आईपीवी 4 पते से बड़े हैं

(ध्यान दें कि IPv6 आमतौर पर अधिकतम 39 वर्णों का उपयोग करता है लेकिन आईपीवी 4 पते के लिए एक विशेष आईपीवी 6 संकेतन भी है, जो इसके पूर्ण रूप में 45 अक्षरों तक हो सकता है। यदि आप जानते हैं कि आप क्या कर रहे हैं तो आप 39 वर्णों का उपयोग कर सकते हैं, लेकिन यदि आप बस इसे सेट करना और भूलना है, 45 का उपयोग करें)।




$_SERVER['REMOTE_ADDR'] वास्तव में वास्तविक क्लाइंट आईपी पते नहीं हो सकता है, क्योंकि यह आपको एक प्रॉक्सी के माध्यम से जुड़े ग्राहकों के लिए एक प्रॉक्सी पता देगा, उदाहरण के लिए यह हो सकता है कि आप वास्तव में क्या चाहें, हालांकि, आईपीएस के साथ क्या कर रहे हैं यह निर्भर करता है। अगर आप कहते हैं कि आपका ट्रैफ़िक कहां से हो रहा है, या उस उपयोगकर्ता से जो आईपी से जुड़ा हुआ है, यह याद करने की कोशिश करते हुए किसी का निजी RFC1918 पता आपको कोई अच्छा नहीं कर सकता है, जहां प्रॉक्सी या नेट प्रवेश द्वार का सार्वजनिक आईपी अधिक हो सकता है स्टोर करने के लिए उपयुक्त

X-Forwarded-For जैसे कई HTTP शीर्षलेख हैं, जिसके X-Forwarded-For विभिन्न प्रॉक्सी द्वारा निर्धारित किया जा सकता है या नहीं। समस्या यह है कि वे केवल HTTP हेडर हैं जिन्हें किसी के द्वारा सेट किया जा सकता है उनकी सामग्री के बारे में कोई गारंटी नहीं है $_SERVER['REMOTE_ADDR'] वास्तविक भौतिक आईपी पता है जो वेब सर्वर से कनेक्शन प्राप्त किया और प्रतिक्रिया को भेजा जाएगा। कुछ और ही मनमानी और स्वैच्छिक जानकारी है केवल एक ऐसा परिदृश्य है जिसमें आप इस जानकारी पर भरोसा कर सकते हैं: आप इस हेडर को सेट करने वाले प्रॉक्सी को नियंत्रित कर रहे हैं। केवल तभी मतलब है जब आपको 100% पता है कि हेडर कैसे और कैसे सेट किया गया था, तो आप इसे किसी भी महत्व के लिए ध्यान दें।

कहा है कि, यहाँ कुछ नमूना कोड है:

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

संपादक का नोट: उपरोक्त कोड का उपयोग करने के लिए सुरक्षा प्रभाव पड़ता है क्लाइंट सभी HTTP हेडर जानकारी (यानी $_SERVER['HTTP_... किसी भी मनमाना मान को चाहता है, जो उसे चाहता है। जैसे कि यह $_SERVER['REMOTE_ADDR'] का उपयोग करने के लिए कहीं अधिक विश्वसनीय है, क्योंकि यह उपयोगकर्ता द्वारा सेट नहीं किया जा सकता है।

से: http://roshanbh.com.np/2007/12/getting-real-ip-address-in-php.html







यह $_SERVER['REMOTE_ADDR'] चर में निहित होना चाहिए।




उपयोगकर्ता का आईपी प्राप्त करने का एक अच्छा तरीका यह एक क्लीनर कोड नमूना है।

$ip = $_SERVER['HTTP_CLIENT_IP']?$_SERVER['HTTP_CLIENT_IP']:($_SERVER['HTTP_X_FORWARDE‌​D_FOR']?$_SERVER['HTTP_X_FORWARDED_FOR']:$_SERVER['REMOTE_ADDR']);

यहां एक छोटा संस्करण है जो एल्विस ऑपरेटर का उपयोग करता है

$_SERVER['HTTP_CLIENT_IP']?:($_SERVER['HTTP_X_FORWARDE‌​D_FOR']?:$_SERVER['REMOTE_ADDR']);

यहां एक संस्करण है जो नोटिस हटाने के लिए जारी करने का उपयोग करता है (धन्यवाद, @ शसी कनथ)

$ip = isset($_SERVER['HTTP_CLIENT_IP'])?$_SERVER['HTTP_CLIENT_IP']‌:isset($_SERVER['HTT‌​P_X_FORWARDE‌​D_FOR'‌​])?$_SERVER['HTTP_X_‌​FORWARDED_FOR']:$_SE‌​RVER['REMOTE_ADDR']; 



मेरा पसंदीदा समाधान ज़ेंड फ्रेमवर्क 2 का उपयोग करता है यह $_SERVER गुण HTTP_X_FORWARDED_FOR , HTTP_CLIENT_IP , REMOTE_ADDR HTTP_CLIENT_IP , लेकिन इसके लिए कुछ भरोसेमंद प्रॉक्सी सेट करने के लिए एक वर्ग की घोषणा करता है और यह एक आईपी पते को एक सरणी नहीं देता है। मुझे लगता है कि यह ऐसा समाधान है जो उसके निकटतम आता है:

class RemoteAddress
{
    /**
     * Whether to use proxy addresses or not.
     *
     * As default this setting is disabled - IP address is mostly needed to increase
     * security. HTTP_* are not reliable since can easily be spoofed. It can be enabled
     * just for more flexibility, but if user uses proxy to connect to trusted services
     * it's his/her own risk, only reliable field for IP address is $_SERVER['REMOTE_ADDR'].
     *
     * @var bool
     */
    protected $useProxy = false;

    /**
     * List of trusted proxy IP addresses
     *
     * @var array
     */
    protected $trustedProxies = array();

    /**
     * HTTP header to introspect for proxies
     *
     * @var string
     */
    protected $proxyHeader = 'HTTP_X_FORWARDED_FOR';

    // [...]

    /**
     * Returns client IP address.
     *
     * @return string IP address.
     */
    public function getIpAddress()
    {
        $ip = $this->getIpAddressFromProxy();
        if ($ip) {
            return $ip;
        }

        // direct IP address
        if (isset($_SERVER['REMOTE_ADDR'])) {
            return $_SERVER['REMOTE_ADDR'];
        }

        return '';
    }

    /**
     * Attempt to get the IP address for a proxied client
     *
     * @see http://tools.ietf.org/html/draft-ietf-appsawg-http-forwarded-10#section-5.2
     * @return false|string
     */
    protected function getIpAddressFromProxy()
    {
        if (!$this->useProxy
            || (isset($_SERVER['REMOTE_ADDR']) && !in_array($_SERVER['REMOTE_ADDR'], $this->trustedProxies))
        ) {
            return false;
        }

        $header = $this->proxyHeader;
        if (!isset($_SERVER[$header]) || empty($_SERVER[$header])) {
            return false;
        }

        // Extract IPs
        $ips = explode(',', $_SERVER[$header]);
        // trim, so we can compare against trusted proxies properly
        $ips = array_map('trim', $ips);
        // remove trusted proxy IPs
        $ips = array_diff($ips, $this->trustedProxies);

        // Any left?
        if (empty($ips)) {
            return false;
        }

        // Since we've removed any known, trusted proxy servers, the right-most
        // address represents the first IP we do not know about -- i.e., we do
        // not know if it is a proxy server, or a client. As such, we treat it
        // as the originating IP.
        // @see http://en.wikipedia.org/wiki/X-Forwarded-For
        $ip = array_pop($ips);
        return $ip;
    }

    // [...]
}

पूरा कोड यहां देखें: https://raw.githubusercontent.com/zendframework/zend-http/master/src/PhpEnvironment/RemoteAddress.php




यह मैंने पाया है कि सबसे उन्नत विधि है, पहले से ही अतीत में कुछ दूसरों की कोशिश की। आगंतुक का आईपी पता प्राप्त करने के लिए सुनिश्चित करें (लेकिन कृपया ध्यान दें कि किसी भी हैकर आईपी पते को आसानी से गलत साबित कर सकता है)

function get_ip_address() {
    // check for shared internet/ISP IP
    if (!empty($_SERVER['HTTP_CLIENT_IP']) && validate_ip($_SERVER['HTTP_CLIENT_IP'])) {
        return $_SERVER['HTTP_CLIENT_IP'];
    }

    // check for IPs passing through proxies
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        // check if multiple ips exist in var
        if (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') !== false) {
            $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            foreach ($iplist as $ip) {
                if (validate_ip($ip))
                    return $ip;
            }
        } else {
            if (validate_ip($_SERVER['HTTP_X_FORWARDED_FOR']))
                return $_SERVER['HTTP_X_FORWARDED_FOR'];
        }
    }
    if (!empty($_SERVER['HTTP_X_FORWARDED']) && validate_ip($_SERVER['HTTP_X_FORWARDED']))
        return $_SERVER['HTTP_X_FORWARDED'];
    if (!empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && validate_ip($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
        return $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
    if (!empty($_SERVER['HTTP_FORWARDED_FOR']) && validate_ip($_SERVER['HTTP_FORWARDED_FOR']))
        return $_SERVER['HTTP_FORWARDED_FOR'];
    if (!empty($_SERVER['HTTP_FORWARDED']) && validate_ip($_SERVER['HTTP_FORWARDED']))
        return $_SERVER['HTTP_FORWARDED'];

    // return unreliable ip since all else failed
    return $_SERVER['REMOTE_ADDR'];
}

/**
 * Ensures an ip address is both a valid IP and does not fall within
 * a private network range.
 */
function validate_ip($ip) {
    if (strtolower($ip) === 'unknown')
        return false;

    // generate ipv4 network address
    $ip = ip2long($ip);

    // if the ip is set and not equivalent to 255.255.255.255
    if ($ip !== false && $ip !== -1) {
        // make sure to get unsigned long representation of ip
        // due to discrepancies between 32 and 64 bit OSes and
        // signed numbers (ints default to signed in PHP)
        $ip = sprintf('%u', $ip);
        // do private network range checking
        if ($ip >= 0 && $ip <= 50331647) return false;
        if ($ip >= 167772160 && $ip <= 184549375) return false;
        if ($ip >= 2130706432 && $ip <= 2147483647) return false;
        if ($ip >= 2851995648 && $ip <= 2852061183) return false;
        if ($ip >= 2886729728 && $ip <= 2887778303) return false;
        if ($ip >= 3221225984 && $ip <= 3221226239) return false;
        if ($ip >= 3232235520 && $ip <= 3232301055) return false;
        if ($ip >= 4294967040) return false;
    }
    return true;
}

स्रोत: http://blackbe.lt/advanced-method-to-obtain-the-client-ip-in-php/




जवाब $_SERVER चर का उपयोग करना है उदाहरण के लिए, $_SERVER["REMOTE_ADDR"] क्लाइंट का आईपी पता वापस करेगा।




इंटरनेट के पीछे विभिन्न प्रकार के उपयोगकर्ता हैं, इसलिए हम अलग-अलग औषधि से आईपी पते को पकड़ना चाहते हैं। वो हैं,

1. $_SERVER['REMOTE_ADDR'] - इसमें क्लाइंट का असली आईपी पता है यह उपयोगकर्ता के सबसे विश्वसनीय मूल्य है जो आपको मिल सकता है।

2. $_SERVER['REMOTE_HOST'] - यह होस्ट नाम प्राप्त करेगा जिसमें से उपयोगकर्ता वर्तमान पृष्ठ देख रहा है। लेकिन इस स्क्रिप्ट के लिए काम करने के लिए, होस्ट नाम लुकअप पर अंदर httpd.conf कॉन्फ़िगर होना चाहिए।

3. $_SERVER['HTTP_CLIENT_IP'] - जब उपयोगकर्ता साझा इंटरनेट सेवाओं से है तो यह आईपी पते को $_SERVER['HTTP_CLIENT_IP']

4. $_SERVER['HTTP_X_FORWARDED_FOR'] - जब वह प्रॉक्सी के पीछे होता है तो यह उपयोगकर्ता से आईपी पते को प्राप्त करेगा

इसलिए हम उन उपयोगकर्ताओं से वास्तविक आईपी पता प्राप्त करने के लिए इस निम्न संयुक्त फ़ंक्शन का उपयोग कर सकते हैं जो अलग-अलग स्थिति में देख रहे हैं,

// Function to get the user IP address
function getUserIP() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if(isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}



जैसा कि मुझे पता है कि विज़िटर / ग्राहक का आईपी पता प्राप्त करने का सरलतम तरीका $ _SERVER ['REMOTE_ADDR'] या $ _SERVER ['REMOTE_HOST'] चर का उपयोग कर रहा है

हालांकि, कभी-कभी यह आगंतुक का सही आईपी पता नहीं लौटाता है, इसलिए हम आईपी पता पाने के लिए कुछ अन्य सर्वर चर का उपयोग कर सकते हैं।

दोनों फ़ंक्शंस के नीचे के अंतर के बराबर हैं केवल कैसे और कहाँ से मूल्य प्राप्त किए जाते हैं।

getenv() को PHP में एक वातावरण चर में मान प्राप्त करने के लिए उपयोग किया जाता है।

// Function to get the client IP address

    function get_client_ip() {
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
       $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}

$ _SERVER एक सरणी है जिसमें वेब सर्वर द्वारा बनाए गए सर्वर चर शामिल हैं

// Function to get the client IP address

    function get_client_ip() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}



यह वह विधि है जिसका उपयोग मैं करता हूं, और यह एक IPv4 इनपुट को मान्य करता है:

// Get user IP address
if ( isset($_SERVER['HTTP_CLIENT_IP']) && ! empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && ! empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = (isset($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : '0.0.0.0';
}

$ip = filter_var($ip, FILTER_VALIDATE_IP);
$ip = ($ip === false) ? '0.0.0.0' : $ip;



मुझे यह कोडनिपेट पसंद है:

function getClientIP() {

    if (isset($_SERVER)) {

        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
            return $_SERVER["HTTP_X_FORWARDED_FOR"];

        if (isset($_SERVER["HTTP_CLIENT_IP"]))
            return $_SERVER["HTTP_CLIENT_IP"];

        return $_SERVER["REMOTE_ADDR"];
    }

    if (getenv('HTTP_X_FORWARDED_FOR'))
        return getenv('HTTP_X_FORWARDED_FOR');

    if (getenv('HTTP_CLIENT_IP'))
        return getenv('HTTP_CLIENT_IP');

    return getenv('REMOTE_ADDR');
}



$ip = "";

if (!empty($_SERVER["HTTP_CLIENT_IP"]))
{
 //check for ip from share internet
 $ip = $_SERVER["HTTP_CLIENT_IP"];
}
elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
 // Check for the Proxy User
 $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
else
{
 $ip = $_SERVER["REMOTE_ADDR"];
}
echo $ip;



 $_SERVER['REMOTE_ADDR'];

इसको आजमाओ




खैर, यह केवल GLOBAL चर का उपयोग करके किया जा सकता है जिसका नाम $_SERVER

$_SERVER एक सरणी है जिसमें एक विशेषता नाम REMOTE_ADDR

बस इसे $userIp = $_SERVER['REMOTE_ADDR']; जैसे असाइन करें $userIp = $_SERVER['REMOTE_ADDR'];

या सीधे इसे इस्तेमाल करें जैसे echo $_SERVER['REMOTE_ADDR']; या echo ($_SERVER['REMOTE_ADDR']);




जैसा कि अन्य सभी ने कहा कि इससे पहले कि आप $_SERVER['REMOTE_ADDR']; उपयोग कर सकें $_SERVER['REMOTE_ADDR']; क्लाइंट आईपी पता पाने के लिए

इसके अलावा, अगर आपको किसी उपयोगकर्ता के बारे में अधिक जानकारी चाहिए, तो आप इसका उपयोग कर सकते हैं:

<?php
    $ip='0.0.0.0';
    $ip=$_SERVER['REMOTE_ADDR'];
    $clientDetails = json_decode(file_get_contents("http://ipinfo.io/$ip/json"));
    echo "You're logged in from: <b>" . $clientDetails->country . "</b>";
?>

क्लाइंट की अधिक विशिष्ट जानकारी $ ग्राहक में जाती है विवरण
आप $ clientDetails चर में संग्रहीत json आइटम ला सकते हैं: $ clientDetails-> PostalCode / hostname / region / loc ...

मैं अतिरिक्त जानकारी प्राप्त करने के लिए ipinfo.io का उपयोग कर रहा हूँ

मुझे उम्मीद है यह मदद करेगा।




निम्न कार्य सभी संभावनाओं को निर्धारित करते हैं और कॉमा से अलग (आईपी, आईपी, आदि) में मूल्य लौटाते हैं।

इसके पास आईपी पते (निजी रेंज और आरक्षित रेंज) को मान्य करने के लिए वैकल्पिक सत्यापन कार्य (डिफ़ॉल्ट रूप से अक्षम होने वाला पहला पैरामीटर) भी है।

<?php
echo GetClientIP(true);

function GetClientIP($validate = False){
  $ipkeys = array(
  'REMOTE_ADDR', 
  'HTTP_CLIENT_IP', 
  'HTTP_X_FORWARDED_FOR', 
  'HTTP_X_FORWARDED', 
  'HTTP_FORWARDED_FOR', 
  'HTTP_FORWARDED', 
  'HTTP_X_CLUSTER_CLIENT_IP'
  );

  /*
  now we check each key against $_SERVER if contain such value
  */
  $ip = array();
  foreach($ipkeys as $keyword){
    if( isset($_SERVER[$keyword]) ){
      if($validate){
        if( ValidatePublicIP($_SERVER[$keyword]) ){
          $ip[] = $_SERVER[$keyword];
        }
      }else{
        $ip[] = $_SERVER[$keyword];
      }
    }
  }

  $ip = ( empty($ip) ? 'Unknown' : implode(", ", $ip) );
  return $ip;

}
function ValidatePublicIP($ip){
  if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
    return true;
  }
  else {
    return false;
  }
} 



यह फ़ंक्शन कॉम्पैक्ट है और आप इसे हर जगह उपयोग कर सकते हैं परंतु !

इसे न भूलो ! इस प्रकार फ़ंक्शंस या कोड ब्लॉकों में उपयोगकर्ता असली आईपी को रिकॉर्ड करने की गारंटी नहीं है क्योंकि कुछ उपयोगकर्ता प्रॉक्सी या अन्य सुरक्षित गेटवे का उपयोग अदृश्य हो सकते हैं या ट्रैकिंग नहीं कर सकते हैं

पीएचपी फ़ंक्शन:

function GetIP()
{
    if ( getenv("HTTP_CLIENT_IP") ) {
        $ip = getenv("HTTP_CLIENT_IP");
    } elseif ( getenv("HTTP_X_FORWARDED_FOR") ) {
        $ip = getenv("HTTP_X_FORWARDED_FOR");
        if ( strstr($ip, ',') ) {
            $tmp = explode(',', $ip);
            $ip = trim($tmp[0]);
        }
    } else {
        $ip = getenv("REMOTE_ADDR");
    }
    return $ip;
}

उपयोग:

$IP = GetIP(); या सीधे GetIP();




function get_client_ip() 
{
   $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
       $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';

   return $ipaddress;
} 



उसके जैसा????

if(($ip=filter_input(INPUT_SERVER,'REMOTE_ADDR',validate_ip))===false or empty($ip)){
  exit;
  }
echo $ip;

पुनश्च

if(($ip=filter_input(INPUT_SERVER,'REMOTE_ADDR',FILTER_VALIDATE_IP|FILTER_FLAG_NO_PRIV_RANGE|FILTER_FLAG_NO_RES_RANGE))===false){
  header('HTTP/1.0 400 Bad Request');
  exit;
}

'HTTP_' या 'X-' के साथ शुरू होने वाले सभी शीर्षलेखों को क्रमशः धोखा दिया जा सकता है उपयोगकर्ता परिभाषित यदि आप ट्रैक का उपयोग करने के लिए cooies आदि रखना चाहते हैं।




यहाँ एक साधारण एक लाइनर है

$ip = $_SERVER['HTTP_X_FORWARDED_FOR']?: $_SERVER['HTTP_CLIENT_IP']?: $_SERVER['REMOTE_ADDR'];

संपादित करें:

उपरोक्त कोड आरक्षित पते (जैसे 10.0.0.1), रास्ते में सभी प्रॉक्सी सर्वर के पते की सूची , आदि भेज सकते हैं। इन मामलों को संभालने के लिए निम्नलिखित कोड का उपयोग करें:

function valid_ip($ip) {
    // for list of reserved IP addresses, see https://en.wikipedia.org/wiki/Reserved_IP_addresses
    return $ip && substr($ip, 0, 4) != '127.' && substr($ip, 0, 4) != '127.' && substr($ip, 0, 3) != '10.' && substr($ip, 0, 2) != '0.' ? $ip : false;
}

function get_client_ip() {
    // using explode to get only client ip from list of forwarders. see https://en.wikipedia.org/wiki/X-Forwarded-For
    return
    @$_SERVER['HTTP_X_FORWARDED_FOR'] ? explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'], 2)[0] :
    @$_SERVER['HTTP_CLIENT_IP'] ? explode(',', $_SERVER['HTTP_CLIENT_IP'], 2)[0] :
    valid_ip(@$_SERVER['REMOTE_ADDR']) ?:
    'UNKNOWN';
}

echo get_client_ip();



$_SERVER['REMOTE_ADDR'];

उदाहरण:

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}