Rumah php教程 php手册 获取用户真实ip地址的方法

获取用户真实ip地址的方法

May 25, 2016 pm 04:56 PM
catch explode preg_match

一、没有使用代理服务器的情况:

  REMOTE_ADDR = 您的 IP

  HTTP_VIA = 没数值或不显示

  HTTP_X_FORWARDED_FOR = 没数值或不显示

 

  二、使用透明代理服务器的情况:Transparent Proxies

  REMOTE_ADDR = 最后一个代理服务器 IP

  HTTP_VIA = 代理服务器 IP

  HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

  这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

 

  三、使用普通匿名代理服务器的情况:Anonymous Proxies

  REMOTE_ADDR = 最后一个代理服务器 IP

  HTTP_VIA = 代理服务器 IP

  HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

  隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

 

  四、使用欺骗性代理服务器的情况:Distorting Proxies

  REMOTE_ADDR = 代理服务器 IP

  HTTP_VIA = 代理服务器 IP

  HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

  告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

 

  五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

  REMOTE_ADDR = 代理服务器 IP

  HTTP_VIA = 没数值或不显示

  HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

实例

/**
* 获得用户的真实IP地址
*
* @access  public
* @return  string
*/
function real_ip()
{
// 初始化一个变量$realip
    static $realip = NULL;
    // 如果$realip不真等于NULL,返回之
    if ($realip !== NULL)
    {
        return $realip;
    }
// 如果$_SERVER有值
    if (isset($_SERVER))
    {
     // 如果$_SERVER['HTTP_X_FORWARDED_FOR']有值
     // 表明客户端通过代理上网
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        {
         // 使用explode()函数将其用','分割成数组
            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */
            // 开始遍历数组
            foreach ($arr AS $ip)
            {
             // 去掉首尾的空白
                $ip = trim($ip);
    // 不是unknown就是真实上网地址,存值并退出循环
                if ($ip != 'unknown')
                {
                    $realip = $ip;
                    break;
                }
            }
        }
        // $_SERVER['HTTP_X_FORWARDED_FOR']无值 且
        // $_SERVER['HTTP_CLIENT_IP']有值,取其值作为真实IP
        elseif (isset($_SERVER['HTTP_CLIENT_IP']))
        {
            $realip = $_SERVER['HTTP_CLIENT_IP'];
        }
        // $_SERVER['HTTP_X_FORWARDED_FOR']无值(不是用过代理上网)并且
        // $_SERVER['HTTP_CLIENT_IP']也没有值
        else
        {
         // 如果$_SERVER['REMOTE_ADDR']有值,取其值作为真实IP
            if (isset($_SERVER['REMOTE_ADDR']))
            {
                $realip = $_SERVER['REMOTE_ADDR'];
            }
            else // 都没有值返回'0.0.0.0'
            {
                $realip = '0.0.0.0';
            }
        }
    }
    // $_SERVER没有值
    else 
    {
     // 如果getenv('HTTP_X_FORWARDED_FOR')非空取其值作为真实IP
        if (getenv('HTTP_X_FORWARDED_FOR'))
        {
            $realip = getenv('HTTP_X_FORWARDED_FOR');
        }
        // 如果getenv('HTTP_CLIENT_IP')非空取其值作为真实IP
        elseif (getenv('HTTP_CLIENT_IP'))
        {
            $realip = getenv('HTTP_CLIENT_IP');
        }
        // 否则取getenv('REMOTE_ADDR')的值作为真实IP
        else
        {
            $realip = getenv('REMOTE_ADDR');
        }
    }
    preg_match("/[d.]{7,15}/", $realip, $onlineip); // 此句干嘛用的?请高人指教一下。
    $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0'; // 此句又是干嘛用的?请指教。
    return $realip;
}
Salin selepas log masuk


最近在获取浏览客户端IP的功能的时候出现一个问题,主要的现象是这样的:一个在武汉使用北京电信的客户端的IP始终不能被我的程序访问,查了些资料修改了下,主要是对于c#获取IP的三种属性(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)的区分分析如下:

一、没有使用代理服务器的情况:

      REMOTE_ADDR = 您的 IP
      HTTP_VIA = 没数值或不显示
      HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情况:Transparent Proxies

      REMOTE_ADDR = 最后一个代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies

      REMOTE_ADDR = 最后一个代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies

      REMOTE_ADDR = 代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

      REMOTE_ADDR = 代理服务器 IP
      HTTP_VIA = 没数值或不显示
      HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

针对以上的属性分析将代码改为:

 

/// <summary>
        /// 获取客户端Ip
      /// </summary>
      /// <returns></returns>
        public string GetUserIP()
        {
            string _userIP;
            try
            {
                if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] == null)
                {
                    _userIP = HttpContext.Current.Request.UserHostAddress;
                }
                else
                {
                    _userIP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                }
            }
            catch (Exception)
            {
                _userIP = "无法获取此IP";
            }
            return _userIP;
        }
Salin selepas log masuk

永久地址:

转载随意~请带上教程地址吧^^

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan fungsi letupan PHP dan menyelesaikan ralat Cara menggunakan fungsi letupan PHP dan menyelesaikan ralat Mar 10, 2024 am 09:18 AM

