php獲取客戶端IP和php獲取伺服器端IP
-
1.php獲取客戶端IP
在PHP獲取客戶端IP時,常使用 $_SERVER["REMOTE_ADDR"] 。但如果客戶端是使用代理伺服器來訪問,那取到的是代理伺服器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理伺服器取得客戶端的真實 IP 地址,就要使用$_SERVER["HTTP_X_FORWARDED_FOR"]來讀取。
但只有客戶端使用“透明代理”的情況下,$_SERVER["HTTP_X_FORWARDED_FOR"] 的值才是客戶端真正的IP(如果是多層代理,該值可能是由客戶端真正IP和多個代理伺服器的IP組成,由逗號“,”分隔);而在“匿名代理”、“欺騙性代理”
REMOTE_ADDR 是你的客戶端跟你的伺服器“握手”時候的IP。如果使用了“匿名代理”,REMOTE_ADDR將顯示代理伺服器的IP。
HTTP_CLIENT_IP 是代理伺服器傳送的HTTP頭。如果是“超級匿名代理”,則返回none值。同樣,REMOTE_ADDR也會被替換為這個代理伺服器的IP。$_SERVER['REMOTE_ADDR']; //訪問端IP(有可能是使用者,有可能是代理伺服器的,也有可能是反向代理伺服器的)
$_SERVER['HTTP_CLIENT_IP']; //
$_SERVER['HTTP_X_FORWARDED_FOR']; //使用者是在哪個IP使用的代理(有可能存在,也可以偽造),有標準定義,用來識別經過HTTP代理
後的客戶端IP地址,格式:clientip,proxy1,proxy2
。詳細解釋見。三個值區別如下:
一、沒有使用代理伺服器的情況:
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, 定義一個函式getIP()
- function getClientIP(){
- if (getenv("HTTP_CLIENT_IP")) {
- $ip = getenv("HTTP_CLIENT_IP");
- }elseif(getenv("HTTP_X_FORWARDED_FOR")) {
- $ip = getenv("HTTP_X_FORWARDED_FOR");
- }elseif(getenv("REMOTE_ADDR")) {
- $ip = getenv("REMOTE_ADDR");
- else$ip = "Unknow";
- }
- return$ip;
- }
- 或者
- function getClientIp() {
- $ip = 'unknow';
- foreach (array(
- 'HTTP_CLIENT_IP',
- 'HTTP_X_FORWARDED_FOR',
- 'HTTP_X_FORWARDED',
- 'HTTP_X_CLUSTER_CLIENT_IP',
- 'HTTP_FORWARDED_FOR',
- 'HTTP_FORWARDED',
- 'REMOTE_ADDR') as$key) {
- if (array_key_exists($key, $_SERVER)) {
- foreach (explode(',', $_SERVER[$key]) as$ip) {
- $ip = trim($ip);
- //會過濾掉保留地址和私有地址段的IP,例如 127.0.0.1會被過濾
- //也可以修改成正則驗證IP
- if ((bool) filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
- return$ip;
- }
- }
- }
- }
- return$ip;
- }
2.php獲取伺服器端IP
伺服器端IP相關的變數
a. $_SERVER["SERVER_NAME"],需要使用函式gethostbyname()獲得。這個變數無論在伺服器端還是客戶端均能正確顯示。
b. $_SERVER["SERVER_ADDR"],在伺服器端測試:127.0.0.1(這個與httpd.conf中BindAddress的設定值相關)。在客戶端測試結果正確。- /**
- * 獲取伺服器端IP地址
- * @return string
- */
- function getServerIp() {
- if (isset($_SERVER)) {
- if($_SERVER['SERVER_ADDR']) {
- $server_ip = $_SERVER['SERVER_ADDR'];
- } else {
- $server_ip = $_SERVER['LOCAL_ADDR'];
- }
- } else {
- $server_ip = getenv('SERVER_ADDR');
- }
- return$server_ip;
- }
- 或者
- function getServerIP(){
- returngethostbyname($_SERVER["SERVER_NAME"]);
- }
相關推薦
php獲取客戶端IP和php獲取伺服器端IP
1.php獲取客戶端IP 在PHP獲取客戶端IP時,常使用 $_SERVER["REMOTE_ADDR"] 。但如果客戶端是使用代理伺服器來訪問,那取到的是代理伺服器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理伺服器取得客戶端的真實 IP 地址,就要
java 後臺獲取ip和js 獲取ip
java: 在jsp得到客戶端的ip地址有下面的方法 1.<input type="hidden" id="jiqiIP" name="jiqiIP"value="<%=reque
移動端fixed和input獲取焦點軟鍵盤彈出影響定位的問題
在移動端使用fixed將按鈕定位在底部時,當input獲取焦點彈出軟鍵盤時,在安卓系統會獎底部的按鈕頂上去 // 檢測瀏覽器的resize事件,當高度過小時就可以判定為出現這種情況,這時把定位改成ab或者直接隱藏掉之類的。 var h = document.body.sc
go get獲取的依賴庫和dep獲取的vendor目錄下的依賴庫不一致的問題------玩下Gopkg.toml
程式碼: package main import ( "fmt" "github.com/satori/go.uuid" ) func main() { u1 := uuid.Must(uuid.NewV4()) fmt.P
關於php的兩個符號@和$---php總會要知道的系列
在寫程式碼的時候,碰到了在函式和變數前家 @和$的的問題,於是就借這個機會,學習下php的傳值和傳引用這兩種方式 首先 @ 運算子只對表示式有效。對新手來說一個簡單的規則就是:如果能從某處得到值,就能在它前面加上 @ 運算子。例如,可以把它放在變數,函式和 inclu
java 反射機制 之 getMethods獲取所有公有方法 和 getDeclaredMethods 獲取本類所有方法
檔案結構: Person: package demo2; public class Person { private int age; private String name; public Person( String name,int ag
rabbitMQ 和 mqtt外掛 伺服器端的配置和使用
上一篇部落格我寫了mqtt在android上實現的小栗子,這篇講解的是如何搭建訊息佇列,並且開啟mqtt外掛 1.安裝erlang和rubbitmq(這裡不做過多的講解了,一路確定改安裝路徑) 2.安裝完成初始化 初始化rabbitmq(下邊這個百度連線就可以) htt
tcp/ip 多執行緒伺服器端的實現(參考tcp/ip網路程式設計)
執行緒的切換比程序快的多,因為它不需要切換資料區和堆 共享資料區和堆可以用來交換資訊 一、執行緒的建立 pthread_create()函式 #include<pthread.h> int prthread_create(pthread * thread,c
GET與POST比較-使用HTTP協議將客戶端的請求傳送到伺服器端的兩種方式
1、get是從伺服器上獲取資料,post是向伺服器傳送資料;2、 在客戶端,get方式在通過URL提交資料,資料在URL中可以看到,post方式資料放置在HTML HEADER內提交;3、 對於ge
使用TCP協議編寫一個網路程式,設定伺服器端的監聽埠是8002,當與客戶端建立連線後,伺服器端向客戶端傳送資料“Hello, world”,客戶端收到資料後列印輸出
import java.io.InputStream; import java.io.OutputStream; import java.net.*; public class Tc
rabbitMQ 和 mqtt外掛 伺服器端的配置和使用
上一篇部落格我寫了mqtt在android上實現的小栗子,這篇講解的是如何搭建訊息佇列,並且開啟mqtt外掛 1.安裝erlang和rubbitmq(這裡不做過多的講解了,一路確定改安裝路徑) 2.安裝完成初始化 3.修改配置檔案 修改圖片中第一個
使用Struts 2將客戶端JSON資料對映為伺服器端Java物件
上文()介紹瞭如何將Java物件序列化成JSON格式並傳到客戶端。這篇文章就說說如何將客戶端的JSON資料對映為伺服器端的Java物件。 pom.xml 需要引入struts2-json-plugin包。 <dependencies> <depen
wcf客戶端通過URL地址呼叫伺服器端地址
如果想讓伺服器端地址以URL的形式提供給外部呼叫,也就是在IE位址列中輸入URL可看見。可以採用如下方式 在伺服器端的配置檔案中新增源資料地址配置,在serviceBehaviors中新增 伺服器端配置檔案 <?xml version="1.0" encodin
修改arm開發板ip和uboot的環境變數ip
一,修改開發板uboot環境變數ipaddr 1.使用secureCRT串列埠工具連線開發板。 2.啟動開發板,倒數2秒按任意鍵進入boot選單介面。 3.輸入命令pri指令,得到開發板uboot
PHP獲取客戶端和服務器端IP(轉)
light 代理ip pre 客戶端測試 function 變量 clas env 環境 客戶端的ip變量: $_SERVER[‘REMOTE_ADDR‘] :客戶端IP,也有可能是代理IP $_SERVER[‘HTTP_CLIENT_IP‘]:代理端的IP,可能存在,也可
php 獲取客戶端的真實IP地址 和 檢查客戶端從什麼地方過來的請求
/* * 函式功能: 獲取客戶端的真實IP地址 * * 為什麼要用這個函式? * 因為我們線上Web伺服器絕大部分都處於Netscaler(簡稱NS)後面,客戶端訪問的地址統一由NS排程 * 由NS排程的訪問其實就是NS做了一層代理, 這期間就有一個問題, 因為真實
PHP獲取客戶端IP地址,服務器IP地址
客戶端 get sse spa gets static p地址 tip sta ============================================獲取客戶端IP==============================================
PHP 獲取客戶端 IP 地址
先來了解一個變數的含義: $_SERVER['REMOTE_ADDR']:瀏覽當前頁面的使用者計算機的ip地址 $_SERVER['HTTP_CLIENT_IP']:客戶端的ip $_SERVER['HTTP_X_FORWARDED_FOR']:瀏覽當前頁面的使用者計算機的閘道器
php獲取客戶端ip地址或者伺服器ip地址
1.$_SERVER['REMOTE_ADDR'] 客戶端IP,有可能是使用者的IP,也可能是代理的IP。 2.$_SERVER['HTTP_CLIENT_IP'] 代理端的IP,可能存在可偽造。 3.$_SERVER['HTTP_X_FORWARDER_FOR'] 使用者是在哪個IP使用的代理,可
PHP 獲取客戶端ip地址
一、如果沒有使用代理伺服器, REMOTE_ADDR = 客戶端IP HTTP_X_FORWARDED_FOR = 沒數值或不顯示 $ip = $_SERVER['REMOTE_ADDR']; 二、使用透明代理, REMOTE_ADDR = 最後