获取用户真实ip地址的方法
一、没有使用代理服务器的情况:
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; }
最近在获取浏览客户端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; }
永久地址:
转载随意~请带上教程地址吧^^

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP のexplode関数は、文字列を配列に分割するために使用される関数で、非常に一般的で柔軟性があります。分解関数を使用する過程で、エラーや問題が発生することがよくありますが、この記事では、分解関数の基本的な使用方法を紹介し、エラー報告を解決するいくつかの方法を紹介します。 1.explode関数の基本的な使い方 PHPでは、explode関数の基本的な構文は次のとおりです。explode(string$separator,string$stri

タイトル: PHP でexplode関数を使用する際の一般的なエラーと解決策 PHPでは、explode関数は、文字列を配列に分割するために使用される一般的な関数です。ただし、不適切な使用や不正なデータ形式が原因で、いくつかの一般的なエラーが発生する可能性があります。この記事では、explode 関数の使用時に発生する可能性のある問題を分析し、解決策と具体的なコード例を示します。間違い 1: delimiter パラメーターが渡されない。explode 関数を使用するときに最もよくある間違いの 1 つは、delimiter パラメーターが渡されないことです。

PHP プログラミングでは、文字列の処理は頻繁に必要な操作です。その中で、文字列の分割と結合は 2 つの一般的な要件です。これらの操作をより便利に実行するために、PHP は 2 つの非常に実用的な関数、つまり、explode 関数と implode 関数を提供します。この記事では、これら2つの機能の使い方と実践スキルを紹介します。 1.explode関数explode関数は、指定された区切り文字に従って文字列を分割し、配列を返すために使用されます。その関数プロトタイプは次のとおりです。

C で try および catch を使用するには、特定のコード例が必要です。C 言語には、例外処理用の組み込みの try および catch メカニズムがありません。ただし、try および catch の機能は、setjmp 関数および longjmp 関数を使用してシミュレートできます。以下では、これら 2 つの関数を例外処理に使用する方法と、対応するコード例を詳しく紹介します。まず、setjmp 関数と longjmp 関数の原理を理解する必要があります。 setjmp 関数を呼び出すと、現在のプログラムが保存されます。

PHP 関数「explode」を使用して、文字列を配列に分割します。PHP 開発では、指定された区切り文字に従って文字列を分割する必要がある状況によく遭遇します。このとき、PHP の組み込み関数「explode」を使用して文字列を配列に変換できます。この記事では、「explode」関数を使用して文字列を分割する方法と、関連するコード例を紹介します。 「explode」関数の基本構文は次のとおりです。

PHP の preg_match() 関数: 正規表現を使用して文字列を照合する方法、具体的なコード例が必要です 正規表現は、文字列処理における非常に強力で柔軟なツールです。 PHP では、preg_match() 関数を使用して通常の文字列マッチングを簡単に実行できるため、さまざまな複雑なパターン マッチングおよび置換操作を実現できます。この記事では、preg_match() 関数の使用法を紹介し、読者が関数をよりよく理解して適用できるように、具体的なコード例を示します。 preg_match

PHP 関数「explode」を使用して文字列を複数の部分文字列に分割する PHP プログラミングでは、文字列を複数の部分文字列に分割する必要がある状況によく遭遇します。このとき、PHP には、この関数を簡単に実装できる非常に便利な関数「explode」が用意されています。 「explode」関数の構文は次のとおりです。 arrayexplode(string$delimiter,string$string[,in

PHP 爆発エラーの解決策: 1. 間違った PHP コードを見つけて開きます; 2. 爆発関数部分を見つけます; 3. コードを「dump(explode(',',$str));die;」に変更します。 、配列をカンマで区切るだけを使用します。
