1. 程式人生 > >簡述如何獲取請求方的IP地址,及php相關獲取函式解析

簡述如何獲取請求方的IP地址,及php相關獲取函式解析

        針對如何獲取請求方的IP地址,我們在這裡簡單的做一個分析:獲取ip的函式方法有多種多樣,但是基於的原理基本都是根據TCP/IP協議,http也是一樣。ip被包含在tcp/ip的資料包中,通過相應的函式可以獲取這個ip資料。如下圖所以。

          下面解析一下,不同的函式獲取ip的區別和聯絡:

         1、getenv()函式方法:getenv()函式獲取環境變數的值。(注意這個函式不支援IIS下的php)

                    HTTP_CLIENT_IP 是代理伺服器傳送的HTTP頭,HTTP_CLIENT_IP確實存在於http請求的header裡。如果是“超級匿名代理”,則返回none值。

                   getenv("REMOTE_ADDR")用來取得客戶端的 IP 地址,但如果客戶端是使用代理伺服器來訪問,那取到的就是代理伺服器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理伺服器取得客戶端的真實 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 來讀取。

                          //獲取使用者IP的完整程式碼:                         function get_client_ip()
                 {
                     $IP = '';
                     if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
                         $IP = getenv('HTTP_CLIENT_IP');
                    } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
                        $IP = getenv('HTTP_X_FORWARDED_FOR');
                    } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
                        $IP = getenv('REMOTE_ADDR');
                    } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
                        $IP = $_SERVER['REMOTE_ADDR'];
                   }
                        return $IP ? $IP : "unknow";
                }
           2、$_SERVER陣列方法:$_SERVER 是一個包含諸如頭資訊(header)、路徑(path)和指令碼位置(script locations)的陣列。陣列的實體由 web 伺服器建立。不能保證所有的伺服器都能產生所有的資訊;

                 $_SERVER["REMOTE_ADDR"]可以獲取正在瀏覽網頁的客戶端ip地址,理論上可以通過偽造http頭資訊來更改ip地址,但實際中是否容易偽造,未有嘗試。

                一下方法可以比較安全的獲取ip        

          $user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
         $user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];
         echo $user_IP

相關推薦

簡述如何獲取請求IP地址php相關獲取函式解析

        針對如何獲取請求方的IP地址,我們在這裡簡單的做一個分析:獲取ip的函式方法有多種多樣,但是基於的原理基本都是根據TCP/IP協議,http也是一樣。ip被包含在tcp/ip的資料包中,通過相應的函式可以獲取這個ip資料。如下圖所以。        

獲取請求主機IP地址,如果通過代理進來則透過防火墻獲取真實IP地址

cas return ++ strip dex except servlet desc 請求 /** * 獲取請求主機IP地址,如果通過代理進來,則透過防火墻獲取真實IP地址; * @Title: getIpAddress * @Descr

PHP獲取客戶端IP地址服務器IP地址

客戶端 get sse spa gets static p地址 tip sta ============================================獲取客戶端IP==============================================

Linux 獲取Centos7的IP地址 JDK + Tomcat +Mysql 安裝

   一.獲取Centos的IP地址       1.輸入 ip addr 檢視Centos ip地址 2.如果出現上圖結果,還需要修改配置 輸入圖下命令     回車後顯示下圖結果 將ONBOOT=no 改為 ONBOOT = yes 按Es

python 獲取本機IP地址檢測埠是否被佔用

import socket def get_host_ip(): """ get host ip address 獲取本機IP地址 :return: """ s = socket.socket(socket.

accept獲取對端IP地址getsockname獲取本端IP地址

getpeername函式用於獲取與某個套接字關聯的外地地址,accept函式在接收連線的時候也會獲取對端的地址。getsockname用於獲取本端的地址。看程式碼。 服務端: #include <unistd.h> #include <sys/

C語言 獲取本機IP地址非迴環地址

#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #inc

android 根據網路來獲取外網ip地址國家地區的介面

新浪的IP地址查詢介面:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js 新浪多地域測試方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?form

阿里雲X-Forwarded-For 發現tomcat記錄的日誌全部來自於SLB轉發的IP地址不能獲取請求的真實IP

1、背景:阿里雲的SLB的負載均衡,在tomcat中獲取不到真實IP,而是阿里的內網IP,SLB中倆臺或者3臺本身是區域網,這裡是SLB原理,可以看看,沒怎麼看懂,呵呵,要細細讀下。 2、需要開啟tomcat的X-Forwarded-For,在tomcat/conf/se

通過主機名(域名)獲取IP地址主機別名等信息

單位 規範 nts byname 會有 msd 解析失敗 bsp 主機名 一、所用API函數介紹 struct hostent FAR*gethostbyname( const char FAR* name ); 傳入參數:const char FAR*

如何在SqlServer中獲取前端連接的IP地址計算機名等信息

開始 操作 reads 連接建立 form 我們 計算機名 proto 否則 在一些需求中,可能我們需要知道連接到SqlServer的前端程序的一些系統信息,比如前端連接的計算機名稱,IP地址,什麽時候開始請求連接,什麽時候結束連接等信息。如果你對SqlServer的系統函

Java根據HttpServletRequest請求獲取伺服器的IP地址

  以下總結了兩種根據HttpServletRequest請求獲取發出請求瀏覽器客戶端所在伺服器的IP地址方法: 程式碼: import javax.servlet.http.HttpServletRequest; /** * 根據HttpServletRequest請求獲取發出請求瀏覽器客戶端

springboot 獲取訪問介面的請求IP地址

工具類: package com.siit.vehicleApi.vehicleServiceInterface.util; import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import

網站獲取別的計算機請求ip地址

//建立一個空的字元創 string ip = string.Empty; if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)

如何在SqlServer中獲取前端連線的IP地址計算機名等資訊 如何在SqlServer中獲取前端連線的IP地址計算機名等資訊

轉自:https://blog.csdn.net/josonweng/article/details/81126239 如何在SqlServer中獲取前端連線的IP地址,計算機名等資訊  sql server 連線 在一些需求中,可能我們需要知道連線到SqlServer的前

java獲取使用者ip地址處理0:0:0:0:0:0:0:1

/** * 獲得使用者遠端地址 */ public static String getRemoteAddr(HttpServletRequest request){ /*String remoteAddr = request.getHeader("X-Real-IP"); if (is

C/C++:Windows程式設計—程式碼獲取本地所有網絡卡資訊(網絡卡描述IP地址子網掩碼MAC地址

先看效果 看程式碼 使用 GetAdaptersInfo 函式獲取網絡卡的所有資訊。 MSDN函式說明 https://docs.microsoft.com/en-us/windows/desktop/api/iphlpapi/nf-iphlpapi-getadapters

js獲取ip地址作業系統瀏覽器版本等資訊可相容

  這次呢,說一下使用js獲取使用者電腦的ip資訊,剛開始只是想獲取使用者ip,後來就順帶著獲取了作業系統和瀏覽器資訊。   先說下獲取使用者ip地址,包括像ipv4,ipv6,掩碼等內容,但是大部分都要根據瀏覽器的支援情況來決定,目前主流瀏覽器對於ipv4的支援是統一的。第一種

iOS 獲取裝置資訊mac地址IP地址裝置名稱

#import "DeviceInfoUtil.h" #import "GlobleData.h" #import "sys/utsname.h" #import <AdSupport/AdSupport.h> #import <ifaddrs.h>

獲取請求的真實ip

1.介紹 多次轉發過來的請求獲取第一次請求的ip,大概是每次轉發都會把初始的請求ip放到請求頭之類的地方,大概是這樣吧。 protected String getIpFromRequest(