簡述如何獲取請求方的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";
}
$_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(