Fungsi letupan dalam PHP ialah fungsi yang digunakan untuk memisahkan rentetan kepada tatasusunan Ia sangat biasa dan fleksibel. Dalam proses menggunakan fungsi letupan, kami sering menghadapi beberapa ralat dan masalah Artikel ini akan memperkenalkan penggunaan asas fungsi letupan dan menyediakan beberapa kaedah untuk menyelesaikan laporan ralat. 1. Penggunaan asas fungsi explode Dalam PHP, sintaks asas fungsi explode adalah seperti berikut: explode(string$separator,string$stri

Ralat dan penyelesaian biasa apabila menggunakan fungsi explode dalam PHP Ralat dan penyelesaian biasa apabila menggunakan fungsi explode dalam PHP Mar 11, 2024 am 08:33 AM

Tajuk: Ralat dan penyelesaian biasa apabila menggunakan fungsi explode dalam PHP Dalam PHP, fungsi explode ialah fungsi biasa yang digunakan untuk memisahkan rentetan kepada tatasusunan. Walau bagaimanapun, beberapa ralat biasa boleh berlaku disebabkan penggunaan yang tidak betul atau format data yang salah. Artikel ini akan menganalisis masalah yang mungkin anda hadapi apabila menggunakan fungsi letupan dan menyediakan penyelesaian serta contoh kod khusus. Kesilapan 1: Parameter pembatas tidak diluluskan. Apabila menggunakan fungsi letupan, salah satu kesilapan yang paling biasa ialah parameter pembatas tidak diluluskan.

Pisahkan dan cantumkan rentetan menggunakan fungsi meletup dan meletup Pisahkan dan cantumkan rentetan menggunakan fungsi meletup dan meletup Jun 15, 2023 pm 08:42 PM

Dalam pengaturcaraan PHP, pemprosesan rentetan adalah operasi yang kerap diperlukan. Antaranya, membelah dan menggabungkan rentetan adalah dua keperluan biasa. Untuk melaksanakan operasi ini dengan lebih mudah, PHP menyediakan dua fungsi yang sangat praktikal, iaitu fungsi meletup dan meletup. Artikel ini akan memperkenalkan penggunaan kedua-dua fungsi ini, serta beberapa kemahiran praktikal. 1. Fungsi explode Fungsi explode digunakan untuk membelah rentetan mengikut pembatas yang ditentukan dan mengembalikan tatasusunan. Prototaip fungsinya adalah seperti berikut: arra

Cara menggunakan try and catch dalam C Cara menggunakan try and catch dalam C Feb 21, 2024 am 09:03 AM

Cara menggunakan try and catch dalam C memerlukan contoh kod khusus Dalam bahasa C, tiada mekanisme try and catch terbina dalam untuk pengendalian pengecualian. Walau bagaimanapun, kefungsian try and catch boleh disimulasikan dengan menggunakan fungsi setjmp dan longjmp. Di bawah ini saya akan memperkenalkan secara terperinci cara menggunakan kedua-dua fungsi ini untuk pengendalian pengecualian dan memberikan contoh kod yang sepadan. Pertama, kita perlu memahami prinsip fungsi setjmp dan longjmp. Apabila fungsi setjmp dipanggil, program semasa akan disimpan.

Pisahkan rentetan ke dalam tatasusunan menggunakan fungsi PHP 'meletup' Pisahkan rentetan ke dalam tatasusunan menggunakan fungsi PHP 'meletup' Jul 24, 2023 pm 11:09 PM

Gunakan fungsi PHP "meletup" untuk memisahkan rentetan kepada tatasusunan Dalam pembangunan PHP, anda sering menghadapi situasi di mana anda perlu membelah rentetan mengikut pembatas yang ditentukan. Pada masa ini, kita boleh menggunakan fungsi terbina dalam PHP "meletup" untuk menukar rentetan kepada tatasusunan. Artikel ini akan memperkenalkan cara menggunakan fungsi "meletup" untuk memisahkan rentetan dan memberikan contoh kod yang berkaitan. Sintaks asas fungsi "explode" adalah seperti berikut: arrayexplode(

Apakah yang perlu saya lakukan jika php explode melaporkan ralat? Apakah yang perlu saya lakukan jika php explode melaporkan ralat? Jan 18, 2023 am 10:13 AM

Penyelesaian kepada ralat php explode: 1. Cari dan buka kod PHP yang salah 2. Cari bahagian fungsi explode 3. Ubah suai kod kepada "dump(explode(',',$str)); , gunakan Hanya koma-pisahkan tatasusunan.

Cara menggunakan fungsi explode untuk memisahkan rentetan dalam PHP Cara menggunakan fungsi explode untuk memisahkan rentetan dalam PHP Jun 26, 2023 pm 12:03 PM

Dalam bahasa PHP, terdapat banyak fungsi asas yang boleh membantu kami memproses rentetan dengan cepat dan cekap. Antaranya, fungsi letupan adalah fungsi pemisahan rentetan yang sangat praktikal. Ia boleh memisahkan rentetan kepada tatasusunan mengikut pembatas yang ditentukan, dan kemudian melakukan operasi rentetan yang lebih fleksibel. Dalam artikel ini, kami akan memperkenalkan cara menggunakan fungsi explode untuk memisahkan rentetan dalam PHP. 1. Format fungsi explode Format fungsi explode dalam bahasa PHP adalah seperti berikut: explode(separa

Fungsi preg_match() PHP: Cara memadankan rentetan menggunakan ungkapan biasa Fungsi preg_match() PHP: Cara memadankan rentetan menggunakan ungkapan biasa Nov 04, 2023 am 11:31 AM

Fungsi preg_match() PHP: Cara menggunakan ungkapan biasa untuk memadankan rentetan, contoh kod khusus diperlukan Ekspresi biasa adalah alat yang sangat berkuasa dan fleksibel dalam pemprosesan rentetan. Dalam PHP, fungsi preg_match() boleh digunakan untuk melakukan pemadanan rentetan biasa dengan mudah, dengan itu mencapai pelbagai operasi pemadanan corak dan penggantian yang kompleks. Artikel ini akan memperkenalkan penggunaan fungsi preg_match() dan menyediakan contoh kod khusus untuk membantu pembaca memahami dan menerapkannya dengan lebih baik. preg_match

See all articles