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



Answers

$_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

Question

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

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




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

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

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

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();




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

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 आदि रखना चाहते हैं।




$_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'];
}



मेरा पसंदीदा समाधान ज़ेंड फ्रेमवर्क 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




जैसा कि मुझे पता है कि विज़िटर / ग्राहक का आईपी पता प्राप्त करने का सरलतम तरीका $ _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;
}



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




 $_SERVER['REMOTE_ADDR'];

इसको आजमाओ




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

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');
}



जवाब $_SERVER चर का उपयोग करना है उदाहरण के लिए, $_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 का उपयोग कर रहा हूँ

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




Links